diff --git a/parts/03_config.tex b/parts/03_config.tex
index e2a6f61..f73bea1 100644
--- a/parts/03_config.tex
+++ b/parts/03_config.tex
@@ -30,6 +30,7 @@
\item @Resource
\begin{itemize}
\item fast wie Dependency Injection
+ \item damit weiß der Container wie er das Annotierte Feld instanzieren muss
\end{itemize}
\item @Stateless
\begin{itemize}
@@ -88,79 +89,41 @@
\subsection{Annotationen - Details}
+\begin{itemize}
+ \item CascadeType.Remove löscht die damit Annotierte Verknüpfung mit
+ \item dies geht auch rekursiv in der kompletten Datenbank
+ \item CascadeType.Remove und orphanRemoval=true ist equivalent
+\end{itemize}
\begin{minted}[linenos,breaklines=true]{java}
-
-CascadeType anschauen
-
-@Entity
-@Table(name = "user")
-public class User extends AbstractEntity {
-private static final long serialVersionUID = -7060150053795176748L;
-
-@OneToMany(
-mappedBy = "communityAdminUser",
-cascade = {CascadeType.PERSIST, CascadeType.REFRESH}, // Persist Operation des User werden auch auf dessen communityAdminUser persistiert - und auch update
-orphanRemoval = true //
+ ...
+ @OneToOne(fetch = FetchType.EAGER,
+ cascade = CascadeType.ALL,
+ orphanRemoval = true)
+ @JoinColumn(name = "documentlibrary_id")
+ private Documentlibrary documentlibrary;
+
+ @Column(nullable = false, unique = true)
+ private String name;
+ ...
+ public enum CascadeType {
+ /* Cascade all operations /
+ ALL,
+ /* Cascade persist operation /
+ PERSIST,
+ /* Cascade merge operation /
+ MERGE,
+ /* Cascade remove operation /
+ REMOVE,
+ /* Cascade refresh operation /
+ REFRESH,
+ */
+ DETACH
+ ...
+ }
)
\end{minted}
\section{Konfigurationsdateien}
-\subsection{standalone-psoe.xml}
-
-Wird ein JBoss Applikationsserver im \emph{standalone}-Modus betrieben, läuft jede Instanz in einem eigenen Prozess.
-Diese Datei ist eine Java Enterprise Edition 6 zertifizierte Web-Profil Konfiguration welche alle benötigten Technologien (z.B. Extensions von JBoss, Datasources etc.) definiert.
-
-JBoss EAP benutzt standardmäßig die standalone.xml Konfigurationsdatei, kann aber auch unter Verwendung einer anderen gestartet werden.
-
-Abschnitte der standalone.xml
-\begin{itemize}
- \item extensions (z.B. diverse Wildfly Module)
- \item management (z.B. Access Control -> role-mapping)
- \item profile (z.B. JPA Subsystem)
- \item interfaces (z.B. \${jboss.bind.address:127.0.0.1})
- \item socket-binding-group (z.B \${jboss.http.port:8080})
- \item Rechte (Management-Realm)
- \item Datenbankzugriffsparameter
-\end{itemize}
-
-\begin{code}
- \captionof{listing}{standalone.xml (auszugsweise)}
-
-
- \begin{minted}[linenos,breaklines=true]{xml}
-
-........
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-\end{minted}
-\end{code}
-
\subsection{persistence.xml}
Die Datei \emph{persistence.xml} ist der zentrale Bestandteil der Persistierungs-Konfiguration.
@@ -282,27 +245,74 @@ SQL stdout logging
\item Jacoco = test Coverage
\item Slf4j = logger
\item Jaxb – xml
- \item Cdi = context dependancy injection
+ \item Cdi = context dependancy injection
\end{itemize}
\subsubsection{Aufbau pom.xml}
\begin{figure}[h]
- \centering
- \includegraphics[width=0.3\linewidth]{pics/pom-structure}
- \includegraphics[width=0.3\linewidth]{pics/pom-properties}
- \label{fig:pom}
+ \centering
+ \includegraphics[width=0.3\linewidth]{pics/pom-structure}
+ \includegraphics[width=0.3\linewidth]{pics/pom-properties}
+ \label{fig:pom}
\end{figure}
-\section{Frageart Prüfung}
-Welche Fehler können bei Exception-Handling vorkommen in unserem Projekt?? – wie funktioniert es grundsätzlich in unserem Code
+\subsection{standalone-psoe.xml}
-DocumentDAO – DocumentService – DocumentController – so sollte Exception-Handling implementiert warden
+Wird ein JBoss Applikationsserver im \emph{standalone}-Modus betrieben, läuft jede Instanz in einem eigenen Prozess.
+Diese Datei ist eine Java Enterprise Edition 6 zertifizierte Web-Profil Konfiguration welche alle benötigten Technologien (z.B. Extensions von JBoss, Datasources etc.) definiert.
-DAO wirft Exception – im ServiceLayer wird dies gefangen und der Stack-Trace wird im weggeloggt und eine benutzerfreundliche Fehlermeldung wird ausgegeben (Destructive Wrapping).
+JBoss EAP benutzt standardmäßig die standalone.xml Konfigurationsdatei, kann aber auch unter Verwendung einer anderen gestartet werden.
-Alle Patterns, die vorkommen – praktische Beispiele aus dem Code
+Abschnitte der standalone.xml
+\begin{itemize}
+ \item extensions (z.B. diverse Wildfly Module)
+ \item management (z.B. Access Control -> role-mapping)
+ \item profile (z.B. JPA Subsystem)
+ \item interfaces (z.B. \${jboss.bind.address:127.0.0.1})
+ \item socket-binding-group (z.B \${jboss.http.port:8080})
+ \item Rechte (Management-Realm)
+ \item Datenbankzugriffsparameter
+\end{itemize}
-Was sind JavaBeans? Wie funktioniert das Konzept? Wie wird es genau implementiert?
-NamedBean, TypedBean etc.
+\begin{code}
+ \captionof{listing}{standalone.xml (auszugsweise)}
+
+
+ \begin{minted}[linenos,breaklines=true]{xml}
+
+........
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\end{minted}
+\end{code}
+
+\subsection{log4j.properties}
+textit{src/test/resources/log4j.properties}
\section{Fehler im Projekt}
\subsection{Return null}
@@ -463,14 +473,105 @@ public void saveUser(UserDTO userDTO) {
\section{Tests}
\subsection{Testpyramide}
\begin{figure}[h]
- \centering
- \includegraphics[width=0.9\linewidth]{pics/testpyramide}
- \caption{}
- \label{fig:testpyramide}
+ \centering
+ \includegraphics[width=0.9\linewidth]{pics/testpyramide}
+ \caption{}
+ \label{fig:testpyramide}
\end{figure}
\subsection{Unit}
\subsection{Integration}
\subsection{Selenium bzw. GUI}
+\section{Toni FRAAGNAA}
+Den Code durchgehen - was statt null - welche Exception - logger ok?
+ob ein Throw im try Block ok ist.
+\begin{minted}[linenos,breaklines=true]{java}
+ @Override
+ public List findByUser(User user) {
+ logger.debug("dao: documents findByUser");
+ try {
+ if(user == null) throw new IllegalArgumentException("user must not be null");
+ return entityMangaer.createQuery("from Document d where d.user.userId = :userid", Document.class).setParameter("userid", user.getUserId()).getResultList();
+ } catch(NoResultException noresex) {
+ logger.info("dao: findByUser no documents found");
+ return null;
+ }
+ catch (Exception e) {
+ throw new DaoException("error finding documents of user",e);
+ }
+ }
+ // throw in try
+ @Override
+ public void delete(Document document) {
+ logger.debug("dao: delete document");
+
+ try {
+ if(document == null) throw new IllegalArgumentException("document must not be null");
+ if(!entityMangaer.contains(document)) {
+ document = entityMangaer.merge(document);
+ }
+ entityMangaer.remove(document);
+ }
+ catch (Exception e) {
+ throw new DaoException("error deleting document",e);
+ }
+ }
+ // ist loggen ohne stacktrace ok?
+ @Override
+ public TimeRecording getTimeRecordingByTask(Task task) {
+ TimeRecording result = new TimeRecording();
+ try {
+ result = entityManager.createQuery("select t from TimeRecording t where t.task.id = :id", TimeRecording.class)
+ .setParameter("id", task.getId()).getSingleResult();
+ } catch (NoResultException e) {
+ logger.warn("Not Possible to find TimeRecording with task id " + task.getId());
+ }
+ return result;
+ }
+ // UserDTO - @XmlElement
+ @XmlElement
+ public void setPhoneNumber(String phoneNumber) {
+ this.phoneNumber = phoneNumber;
+ }
+ // wos is produces
+ @Override
+ @Produces
+ @Named("userPrincipal")
+ @SessionScoped
+ public UserPrincipal getUserPrincipal() {
+ String principalName = sessionContext.getCallerPrincipal().getName();
+ logger.info(principalName);
+ try {
+ User user = userDao.getByEmail(principalName);
+ return new UserPrincipal(user.getId(), user.getUserId(), user.getEmail(), user.getFirstname(), user.getLastname());
+ } catch (DaoException e) {
+ logger.error("Error loading user '{}'", principalName, e);
+ throw new ServiceException("Error loading user");
+ } catch (Throwable e) {
+ logger.error("Unknown error loading user '{}'", principalName, e);
+ throw new ServiceException("Unknown error loading user");
+ }
+ // @Typed -> Zarwos
+
+ // warum immer mappedBy Mehrzahl
+ @ManyToMany(mappedBy = "businessTrips")
+
+ // dependency Injection
+
+ // braucht man im Controller (ViewHelper) überhaupt noch Exception Handling
+
+\end{minted}
+
+\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.
diff --git a/pse.pdf b/pse.pdf
index d742025..aced8db 100644
Binary files a/pse.pdf and b/pse.pdf differ