diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0343255 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,17 @@ +{ + "cSpell.language": "de-de,en", + "cSpell.words": [ + "Glassfish", + "autovacuum", + "editionswissenschaftlich", + "EFFW", + "Fouine", + "freigeschalten", + "Persistenzkontext", + "Planerstatistiken", + "Plantypen", + "SFSB", + "unterlagerte", + "Wallstein" + ], +} \ No newline at end of file diff --git a/chapters/thesis/chapter01.tex b/chapters/thesis/chapter01.tex index 5aa0ff6..d73e970 100644 --- a/chapters/thesis/chapter01.tex +++ b/chapters/thesis/chapter01.tex @@ -11,7 +11,19 @@ um eine längere Bearbeitung anzuzeigen. \section{Motivation} \label{sec:intro:motivation} -Lorem Ipsum +Die Frank-Wedekind-Bibliothek soll als Grundlage weiterer Forschungen dienen. Durch die weitere Forschung soll die +literarhistorische und kulturgeschichtliche Wissen über die Kultur zwischen 1880 und 1918 erweitern. Um dieses +Vorhaben umsetzen zu können muss die Anwendung dem Benutzer gerecht werden, damit diese verwendet wird und somit +den Wissenstand entsprechend erweitert werden kann. + +Um das Ziel der Akzeptanz zu erreichen und das sich die Bediener rein auf ihre Arbeit konzentrieren können, muss mit der +Anwendung flüssig interagiert werden können. Entsprechend müssen die Wartzeiten auf ein minimum reduziert werden. +Des Weiteren muss die Stabilität der Anwendung gesteigert werden. + +\section{Ausgangslage} +\label{sec:intro:initial-situation} + +\mytodos{hier die Grundlagen aus dem Expose? Braucht man die Motivation dann noch?} \section{Ziel der Arbeit} \label{sec:intro:goal} @@ -29,16 +41,24 @@ Hierbei ist auch ein Vergleich mit anderen Technologien angedacht. \label{sec:intro:structure} Zu Begin der Arbeit werden im Kapitel \ref{ch:basics} die Struktur und der grundsätzliche Aufbau der Anwendung -erklärt. Hierbei wird aufgezeigt auf welche Probleme auftreten können und wie diese zu überprüfen sind. -Nachfolgenden wird im Kapitel \ref{ch:concept} die Konzepte vorgestellt und aus verschiedenen Blickwinkel -betrachtet. Hierbei wird versucht .... -Bei Performance-Untersuchung in Kapitel \ref{ch:performance-checking} werden nun die Konzepte angewandt, um -die Probleme zu identifizieren. -Danach werden die Untersuchungen ausgewertet und die Performance-Probleme identifiziert. Hierbei ist nun ein -gesondertes Vorgehen je erkannten Problem durchzuführen, um diese zu beheben oder mindestens in einen akzeptablen -Rahmen zu verbessern. -Nach der Optimierung kommt nun die Evaluierung im Kapitel \ref{ch:evaluation} um zu überprüfen ob die Anpassungen +erklärt. Hierbei wird aufgezeigt an welchen Stellen immer wieder zu Unstimmigkeiten kommen kann und wie diese zu +überprüfen sind. + +Nachfolgenden wird im Kapitel \ref{ch:concept} die Konzepte vorgestellt mit welchen man die Probleme ermitteln wird. +Hierbei ist zusätzlich ein Blick auf andere Frameworks sinnvoll, um dort aus den bekannten Anomalien zu lernen und +deren Lösungsansatz zu überprüfen ob diese angewandt werden kann. + +Bei den Performance-Untersuchung in Kapitel \ref{ch:performance-checking} werden nun die Konzepte angewandt, um +die Problemstellen zu identifizieren. Diese werden dann bewertet, unter den Gesichtspunkten ob eine Optimierung an +dieser Stelle sinnvoll ist, oder ob der Arbeitsaufwand dafür zu enorm ist. + +Nach der Entscheidung der Reihenfolge der zu bearbeitenden Punkte, wird im Kapitel \ref{ch:optimizing} je nach +Problemart ein gesondertes Vorgehen der Optimierung durchgeführt, um diese zu beheben oder mindestens in einen +akzeptablen Rahmen zu verbessern. Diese Optimierungen werden dann in der Software entsprechend dem Weg angepasst. + +Nach der Optimierung kommt nun die Evaluierung im Kapitel \ref{ch:evaluation}, um zu überprüfen ob die Anpassungen die gewünschten Verbesserung in der Performance gebracht haben. -Zum Abschluss wird explizit die Anpassungen dargestellt, die zu einer Verbesserung geführt haben und wie diese -entsprechend umgesetzt werden müssen. Zusätzliche wird beschrieben wie ein weiteres Vorgehen durchgeführt werden -kann. + +Zum Abschluss im Kapitel \ref{ch:summary_and_outlook} wird explizit die Anpassungen dargestellt, die zu einer +merklichen Verbesserung geführt haben und wie diese entsprechend umgesetzt werden müssen. Zusätzliche wird +beschrieben wie ein weiteres Vorgehen durchgeführt werden kann. diff --git a/chapters/thesis/chapter02.tex b/chapters/thesis/chapter02.tex index 9571097..01c26e7 100644 --- a/chapters/thesis/chapter02.tex +++ b/chapters/thesis/chapter02.tex @@ -61,7 +61,7 @@ zu verringern. Um Anfragen die den Zugriff auf die Festplatte benötigen effizie \label{fig:webrequest} \end{figure} -\section{Glassfisch - Enterprise Java Beans} +\section{Glassfish - Enterprise Java Beans} \label{sec:basics:ejb} In den Java-EE-An\-wen\-dung\-en wird der \textit{Persistenzkontext} für die Anfragen vom \textit{Application-Server} @@ -74,7 +74,7 @@ Entities in den \textit{Persistenzkontext} geladen werden. Da dies häufig zu Sp \citep[79]{MüllerWehr2012} führen kann, muss hier darauf geachtet werden, nicht mehr benötigte Entities aus dem \textit{Persistenzkontext} zu lösen. -\section{Glassfish - Java Persinstance API} +\section{Glassfish - Java Persistance API} \label{sec:basics:jpa} Die \textit{Java Persistence API (JPA)} wird als First-Level-Cache in Java-EE-An\-wen\-dung verwendet, hier nehmen die @@ -182,5 +182,3 @@ Bei \textit{Langen} Abfragen ist die Abhandlung >>Optimizing Iceberg Queries wit Des Weiteren können über das Modul \texttt{pg\_stat\_statements} Statistiken der Aufrufe die an den Server gestellt wurden, ermittelt werden \citep{PostgresF27:2023}. Hierbei können die am häufigsten Aufgerufenen und die Anfragen mit der längsten Ausführungszeit ermittelt werden. - -% \ No newline at end of file diff --git a/chapters/thesis/chapter03.tex b/chapters/thesis/chapter03.tex index 00ca368..60d83a3 100644 --- a/chapters/thesis/chapter03.tex +++ b/chapters/thesis/chapter03.tex @@ -3,6 +3,7 @@ \label{ch:concept} \section{Aufbau der Umfrage} +\label{sec:concept:poll} % erste Frage sollte unterscheiden ob Bearbeiter oder Benutzer ist % an welchen Aktion kommt es zu längeren Wartezeiten @@ -10,9 +11,24 @@ % treten sie sporadisch oder immer mit gleichen Muster (z.B. immer Nachmittags, immer bei der gleichen Abfolge an Aktionen) auf \section{Allgemeine Betrachtung des Systems} +\label{sec:concept:viewsystem} + +% Untersuchung des Servers \section{Das Vorgehen der Optimierung} +\label{sec:concept:optimizing} + +% Anhand der Umfragen werden die verschiedenen Seiten ermittelt und mit den Tools überprüft +% Während dessen kann über ein Script die Seite automatisiert abgefragt und das Trace aktiv sind +% je nach erkentnis mss dann der Lösungsweg beschritten werden +% Beachten des Speicherverbrauchs! \section{Aktueller Aufbau der Software} +\label{sec:concept:softwarestructure} + +% Hier vielleicht nochmal ein Verweis auf die Grundlagen, oder direkt auf die MVC-Technik \section{Vergleich mit anderen Technologien} +\label{sec:concept:technologiecompare} + +% Vergleich mit AspNetCore und vielleicht VueJS oder Konsorten, wobei hier der Serverteil fehlt diff --git a/chapters/thesis/chapter04.tex b/chapters/thesis/chapter04.tex index e3c4f6c..4a78328 100644 --- a/chapters/thesis/chapter04.tex +++ b/chapters/thesis/chapter04.tex @@ -3,9 +3,23 @@ \label{ch:performance-checking} \section{Auswertung der Umfrage} +\label{sec:performance-checking:poll} + +% Auswerten ob es einen Zusammenhang zwischen bestimmten Zeiten gibt oder ob es +% eine bestimmte Reihenfolge gibt, bei der die Probleme auftreten \section{Einbau und Aktivieren von Performance-Messung} +\label{sec:performance-checking:performance-measure} + +% \section{Statistiken im PostrgreSQL auswerten} +\label{sec:performance-checking:postgresql-statistics} + +% Logs auswerten, am besten vom Produktionsserver. Ebenfalls sollte man die Webseite +% prüfen, die den Cache von OpenJPE auswerten \section{Überprüfung des PostgreSQL und Servers} +\label{sec:performance-checking:postgresql-checking} + +% Konfiguration vom Produktionsserver prüfen diff --git a/chapters/thesis/chapter05.tex b/chapters/thesis/chapter05.tex index e1f2000..80037df 100644 --- a/chapters/thesis/chapter05.tex +++ b/chapters/thesis/chapter05.tex @@ -3,12 +3,16 @@ \label{ch:optimizing} \section{Ermittlung der Performance-Probleme} +\label{sec:optimizing:performance} \section{Analyse der Abfrage} +\label{sec:optimizing:query-analyse} \section{Optimierungen der Abfragen} +\label{sec:optimizing:query-optimizing} \section{Anpassung der Konfiguration} +\label{sec:optimizing:configuration} und hier ein sql-beispiel \autoref{lst:tester} \includecode[SQL]{chapters/thesis/chapter05_example.sql}{lst:tester}{ein sql beispiel} diff --git a/frontbackmatter/thesis/AbstractDE.tex b/frontbackmatter/thesis/AbstractDE.tex new file mode 100644 index 0000000..b505ced --- /dev/null +++ b/frontbackmatter/thesis/AbstractDE.tex @@ -0,0 +1,20 @@ +%******************************************************* +% Abstract in German +%******************************************************* +\begin{otherlanguage}{ngerman} + \pdfbookmark[0]{Zusammenfassung}{Zusammenfassung} + \chapter*{Zusammenfassung} + Kurze Zusammenfassung des Inhaltes in deutscher Sprache von ca. einer Seite länge. Dabei sollte vor allem auf die folgenden Punkte eingegangen werden: + \begin{itemize} + \item Motivation: Wieso ist diese Arbeit entstanden? Warum ist das Thema der Arbeit (für die Allgemeinheit) interessant? Dabei sollte die Motivation von der konkreten Aufgabenstellung, z.B. durch eine Firma, weitestgehend abstrahiert werden. + \item Inhalt: Was ist Inhalt der Arbeit? Was genau wird in der Arbeit behandelt? Hier sollte kurz auf Methodik und Arbeitsweise eingegangen werden. + \item Ergebnisse: Was sind die Ergebnisse der Arbeit? Ein kurzer Überblick über die wichtigsten Ergebnisse als Teaser, um die Arbeit vollständig zu lesen. + \end{itemize} + \medskip + + \noindent + Eine großartige Anleitung von Kent Beck, wie man gute Abstracts schreibt, finden Sie hier: + \begin{center} + \url{https://plg.uwaterloo.ca/~migod/research/beckOOPSLA.html} + \end{center} +\end{otherlanguage} diff --git a/frontbackmatter/thesis/AbstractEN.tex b/frontbackmatter/thesis/AbstractEN.tex new file mode 100644 index 0000000..b70cd04 --- /dev/null +++ b/frontbackmatter/thesis/AbstractEN.tex @@ -0,0 +1,20 @@ +%******************************************************* +% Abstract in English +%******************************************************* +\begin{otherlanguage}{american} + \pdfbookmark[0]{Abstract}{Abstract} + \chapter*{Abstract} + A short summary of the contents in English of about one page. The following points should be addressed in particular: + \begin{itemize} + \item Motivation: Why did this work come about? Why is the topic of the work interesting (for the general public)? The motivation should be abstracted as far as possible from the specific tasks that may be given by a company. + \item Content: What is the content of this thesis? What exactly is covered in the thesis? The methodology and working method should be briefly discussed here. + \item Results: What are the results of this work? A brief overview of the most important results as a teaser to read the complete thesis. + \end{itemize} + \medskip + + \noindent + BTW: A great guide by Kent Beck how to write good abstracts can be found here: + \begin{center} + \url{https://plg.uwaterloo.ca/~migod/research/beckOOPSLA.html} + \end{center} +\end{otherlanguage} diff --git a/thesis.pdf b/thesis.pdf index e1e2992..4ecb586 100644 Binary files a/thesis.pdf and b/thesis.pdf differ diff --git a/thesis.tex b/thesis.tex index ac8bb9c..0159a89 100644 --- a/thesis.tex +++ b/thesis.tex @@ -20,6 +20,7 @@ % https://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings %\lstinputlisting[frame=tb,language=SQL,caption={ein sql beispiel},label=lst:tester]{chapters/thesis/chapter05_example.sql} \newcommand{\includecode}[4][c]{\lstinputlisting[caption=#4,frame=tb,label=#3,language=#1]{#2}} +\newcommand\mytodos[1]{\fcolorbox{black}{lightgray}{\textit{\textcolor{red}{TODO: #1}}}} % Beispiel für externe Datei: %\includecode[SQL]{chapters/thesis/chapter05_example.sql}{lst:tester}{ein sql beispiel} % Beispiel für direkte Eingabe: @@ -57,8 +58,8 @@ %\cleardoublepage\include{frontbackmatter/Foreword} \cleardoublepage\include{frontbackmatter/Declaration} \condLOCK{\cleardoublepage\include{frontbackmatter/BlockingNotice}} -%%\cleardoublepage\include{frontbackmatter/AbstractEN} -%%\cleardoublepage\include{frontbackmatter/AbstractDE} +\cleardoublepage\include{frontbackmatter/thesis/AbstractEN} +\cleardoublepage\include{frontbackmatter/thesis/AbstractDE} %\cleardoublepage\include{frontbackmatter/Publications} %\cleardoublepage\include{frontbackmatter/Acknowledgments} \cleardoublepage\include{frontbackmatter/Contents} @@ -112,3 +113,30 @@ % Frank Wedekind: % https://books.google.de/books?hl=de&lr=&id=3qO8DQAAQBAJ&oi=fnd&pg=PA1&dq=frank+wedekind&ots=S4LHWQ0h2e&sig=Mz8PEGF-md4n3AwH9cgXq-5vUac#v=onepage&q=frank%20wedekind&f=false % https://www.martin.germanistik.uni-mainz.de/forschung/frank-wedekind/ + +% Installation Payara mit PostgreSQL +% 1. Mit "yay -S payara" installieren lassen, liegt dann unter /opt/payara +% 2. Mit "yay -S postgresql-jdbc" den Datenbanktreiber installieren +% 3. Eigenen Benutzer der Gruppe payara hinzufügen, damit man es direkt von der IDE starten kann (gpasswd -a payara) +% über "/opt/payara/bin/asadmin start-domain" kann der Server auch per hand gestartet werden + +% Konfiguration von Idea +% 1. Neue Payara Server - Local hinzufügen +% 2. Bei Before Lunch "Build artifact" hinzufügen und "WedekindJSF.war" auswählen +% 3. Unter Deployment "Artifact" "WedekindJSF.war" hinzufügen + +% Konfiguration Glassfisch/Payara (Muss scheinbar nach jedem neustart des Rechners gemacht werden) +% 1. Payara-Server starten, damit man an die Admin-Oberfläche kommt unter http://localhost:4848/ +% 2. Unter Ressources\JDBC\JDBC Connection Pools einen neuen Anlegen: +% 2.1. Poolname vergeben +% 2.2. Resource Type: javax.sql.DataSource +% 2.3. Database Driver Vender: Postgresql (Wenn die Auswahl nicht stehen bleibt, dann im Feld darunter fix eintragen) +% 2.4. Mit Next bestätigen +% 2.5. Datasource Classname prüfen, sollte auf org.postgresql.ds.PGSimpleDataSource oder org.postgresql.ds.PGSimpleDataSource sein +% 2.6. Die Felder User, Password und databaseName ausfüllen (Infos siehe payra-resources.xml) +% 2.7. Mit Finish bestätigen +% 3. Unter Resources\JDBC\JDBC Resources einen neuen Anlegen: +% 3.1. JNDI Name: jdbc/wedekindPostgreSQL (muss mit jta-data-source aus persistence.xml zusammen passen) +% 3.2. Pool Name: den unter 2 angelegten Pool auswählen +% 3.3. Mit Save bestätigen +% 4. Payara-Server neustarten \ No newline at end of file