Compare commits

...

2 commits

Author SHA1 Message Date
marcodn
91c76b74b9 Präsentation Struktur erzeugt 2024-07-31 23:01:56 +02:00
marcodn
56139bd08c Daily CheckIn 2024-07-31 22:12:53 +02:00
14 changed files with 624 additions and 12 deletions

175
beamer-config.tex Normal file
View file

@ -0,0 +1,175 @@
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman,english]{babel}
% -- https://www.ctan.org/pkg/newtx?lang=en
\usepackage{newtxtext,newtxmath}
% -- https://www.ctan.org/pkg/scrextend
\usepackage{scrextend}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{threeparttable}
\usepackage{multirow}
\usepackage{pifont}
% get layout information
\usepackage{layout}
\usepackage{rotating}
\usepackage{adjustbox}
\usepackage{setspace}
\usepackage{ragged2e}
\usepackage{lipsum}
\usepackage{blindtext}
\usepackage{calc}
\usepackage{eqnarray,amsmath}
\usepackage[linesnumbered]{algorithm2e}
% -- Absolute positions
\usepackage[absolute,overlay]{textpos}
\usepackage{tcolorbox}
\tcbuselibrary{most}
\usepackage{soul}
%improve wrapping of URLs - hint by http://tex.stackexchange.com/a/10419/9075
\makeatletter
\g@addto@macro{\UrlBreaks}{\UrlOrds}
\makeatother
% -------------------------------------------------------------
% Hyperreferences
% -------------------------------------------------------------
\usepackage{hyperref}
\hypersetup{colorlinks=true,linkcolor=,urlcolor=gray70,citecolor=blue1}
% -------------------------------------------------------------
% Bibliography
% -------------------------------------------------------------
\usepackage[%
%sorting=debug,
%natbib=true,
%backend=biber,bibencoding=utf8,
backend=bibtex8,bibencoding=ascii,language=auto,natbib=true,%maxbibnames=10,
sorting=nyt,
style=alphabetic,
maxalphanames=1
%minnames=3,
%maxnames=6,
%doi=false
]{biblatex}
% -- remove plus sign in labels [Stö+18]
\renewcommand*{\labelalphaothers}{}
% -- make bibliography entries smaller
\renewcommand\bibfont{\scriptsize}
% -- and kill the abominable icon
\setbeamertemplate{bibliography item}[text]
%\addbibresource{bibliography.bib}
%\addbibresource{bibliography-2.bib}
% -------------------------------------------------------------
% Minted Code Listing
% -------------------------------------------------------------
% Need the following Python package:
% - Pygments (http://pygments.org/)
%
% Requires the -shell-escape flag when calling LaTeX !!!!
%
% List all styles:
% $ pygmentize -L styles
% \usemintedstyle{monokai}
%
% List all Languages:
% $ pygmentize -L lexers
%\usepackage[titles]{tocloft}
%\newlistof{listing}{lol}{Listings}
%\usepackage[newfloat]{minted}
%\usepackage{caption}
%\renewcommand{\cftlistingpresnum}{Listing~}
%\setlength{\cftlistingnumwidth}{2,8cm}
\usepackage{minted}
% -------------------------------------------------------------
% Captions
% -------------------------------------------------------------
\usepackage{caption}
\captionsetup{%
justification=raggedright,
singlelinecheck=false
}
% -------------------------------------------------------------
\renewcommand\thefootnote{\textbf{\textcolor{blue1}{\arabic{footnote}}}}
\renewcommand{\footnotesize}{\fontsize{6pt}{7pt}\selectfont}
%% Insert line break in algorithm
\newcommand{\WRP}{\par\qquad\(\hookrightarrow\)\enspace}
%\newcommand{\showHorizontalNavBar}{}
\def\showHorizontalNavBar{}
% -------------------------------------------------------------
% Color Boxes
% -------------------------------------------------------------
\newtcolorbox{shadowbox1}[2][]{%
enhanced,
size=small,
width=#2,
colback=gray1,
colframe=gray1,
sharp corners,
drop small lifted shadow=black,
#1
}
% -------------------------------------------------------------
% Images
% -------------------------------------------------------------
\newcommand{\rotimagewithsource}[3]{%
\begin{figure}
\hypersetup{urlcolor=gray50}
\setbeamerfont{caption}{size=\fontsize{2pt}{3pt}\selectfont}
\setbeamercolor{caption}{fg=gray50}
\captionsetup{labelformat=empty,justification=raggedright,singlelinecheck=false}%
\begin{adjustbox}{addcode={\begin{minipage}{\width}}{\caption{#3}\end{minipage}},#1,center}
#2
\end{adjustbox}
\addtocounter{figure}{-1}
\end{figure}
}
\newcommand{\rotimagewithcaption}[3]{%
\begin{figure}
\begin{adjustbox}{addcode={\begin{minipage}{\width}}{\caption{#3}\end{minipage}},#1,center}
#2
\end{adjustbox}
\end{figure}
}

263
beamerthemecleangreen.sty Normal file
View file

@ -0,0 +1,263 @@
%
% Latex-Beamer theme CleanGreen
%
% Author: André Conrad
% Date: 2023-02-23
% Version: 0.1
%
\mode<presentation>
% ---------------------------------------
%% Loading packages
% ---------------------------------------
\RequirePackage{tikz}
\usetikzlibrary{%
mindmap,
trees
}
\RequirePackage{csquotes}
%Define a reference depth.
%You can choose either relative or absolute.
%--------------------------
\newlength{\DepthReference}
%\settodepth{\DepthReference}{g}%relative to a depth of a letter.
\setlength{\DepthReference}{2pt}%absolute value.
%Define a reference Height.
%You can choose either relative or absolute.
%--------------------------
\newlength{\HeightReference}
%\settoheight{\HeightReference}{T}
\setlength{\HeightReference}{6pt}
%--------------------------
\newlength{\Width}%
\newcommand{\navbox}[2][red]%
{%
\settowidth{\Width}{#2}%
%\setlength{\fboxsep}{0pt}%
\colorbox{#1}%
{%
\raisebox{-\DepthReference}%
{%
\parbox[b][\HeightReference+\DepthReference][c]{\Width}{\centering#2}%
}%
}%
}
\setlength{\fboxsep}{1pt}
% ---------------------------------------
%% Colors
% ---------------------------------------
\definecolor{gray20}{HTML}{CCCCCC}
\definecolor{gray70}{HTML}{4C4C4C}
\definecolor{green1}{HTML}{A0DDCE}
\definecolor{green2}{HTML}{E9F8F3}
\definecolor{blue1}{HTML}{0070C0}
\definecolor{blue2}{HTML}{004C97}
\definecolor{lightbrown1}{HTML}{E3DBD3}
\definecolor{brown1}{HTML}{AD8f67}
\definecolor{webgreen}{rgb}{0,.5,0}
\definecolor{webbrown}{rgb}{.6,0,0}
\definecolor{gray1}{rgb}{.92,.92,.92}
\definecolor{gray2}{rgb}{.85,.85,.85}
\definecolor{gray50}{rgb}{.5,.5,.5}
\definecolor{applegreen}{rgb}{0.55, 0.71, 0.0}
\definecolor{brickred}{rgb}{0.8, 0.25, 0.33}
\definecolor{darklavender}{rgb}{0.45, 0.31, 0.59}
\definecolor{charcoal}{rgb}{0.21, 0.27, 0.31}
% Title slide
\setbeamercolor*{title page header}{fg=gray70}
\setbeamercolor*{author}{fg=gray70}
\setbeamercolor*{date}{fg=gray70}
% Framtitle
\setbeamercolor*{frametitle}{fg=gray70,bg=white}
% Footer
\setbeamercolor{footline}{fg=gray70,bg=white}
% List items
\setbeamercolor*{item}{fg=black}
\setbeamercolor*{enumerate item}{fg=black}
% Blocks
\setbeamercolor{block title}{fg=blue1}
%\setbeamercolor{block body}{bg=green2}
% Caption
\setbeamercolor{caption name}{fg=blue1}
\setbeamercolor{caption}{fg=gray70}
% Table of Content
\setbeamercolor{section in toc}{fg=blue1}
\setbeamercolor{subsection in toc}{fg=blue1}
% Bibliography
\setbeamercolor*{bibliography item}{fg=black}
\setbeamercolor*{bibliography entry title}{fg=blue2}
\setbeamercolor*{bibliography entry author}{fg=black}
\setbeamercolor*{bibliography entry location}{fg=black}
\setbeamercolor*{bibliography entry note}{fg=black}
% ---------------------------------------
%% Font Size
% ---------------------------------------
\setbeamerfont{frametitle}{size=\huge}
\setbeamerfont{framesubtitle}{size=\normalsize}
\setbeamerfont{title}{size=\huge}
\setbeamerfont{subtitle}{size=\normalsize}
\setbeamerfont*{author}{size=\normalsize}
\setbeamerfont*{date}{size=\small}
\setbeamerfont*{frametitle}{size=\huge}
\setbeamerfont*{footline}{size=\tiny}
\setbeamerfont*{institute}{size=\footnotesize}
%\setbeamerfont{itemize/enumerate body}{size=\Large}
%\setbeamerfont{itemize/enumerate subbody}{size=\Large}
%\setbeamerfont{itemize/enumerate subsubbody}{size=\large}
\setbeamerfont{enumerate item}{series=\bfseries}
\setbeamerfont{description item}{series=\bfseries}
\setbeamerfont{caption}{size=\tiny}
% Table of Content
\setbeamerfont{section in toc}{size=\normalsize}
\setbeamerfont{subsection in toc}{size=\normalsize}
\setbeamerfont{section number projected}{%
family=\rmfamily,series=\bfseries,size=\normalsize}
\setbeamercolor{section number projected}{bg=green1,fg=black}
% ball, circle and square
\setbeamertemplate{sections/subsections in toc}[circle]
% ---------------------------------------
%% Frame (inner/outer)
% ---------------------------------------
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{caption}[numbered]
\setbeamertemplate{enumerate item}{\textbf{\arabic{enumi}.}}
\setbeamertemplate{enumerate subitem}{\textbf{\arabic{enumii}.}}
\setbeamersize{text margin left=16pt,text margin right=16pt}
% -----------------------
%% Title Page
% -----------------------
\defbeamertemplate*{title page}{cleangreen}
{
\centering
\vskip 1cm%
\begin{beamercolorbox}[center,sep=8pt]{title page header}
\usebeamerfont{title}\textbf{\inserttitle}\par%
\vskip 0.25cm%
\usebeamerfont{subtitle}\insertsubtitle
\end{beamercolorbox}%
\textcolor{green1}{\rule{.96\textwidth}{1.5pt}}
\vskip 0.75cm%
\begin{beamercolorbox}[center]{author}
\usebeamerfont{author}\insertauthor\\[2ex]
\usebeamerfont{institute}\insertinstitute\\[5ex]
\usebeamerfont{date}\insertdate
\end{beamercolorbox}
}
% -----------------------
%% Definition - Horizontal Nav Bar
% -----------------------
\setbeamertemplate{section in head/foot}{%
%\colorbox{green2}{\strut\bfseries\insertsectionhead}
\navbox[green2]{\bfseries\insertsectionhead}
}
\setbeamertemplate{section in head/foot shaded}{%
%\color{gray2}\insertsectionhead
\navbox[white]{\bfseries\color{gray2}\insertsectionhead}
}
% -----------------------
%% Frametitle
% -----------------------
\defbeamertemplate*{frametitle}{cleangreen}
{
\begin{beamercolorbox}[left, ht=36pt, wd=\paperwidth, leftskip=16pt, rightskip=16pt]{frametitle}
\ifx\insertframesubtitle\@empty%
\begin{tikzpicture}
\draw (0,0) -- (\textwidth,0) [line width=1pt, green2];
\draw (0,4pt) node [anchor=south west,inner sep=0mm, text depth=1mm] {\usebeamerfont{frametitle}\insertframetitle};
\end{tikzpicture}
\else%
\begin{tikzpicture}
\draw (0,0) -- (\textwidth,0) [line width=1pt, green2];
\draw (0,1pt) node [anchor=south west,inner sep=0mm, text depth=1mm] {\small\insertframesubtitle};
\draw (0,13pt) node [anchor=south west,inner sep=0mm, text depth=1mm] {\Large\insertframetitle};
\end{tikzpicture}
\fi
\ifx\showHorizontalNavBar\empty%
\vspace*{-18pt}
\else
\hspace*{-13.24pt}
\footnotesize
\insertnavigation{\textwidth}
\fi
\end{beamercolorbox}
}
% -----------------------
%% Footline
% -----------------------
\newcommand{\footlinetext}[1]{\def\insertfootlinetext{#1}}
\defbeamertemplate*{footline}{cleangreen}
{
\begin{beamercolorbox}[left, ht=20pt, wd=\textwidth, leftskip=16pt, rightskip=16pt]{footline}%
\usebeamerfont{footline}
\ifx\insertframetitle\@empty%
%\hfill\insertpagenumber\vspace{2.75mm}
\raggedleft\insertframenumber~/~\inserttotalframenumber\hspace{12.25pt}\vspace{8pt}
\else%
\begin{tikzpicture}
\draw (0,0) -- (423pt,0) [line width=1pt, green2];
\draw (-3pt,0) node [anchor=north west, inner sep=3pt] {\includegraphics[height=14pt]{gfx/fernuni_hagen_logo.jpg}};
\draw (100pt,-8pt) node [anchor=north west, inner sep=0mm, text depth=1mm] {\insertfootlinetext};
\draw (423pt,-8pt) node [anchor=north east,inner sep=0mm, text depth=1mm] {\insertframenumber~/~\inserttotalframenumber};
\end{tikzpicture}
\fi
\end{beamercolorbox}
}
\mode<all>

View file

@ -1,3 +1,5 @@
% !TeX root = ../../thesis.tex
%******************************************************************** %********************************************************************
% Appendix % Appendix
%******************************************************* %*******************************************************

View file

@ -84,7 +84,8 @@ hostname="http://localhost:8080/WedekindJSF-1.0.0"
# the Array of the Urls # the Array of the Urls
url_arr=( url_arr=(
"$hostname/index.xhtml" "$hostname/index.xhtml"
"$hostname/view/document/list.xhtml" #"$hostname/view/document/list.xhtml"
"$hostname/view/document/list_mv.xhtml"
#"$hostname/view/correspondent/list.xhtml" #"$hostname/view/correspondent/list.xhtml"
#"$hostname/view/person/list.xhtml" #"$hostname/view/person/list.xhtml"
) )

View file

@ -1,3 +1,4 @@
% !TeX root = ../../thesis.tex
\chapter{Einleitung} \chapter{Einleitung}
\label{ch:intro} \label{ch:intro}

View file

@ -1,3 +1,4 @@
% !TeX root = ../../thesis.tex
\chapter{Grundlagen} \chapter{Grundlagen}
\label{ch:basics} \label{ch:basics}

View file

@ -1,3 +1,4 @@
% !TeX root = ../../thesis.tex
\chapter{Konzept} \chapter{Konzept}
\label{ch:concept} \label{ch:concept}

View file

@ -1,3 +1,4 @@
% !TeX root = ../../thesis.tex
\chapter{Performance-Untersuchung} \chapter{Performance-Untersuchung}
\label{ch:performance-checking} \label{ch:performance-checking}
@ -51,7 +52,7 @@ Dies zeigt direkt, dass es ein problem in der Freigabe der Objekte gibt, da dass
das Problem nicht löst, sondern nur verschiebt. das Problem nicht löst, sondern nur verschiebt.
Als Grundlage für die Vergleiche wurden eine Messung durchgeführt, bei der alle Caches deaktiviert wurden und keine Als Grundlage für die Vergleiche wurden eine Messung durchgeführt, bei der alle Caches deaktiviert wurden und keine
Änderung am Code vorgenommen wurde. Das Ergebnis dieser Messung ist in \ref{tab:MeasureWithoutCache} zu finden. Diese Änderung am Code vorgenommen wurde. Das Ergebnis dieser Messung ist in \ref{tbl:measure-without-cache} zu finden. Diese
zeigen auch direkt ein erwartetes Ergebnis, dass der erste Aufruf bedeutend länger dauert als die Nachfolgenden. zeigen auch direkt ein erwartetes Ergebnis, dass der erste Aufruf bedeutend länger dauert als die Nachfolgenden.
Ebenfalls sieht man eindeutig, dass die Anzahl der Anfragen nach dem ersten Aufruf immer die gleiche Anzahl besitzen. Ebenfalls sieht man eindeutig, dass die Anzahl der Anfragen nach dem ersten Aufruf immer die gleiche Anzahl besitzen.
Der Speicherbedarf steigt auch relative gleichmässig, was nicht recht ins Bild passt, da hier keine Objekte im Cache Der Speicherbedarf steigt auch relative gleichmässig, was nicht recht ins Bild passt, da hier keine Objekte im Cache
@ -72,7 +73,7 @@ gehalten werden sollten.
\hline \hline
\end{tabular} \end{tabular}
\caption{Messung ohne Caches} \caption{Messung ohne Caches}
\label{tab:MeasureWithoutCache} \label{tbl:measure-without-cache}
\end{table} \end{table}
Vor jedem weiteren Test-Lauf wurde die Domain beendet und komplett neugestartet, um mit einer frischen Instanz zu Vor jedem weiteren Test-Lauf wurde die Domain beendet und komplett neugestartet, um mit einer frischen Instanz zu
@ -88,8 +89,8 @@ Die Cache-Einstellung von OpenJPA werden über die zwei Einstellungen \texttt{op
\textit{CacheSize} die Anzahl der Elementen im Cache gesteuert werden. Wird diese Anzahl erreicht, dann werden zufällige \textit{CacheSize} die Anzahl der Elementen im Cache gesteuert werden. Wird diese Anzahl erreicht, dann werden zufällige
Objekte aus dem Cache entfernt und in eine SoftReferenceMap übertragen. Objekte aus dem Cache entfernt und in eine SoftReferenceMap übertragen.
Zuerst wird mit aktivierten Cache mit einer Cache-Größe von 1000 Elemente getestet. Wie in \ref{tbl:MeasureOJPAactive} Zuerst wird mit aktivierten Cache mit einer Cache-Größe von 1000 Elemente getestet. Wie in \ref{tbl:measure-ojpa-active}
zu sehen, dauert auch hier der erste Aufruf minimal länger als ohne akivierten Cache. Alle Nachfolgenden Aufrufe zu sehen, dauert auch hier der erste Aufruf minimal länger als ohne akiviertem Cache. Alle Nachfolgenden Aufrufe
wiederrum sind um 100ms schneller in der Verarbeitung. Auch bei der Anzahl der Anfragen an die Datenbank kann mehr den wiederrum sind um 100ms schneller in der Verarbeitung. Auch bei der Anzahl der Anfragen an die Datenbank kann mehr den
Rückgang der Anfragen sehr gut sehen. Aktuell kann die Verringerung des wachsenden Speicherbedarfs nur nicht erklärt Rückgang der Anfragen sehr gut sehen. Aktuell kann die Verringerung des wachsenden Speicherbedarfs nur nicht erklärt
werden. werden.
@ -109,11 +110,11 @@ werden.
\hline \hline
\end{tabular} \end{tabular}
\caption{Messung mit OpenJPA-Cache und Größe auf 1000} \caption{Messung mit OpenJPA-Cache und Größe auf 1000}
\label{tbl:MeasureOJPAactive} \label{tbl:measure-ojpa-active}
\end{table} \end{table}
Bei einer erhöhten Cache-Größe, zeigt sich auf den ersten Blick ein noch besseres Bild ab, wie in Bei einer erhöhten Cache-Größe, zeigt sich auf den ersten Blick ein noch besseres Bild ab, wie in
\ref{tbl:MeasureOJPAactivebigger} ersichtlich ist. Der erste Aufruf entspricht der Laufzeit mit geringerer Cache-Größe, \ref{tbl:measure-ojpa-active-bigger} ersichtlich ist. Der erste Aufruf entspricht der Laufzeit mit geringerer Cache-Größe,
aber schon die Anfragen an die Datenbank gehen drastisch zurück. Bei den weiteren Aufrufen werden im Schnitt nun nur aber schon die Anfragen an die Datenbank gehen drastisch zurück. Bei den weiteren Aufrufen werden im Schnitt nun nur
noch 6 Anfragen pro Seitenaufruf an die Datenbank gestellt, wodurch die Laufzeit im Schnitt nochmal um 100 ms noch 6 Anfragen pro Seitenaufruf an die Datenbank gestellt, wodurch die Laufzeit im Schnitt nochmal um 100 ms
beschleunigt werden konnte. beschleunigt werden konnte.
@ -133,7 +134,7 @@ beschleunigt werden konnte.
\hline \hline
\end{tabular} \end{tabular}
\caption{Messung mit OpenJPA-Cache und Größe auf 10000} \caption{Messung mit OpenJPA-Cache und Größe auf 10000}
\label{tbl:MeasureOJPAactivebigger} \label{tbl:measure-ojpa-active-bigger}
\end{table} \end{table}
\mytodos{pin und unpin noch mit einbringen? SoftReferenceMap nochmal genau durchleuchte, laut doku entfällt dort nichts \mytodos{pin und unpin noch mit einbringen? SoftReferenceMap nochmal genau durchleuchte, laut doku entfällt dort nichts
@ -184,6 +185,7 @@ Anzahl der Abfragen an die Datenbank drastisch reduziert werden. Selbst die Lauf
\label{sec:performance-checking:investigation-application:caching-ejb} \label{sec:performance-checking:investigation-application:caching-ejb}
Die Cache-Einstellungen des \ac{EJB} sind in der Admin-Oberfläche des Payara-Servers zu erreichen. Hier Die Cache-Einstellungen des \ac{EJB} sind in der Admin-Oberfläche des Payara-Servers zu erreichen. Hier
\mytodos{Cache config noch definieren}
\begin{table}[h!] \begin{table}[h!]
\centering \centering
@ -199,19 +201,111 @@ Die Cache-Einstellungen des \ac{EJB} sind in der Admin-Oberfläche des Payara-Se
4 & 281 & 318 & 398 & 12080 & 1191.25 & 1305.29 & 114.04 \\ 4 & 281 & 318 & 398 & 12080 & 1191.25 & 1305.29 & 114.04 \\
\hline \hline
\end{tabular} \end{tabular}
\caption{Messung mit OpenJPA-Cache und Größe auf 10000} \caption{Messung mit \ac{EJB}-Cache}
\label{tbl:MeasureEJBAactive} \label{tbl:measure-ejb-cache-active}
\end{table} \end{table}
\subsection{Abfragen JPQL} \subsection{Abfragen \ac{JPQL}}
\label{sec:performance-checking:investigation-application:query-jpql} \label{sec:performance-checking:investigation-application:query-jpql}
Für die \ac{JPQL} wird ein \ac{SQL} ähnlicher Syntax verwendet um die Abfragen an die Datenbank durchzuführen. Für die
Dokumentenliste wird der Code aus \ref{lst:jpql-document-list-jpql} verwendet. Die Namen mit vorangestellten Doppelpunkt
sind Übergabevariablen.
\begin{lstlisting}[language=Java,caption={JPQL Dokumentenliste},label=lst:jpql-document-list-jpql]
SELECT DISTINCT d FROM Document d
LEFT JOIN FETCH d.authorPerson
LEFT JOIN FETCH d.coauthorPersonSet
LEFT JOIN FETCH d.addresseePersonSet
WHERE d.validUntil > :now
AND d.isPublishedInDb = :published
ORDER BY d.documentId ASC
\end{lstlisting}
In dem dazugehörigen Code am Server wird der JPQL-Code als NamedQuery hinterlegt und über den Name \textit{Document.findAll}
referenziert. In eingriff in die Abfrage ist hier leider nicht möglich, wie man im Code \ref{lst:jpql-document-list}
sehen kann.
\begin{lstlisting}[language=Java,caption={Java JPQL Dokumentenliste},label=lst:jpql-document-list]
List<Document> myResultList = createNamedTypedQuery("Document.findAll")
.setParameter("now", _IncludeDeleted ? new Date(0) : Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()))
.setParameter("published", true)
.setFirstResult(_Start)
.setMaxResults(_Size)
.setHint("javax.persistence.query.fetchSize", _Size)
.getResultList();
// Uebergabe der Ergebnisliste
if(myResultList != null && !myResultList.isEmpty()) {
myResult.addAll(myResultList);
}
\end{lstlisting}
Da dieser Code direkt so aus dem Projekt kommt, wird hierfür keine gesonderte Zeitmessung durchgeführt, da dies durch
\ref{tbl:measure-without-cache} geschehen ist.
\subsection{Abfragen Criteria API} \subsection{Abfragen Criteria API}
\label{sec:performance-checking:investigation-application:query-criteria-api} \label{sec:performance-checking:investigation-application:query-criteria-api}
Für die Criteria API wird die Abfrage nicht in einem SQL-Dialekt beschreiben. Hierbei werden über Attribute die
Verlinkung zur Datenbank durchgeführt. An der Klasse selbst wird der Tabellenname definiert und an den Attributen die
Spaltennamen. Um die Anfrage durchführen muss nun nur noch Datenklasse angegeben werden und mit den Parametern
versorgt werden, wie es in \ref{lst:criteria-api} gezeigt wird.
\begin{lstlisting}[language=Java,caption={Criteria API Dokumentenliste},label=lst:criteria-api]
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Document> cq = cb.createQuery(Document.class);
Root<Document> from = cq.from(Document.class);
ParameterExpression<Boolean> includedPara = cb.parameter(Boolean.class, "published");
ParameterExpression<Date> validPart = cb.parameter(Date.class, "now");
CriteriaQuery<Document> select = cq.select(from)
.where(cb.and(
cb.equal(from.get("isPublishedInDb"), includedPara),
cb.greaterThan(from.get("validUntil"), validPart)
));
TypedQuery<Document> typedQuery = getEntityManager().createQuery(select)
.setParameter("now", _IncludeDeleted ? new Date(0) : Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()))
.setParameter("published", true)
.setFirstResult(_Start)
.setMaxResults(_Size)
.setHint("javax.persistence.query.fetchSize", _Size);
List<Document> myResultList = typedQuery.getResultList();
// Uebergabe der Ergebnisliste
if (myResultList != null && !myResultList.isEmpty()) {
myResult.addAll(myResultList);
}
\end{lstlisting}
Wie in der Messung \ref{tbl:measure-criteria-api} zu sehen, unterscheiden sich die Abfragezeiten nur marginal von
denen mit \ac{JPQL}. Wenn man sich den Code im Debugger anschaut, sieht man auch, dass die zusammengesetzten Abfragen
in den Java-Objekten fast identisch sind. Und in der Datenbank sind die Anfragen identisch zu denen über JPQL.
\begin{table}[h!]
\centering
\begin{tabular}{|r|r|r|r|r|r|r|r|}
\hline
& \multicolumn{3}{|c|}{Aufrufzeit} & & \multicolumn{3}{|c|}{RSS} \\
\hline
\# & min & avg & max & Queries & davor & danach & diff \\
\hline
1 & 396 & 572 & 1535 & 12173 & 796.59 & 970.10 & 173.51 \\
2 & 333 & 366 & 397 & 12080 & 982.28 & 1064.12 & 81.84 \\
3 & 286 & 339 & 554 & 12080 & 1048.12 & 1162.92 & 114.80 \\
4 & 293 & 317 & 388 & 12080 & 1150.43 & 1263.77 & 113.34 \\
\hline
\end{tabular}
\caption{Messung mit Criteria-API ohne Cache}
\label{tbl:measure-criteria-api}
\end{table}
\subsection{materialized views} \subsection{materialized views}
\label{sec:performance-checking:investigation-application:materialized-views} \label{sec:performance-checking:investigation-application:materialized-views}
\mytodos{Sourcecode erfragen bei Herrn Holstein!}
\subsection{cached queries} \subsection{cached queries}
\label{sec:performance-checking:investigation-application:cached-query} \label{sec:performance-checking:investigation-application:cached-query}

View file

@ -1,3 +1,4 @@
% !TeX root = ../../thesis.tex
\chapter{???Optimierung???} \chapter{???Optimierung???}
\label{ch:optimizing} \label{ch:optimizing}

View file

@ -1,3 +1,4 @@
% !TeX root = ../../thesis.tex
\chapter{Evaluierung} \chapter{Evaluierung}
\label{ch:evaluation} \label{ch:evaluation}

View file

@ -1,3 +1,5 @@
% !TeX root = ../../thesis.tex
%******************************************************* %*******************************************************
% Acronyms % Acronyms
%******************************************************* %*******************************************************
@ -22,9 +24,11 @@
\acro{CSS}{Cascading Style Sheets} \acro{CSS}{Cascading Style Sheets}
\acro{SFSB}{Stateful Session-Bean} \acro{SFSB}{Stateful Session-Bean}
\acro{JPA}{Java Persistence API} \acro{JPA}{Java Persistence API}
\acro{JPQL}{Java Persistence Query Language}
\acro{API}{Application Programming Interface} \acro{API}{Application Programming Interface}
\acro{UML}{Unified Modeling Language} \acro{UML}{Unified Modeling Language}
\acro{GB}{Gigabyte} \acro{GB}{Gigabyte}
\acro{SQL}{Structured Query Language}
\end{acronym} \end{acronym}
\cleardoublepage \cleardoublepage

BIN
thesis-beamer.pdf Normal file

Binary file not shown.

68
thesis-beamer.tex Normal file
View file

@ -0,0 +1,68 @@
\documentclass[aspectratio=169]{beamer}
\input{beamer-config}
\usetheme{cleangreen}
\include{marco-galster-config}
\addbibresource{expose-ref.bib}
% ACHTUNG: Damit sich die Datei sauber im Visual Studio Code übersetzten lässt, muss in den Benutzer-Einstellungen
% das Element "latex-workshop.latex.tools" aufgenommen werden und der erscheinende Eintrag für latexmk bei den
% args am Anfang um den folgenden Eintrage erweitert werden:
% "-shell-escape"
\title{\myTitle}
%\subtitle{}
\author[M. Galster]{\myName}
\footlinetext{\insertshortauthor \hspace{4em} \inserttitle}
\institute{University~of~Hagen,~Germany}
\date{\myTime}
\begin{document}
\selectlanguage{ngerman}
% -- SLIDE -- Title
\begin{frame}[plain]
\titlepage
\end{frame}
% -- SLIDE -- TOC
\begin{frame}[c]
\frametitle{Übersicht}
%left space
\begin{addmargin*}{2.5em}
%enhance line space
\begin{spacing}{1}
\parbox{\linewidth}{%
\tableofcontents
}
\end{spacing}
\end{addmargin*}
\addtocounter{framenumber}{-1}
\end{frame}
% -- SLIDES --
\section{Ausgangsproblem}
\begin{frame}
\frametitle{Ausgangsproblem}
Anzeige der Schichten des Systems
\end{frame}
\begin{frame}
Definieren der Optimierungsansätze
\end{frame}
%% -- SLIDE -- REFERENCES
% hier alle Keys aus der BIB einfügen, die mit dargestellt werden sollen
\nocite{IbmOpenJPACaching2023,PostgresPro:Chap20.4:2023}
% Für mehreren Seite bei den Referenzen ein ",allowframebreaks" in den [] hinzufügen
\begin{frame}[t]
\frametitle{Referenzen}
\printbibliography[title=Referenzen]
\end{frame}
\end{document}

Binary file not shown.