\part{Allgemeines \& Config}
\section{Logging}
\subsubsection{Vorteile Logging mittels Framework (z.B.: log4j)}
\begin{itemize}
    \item Nutzt ein einheitliches Format / Konventionen
    \item logging kann optional an und ausgeschalten werden
    \item durch verschiedene Log-level können Logs gefiltert erstellt werden
    \item Layout für Ausgabe kann zentral definiert/geändert werden
\end{itemize}
\section{Annotationen}
\begin{itemize}
    \item @MappedSuperclass
          \begin{itemize}
              \item ist im Hybernate Framework
              \item eine Klasse durch die gemeinsame Felder definiert werden.
              \item definiert eine abstrakte Superklasse
          \end{itemize}
    \item @Produces
          \begin{itemize}
              \item kommt während deployment, markiert Factory Method damit man nicht direkt auf die Klasse zugreifen muss
          \end{itemize}
    \item @Typed
          \begin{itemize}
              \item zeigt die Vererbung Wieso bei uns allein stehend?
          \end{itemize}
    \item @Named
          \begin{itemize}
              \item Zeigt bei Mehrdeutigkeit das richtige Objekt mit dem Namen
          \end{itemize}
    \item @Resource
          \begin{itemize}
              \item fast wie Dependency Injection
          \end{itemize}
    \item @Stateless
          \begin{itemize}
              \item speichert den Client Status nicht
          \end{itemize}
    \item @Entity
          \begin{itemize}
              \item Data Access Layer
          \end{itemize}
    \item @Table
          \begin{itemize}
              \item Tabellenname im SQL
          \end{itemize}
    \item @Column
          \begin{itemize}
              \item SQL-Spalten nullable=false
          \end{itemize}
    \item @OneToMany
    \item @JoinColums
          \begin{itemize}
              \item welche Spalten zusammen gehören FK
          \end{itemize}
    \item @OneToMany
          \begin{itemize}
              \item auf anderen Seite
          \end{itemize}
    \item @ApplicationScoped
          \begin{itemize}
              \item lebt die ganze Applikation lang, wird einmal gemacht.
          \end{itemize}
    \item @PersistenceContext
          \begin{itemize}
              \item persistance.xml auslesen für Treiber und andere JPA Geschichten + Data Source. Entity Manager
          \end{itemize}
    \item @Id
          \begin{itemize}
              \item das ist die id
          \end{itemize}
    \item @GeneratedValue
          \begin{itemize}
              \item Wert kommt aus der DB
          \end{itemize}
    \item @Local
          \begin{itemize}
              \item Klasse für lokale Aufrufe.
          \end{itemize}
    \item @Remote
          \begin{itemize}
              \item interprozessaufrufe. RMI
          \end{itemize}
    \item @ApplicationException
          \begin{itemize}
              \item Rollback wenn so eine Exception kommt, Nachricht zum Client.
          \end{itemize}
\end{itemize}

\section{Konfigurationsdateien}
\subsection{standalone-psoe.xml}
\subsection{persistance.xml}
\begin{figure}[!htp]
    \centering
    \includegraphics[width=0.7\textwidth]{pics/ConfigFiles.png}
\end{figure}
\subsection{web.xml}
\begin{itemize}
    \item konfiguriert den Java Webserver (Wildfly - JBOSS)
    \item befindet sich im Ordner \textbf{src/main/webapp/WEB-INF/web.xml}
\end{itemize}
\begin{minted}[linenos,breaklines=true]{xml}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
...
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

<!-- Security roles -->
<security-role>
<description>administrators</description>
<role-name>ADMIN</role-name>
</security-role>
<security-role>
<description>portal administrators</description>
<role-name>PORTALADMIN</role-name>
</security-role>
<security-role>
<description>standard user</description>
<role-name>USER</role-name>
</security-role>

<!-- Security constraints -->
<security-constraint>
<web-resource-collection>
<web-resource-name>admin area</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ADMIN</role-name>
</auth-constraint>
</security-constraint>

<security-constraint>
<web-resource-collection>
<web-resource-name>community area</web-resource-name>
<url-pattern>/community/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USER</role-name>
<role-name>PORTALADMIN</role-name>
<role-name>ADMIN</role-name>
</auth-constraint>
</security-constraint>

<security-constraint>
<web-resource-collection>
<web-resource-name>user administration area</web-resource-name>
<url-pattern>/userAdministration/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USER</role-name>
<role-name>PORTALADMIN</role-name>
<role-name>ADMIN</role-name>
</auth-constraint>
</security-constraint>


<security-constraint>
<web-resource-collection>
<web-resource-name>user functionalities</web-resource-name>
<url-pattern>/user.xhtml</url-pattern>
<url-pattern>/userlist.xhtml</url-pattern>
<url-pattern>/notImplemented.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USER</role-name>
<role-name>PORTALADMIN</role-name>
<role-name>ADMIN</role-name>
</auth-constraint>
</security-constraint>

<security-constraint>
<web-resource-collection>
<web-resource-name>other functionalities</web-resource-name>
<url-pattern>/notImplemented.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USER</role-name>
<role-name>PORTALADMIN</role-name>
<role-name>ADMIN</role-name>
</auth-constraint>
</security-constraint>

<login-config>
<auth-method>FORM</auth-method>
<realm-name>pse</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/login.xhtml</form-error-page>
<!--   		<form-error-page>/loginerror.xhtml</form-error-page> -->
</form-login-config>
</login-config>
</web-app>
\end{minted}
\subsection{pom.xml}
\begin{itemize}
    \item Resource plugin – klar für Ressourcen
    \item Wildfly – server
\begin{multicols}{2}
    \begin{enumerate}
        \item Compile
        \item Surefire (unitTests)
        \item Packaging - war file erstellen
        \item Wildfly - fressen und deployen
        \item Failsafe IT-test
        \item MVN site
        \item Gui test
    \end{enumerate}
\end{multicols}
    \item Primeafce = jsf Framework
    \item Jacoco = test Coverage
    \item Slf4j = logger
    \item Jaxb – xml
    \item Cdi = context dependancy injection
\end{itemize}
\section{Frageart Prüfung}
Welche Fehler können bei Exception-Handling vorkommen in unserem Projekt?? – wie funktioniert es grundsätzlich in unserem Code

DocumentDAO – DocumentService – DocumentController – so sollte Exception-Handling implementiert warden

DAO wirft Exception – im ServiceLayer wird dies gefangen und der Stack-Trace wird im weggeloggt und eine benutzerfreundliche Fehlermeldung wird ausgegeben (Destructive Wrapping).

Alle Patterns, die vorkommen  – praktische Beispiele aus dem Code

Was sind JavaBeans? Wie funktioniert das Konzept? Wie wird es genau implementiert?
NamedBean, TypedBean etc.