233 lines
7.4 KiB
TeX
233 lines
7.4 KiB
TeX
|
\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.
|