Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Java EE 7: Geschäftsanwendungen

JPA konfigurieren

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die Verknüpfung zwischen der Datenquelle auf dem Application Server und der Logik in der Applikation wird mit Hilfe der JPA-Konfigurationsdatei persistence.xml hergestellt.

Transkript

Eine Applikation, die mit der JPA arbeiten will, benötigt ganz zwingend eine Komponente, ohne die sie gar nicht arbeitsfähig ist, nämlich die Verknüpfung mit einer Datenquelle. In diesem Video werden wir uns deshalb damit auseinandersetzen, wie wir die Applikation so konfigurieren können, dass sie mit einer auf dem Application Server deployten Datenquelle arbeiten kann. Wir werden uns ebenfalls damit auseinandersetzen, was es mit den Begrifflichkeiten EntityManager, PersistenceContext und Persistence Unit aufsichert. Die Persistence Unit ist die Definition einer Datenquelle. So eine Persistence Unit befindet sich immer in der Datei persistenc.xml des Ordners META-INF eine Java EE-Applikation. Innerhalb einer Persistence Unit haben wir stets die Referenz auf eine Java EE-Datenquelle. Wir können hier entweder eine Datenquelle verwenden, die bereits auf dem Server deployed ist oder aber wir definieren selber von Hand so zusagen alles was wir benötigen, um auf eine Datenbank zuzugreifen. Allerdings ist dieser Ansatz, was die Definition von Hand absolut nicht zu empfehlen. In einer Java EE-Applikation, die professionell eingesetzt wird, wird lediglich eine Datenquelle referenziert. Weiterhin geben wir an, welches O/R-Mapping-Framework zu verwenden ist. JPA ist ja letztlich kein eigenständiges O/R-Mapping-Framework, sondern lediglich eine Schicht oben drüber, die letztlich alle O/R-Mapping-Framework, die es gibt unter derselben Oberfläche vereint. Wir können mit Hilfe einer Persistence Unit, also aussteuern, ob beispielsweise Hibernate oder eben Exlipce Link oder andere O/R-Mapping-Frameworks eingesetzt werden. Darüber hinaus, können wir dann, für das jeweilige O/R-Mapping noch einmal spezifische Konfigurationseinstellung festlegen. In einer Applikation kann es mehrere Persistence Units geben. Aus diesem Grund können, beziehungsweise müssen Persitence Units, gerade dann wenn es mehr als eine gibt, benannt sein, gibt es nur eine, kann man auch auf die Angabe des Namens verzichten. So eine Persistence Unit ist ja letztlich nichts anders, als eine Infrastrukturinformation Dieser Infrastrukturinformation muss dann einer verarbeitenden Bean, also eine Bean, die Datenbankzugriffe abbildet, irgendwie bekannt gemacht werden. Um diesem Zweck dient die PersistencContext Annotation. Die PersistenceContext Annotation wird geschrieben über ein Feld von Typ EntityManager. Dieser EntityManager ist dann eine Unit of Work und diese Unit of Work, diese Arbeitseinheit, mit der man dann arbeitet, verfügt über alle Infrastrukturinformationen, die an eine Persistence Unit definiert sind und kann dann ihrerseits auf die Datenbank zugreifen. Unit of Work, ist ein Ansatz bei dem wir eine leichtgewichtige Komponente, also den EntityManager benutzen, um so genannte CRUD-Operation und Abfragen auszuführen. CRUD-Operationen sind create, read, update und delete Operationen, also die Operationen, die den Lebenszyklus einer Entität begleiten. So ein Unit of Work, weil sie leichtgewichtig ist, sollte niemals länger referenziert und genutzt werden, sondern sie ist so eine Art "einmal Komponente", das heißt man nimmt sie, man benutzt sie und dann wirft man sie wieder weg. Der EntityManager als solches, verfügt über 1st- und 2nd-Level-Caches. Der 2nd-Level-Cashe kann abgeschaltet werden, der 1st-Level-Cashe existiert immer. Dieser 1st-Level-Casche soll verhindern, dass ich dieselbe Abfrage zum Laufzeitpunkt des EntityManagers mehrfach auf die Datenbank loslasse. Das heißt, die Abfrage wird einmal ausgeführt, und die Ergebnisse werden zwischen gespeichert. Und weil dies eben potenziell viel Speicher kostet und natürlich letztlich auch fehlerträchtig ist, wenn so ein Zwischenspeichern länger dauert, werden wir den EntityManager immer nur ganz kurz verwenden. Die Hauptaufgabe des EntityManagers ist es den Lebenszyklus der Entitäten abzubilden, das heißt, er gibt uns die Möglichkeit, dass wir Komponenten aus der Datenbank laden können, dass wir sie manipulieren können, dass wir sie löschen können, dass wir sie speichern können. Und wir können darüber hinaus, zusätzliche Abfragen mit Hilfe des EntityManagers abbilden. Nachdem wir uns nun über die grundsätzlichen Infrastrukturkomponenten unterhalten haben, werden wir nun unsere Applikation so erweitern, dass wir eine persistence.xml Datei dadrin angelegt haben und dass wir die Datenquelle, die wir auf Ebene des WildFly Applikation Servers bereits definiert haben, einbinden. Ebenfalls werden wir bekannt geben, dass wir mit einer Persistence Framework arbeiten, beziehungsweise mit welchem Persistence Framework wir arbeiten und wir werden das Persistence Framework als solches dann konfigurieren. Grundsätzlich kann eine Java EE-Applikation natürlich schon so etwas wie JPA. Das ist ein Standard-Framework, was ich auf Ebene der Java EE natürlich überall nutzen lässt. Allerdings müssen wir hier in Eclipse erstmal dafür sorgen, dass unsere Applikation als solches auch über das so genannte JPA Facet verfügt. Das ist jetzt letztlich eine Infrastrukturinformation für Eclipse, damit Eclipce weiß, womit es zu tun bekommt. Aus diesem Grund habe ich einen Rechtsklick schonmal auf die EJB Komponente unser Applikation ausgeführt und gehen in Bereich "Properties" und hier in den Bereich "Project Facetes". Hier gibt es den Eintrag JPA, den hake ich an und klicke hier unten auf den Link "Futher configuration available". Hier kann ich sagen, welche JPA Version möchte ich einsetzen. Wir entscheiden uns hier für Generic 2.1, wir können allerdings auch hier explizit sagen, dass wir EclipseLink oder Hibernate einsetzen wollen. WildFly setzt unter der Haube immer Hibernate ein, allerdings kann sich das hier auch in späteren Version ändern, beziehungsweise, wenn wir unsere Applikation auf einen anderen Server diployen, hat der möglicherweise eine andere Implementierung. Aus diesem Grund empfiehlt es sich immer hier die Standardplattform zu verwenden. Als JPA Implementierung nehmen wir auch einfach nur die Library, die die Target Runtime bereitstellt, also, die der Application Server bereitstellt. Eine Connection definieren wir hier nicht, wir lassen hier unten auch die Einstellung für das Klassen-Management stehen. Wir bitten darum, dass die Klassen automatisch erkannt werden. Dies verlängert zwar den Start der Applikation, weil der Klassenpfad durchlaufen werden muss und nach Entitäten gesucht werden muss, erlaubt es uns allerdings mit wesentlich weniger Schreibaufwand zum Ziel zu kommen. Ein Klick auf OK, übernimmt diese Einstellungen und ein weiterer Klick auf OK erlaubt es uns dieses Facet in unser Projekt mit zu übernehmen. Nun gibt es hier bereits ein Bereich JPA Content und über diesen Bereich JPA Content können wir nur die persistence.xml Datei öffnen. Hier öffnet sich ein kleiner Visert und mit dessen Hilfe können wir nun beispielsweise, eine Datenquelle referenzieren. Das machen wir, indem wir hier in dem Bereich JTA Datasource des Reiters "Connections" die Verbindungszeichenfolge unserer Datenquelle eintragen. Wobei die Begrifflichkeit "Verbindungszeichenfolge" jetzt nicht etwa den Connection String zur Datenbank meint, sondern den JNDI Name. Sollten Sie diesen JNDI Namen nicht mehr im Kopf haben, können Sie jederzeit im WildFly Application Server nachschauen. Hier im WildFly können Sie über den Bereich "Datasources", nämlich immer Ihre Datenquellen sehen, und hier sehen wir auch den JNDI Namen: java:jboss/datasources/VideoTrainingDS. Das ist der JNDI Name, den wir jetzt in diesem Datasources- Bereich eintragen werden. Wir fügen also dieser Namen hier ein und haben nun unsere Datenquelle bereits so weit konfiguriert. Nun wechseln wir in den Reiter "Properties". Hier können wir für das verwendete Persistence Framework, was ja unter der Haube der JPA genutzt wird, zusätzliche Konfigurationseinstellungen vornehmen. Wir werden dies machen, wir wissen wir verwenden Hibernate, aus diesem Grund fügen wir mehrere Einträge hinzu. Zunächst einmal einen Eintrag mit dem Namen "hibernate.dialect". Dieser Eintrag "hibernate.dialect" zeigt auf den zu verwendeten Datenbank Dialekt den Hibernat annehmen soll. Wir wissen, dass bei uns unter der Haube eine MySQL Datenbank läuft und deswegen geben wir hier auch an, dass der MySQL Dialekt genutzt werden soll. Dieser Dialekt nennt sich "org.hibernate.dialect. MySql.Dialect". Achten Sie bitte genau auf die Groß-/ Kleinschreibung, es handelt sich hier um einen Klassennamen. Der nächste Parameter, den wir angeben werden, ist ein Parameter, den Hibernate benutzen kann, um ein Datenbankschema automatisch anhand der Metadaten unsere Entitäten zu erzeugen. Das geben wir an, mit Hilfe des Parameters "hibernate.hbm2ddl.auto". Und hier gibt es verschiedene Werte: Validate ist der Standardwert, Validate überprüft einfach nur das Datenbankschema, ob es mit den Entitäten übereinstimmt. Wir geben hier allerdings den Wert "create" an. "Create" legt bei jedem Start der Applikation das Datenbankschema neu an. Achtung, verwenden Sie diesen Eintrag bitte nur auf Entwicklerplattform Ebene. Verwenden Sie das nicht auf irgendwelchen Live- oder Testsystem, weil alle Daten, die sich in den Datenbanktabellen, die über die Entitäten bekannt sind, befinden, werden automatisch gelöscht. Im Produktivbetrieb werden sie diesen Parameter entweder komplett entfernen oder ihn auf die Werte "None", beziehungsweise "Validate" setzen. Und zu guter Letzt auch rein für das Entwickeln von Applikationen, geben wir hier ebenfalls noch an, dass Hibernate uns die SQL Statements anzeigen soll, das machen wir mit "hibernate.show_sql" und hier gibt es den Wert "true". Nachdem wir diese Einstellungen gespeichert haben, haben wir nun unsere persistence.xml fertig editiert und unsere Applikation für die Verwendung mit Hibernate konfiguriert. Und damit ist dann letztlich auch die JPA fertig konfiguriert und wir können im weiteren Verlauf unseres Projektes mit der JPA arbeiten.

Java EE 7: Geschäftsanwendungen

Verfolgen Sie, wie eine komplette Business-Applikation unter dem Einsatz des gesamten Java-Enterprise-Techologiestacks ensteht.

5 Std. 2 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!