Der Konstruktor weist einen entscheidenden Unterschied zu den bisherigen Beispielen auf: die Verwendung von PersistenceContextType.EXTENDED. Als Voreinstellung werden EntityManager mit PersistenceContextType TRANSACTION erzeugt. Dies bedeutet, dass Entities nur dann verwaltet werden, wenn eine aktive Transaktion ausgeführt wird. Ist die Transaktion beendet, wird die Entity vom EntityManager entkoppelt, der nun verworfen werden kann. Mit dem Typ EXTENDED wird festgelegt, dass die Entkopplung nicht stattfindet, so dass die Entities auch nach der Transaktion weiter verwaltet werden. Damit muss man sich zum Beispiel keine Gedanken machen, wenn Sammlungen verzögert abgerufen werden, dies kann der EntityManager ausführen. Man muss immer noch die EntityTransaction erhalten, wenn Entities persistiert werden, ein Update/Merge oder ein Entfernen aus der Datenbank stattfinden sollen. Wenn etwa eine neue Instanz von Application zu sichern ist:
Schaut man in den Quellcode von LicManStore, sieht man nur Speichern, Update und Löschen für Application, Speichern und Löschen für User. License und Version enthalten überhaupt keine Methoden. Sie wurden nicht vergessen, sondern sind nicht notwendig. Die Kaskadierung wurde ja auf die Beziehungen zwischen Applikation und Version und Licence gesetzt. Das hat zur Folge, dass nur ein Update auf Application erfolgen muss und die erforderlichen Operationen für Version und Licence damit erledigt sind. Schaut man in den Quellcode von Controller.java, sieht man dies in Aktion. Nun soll betrachtet werden, wie eine neue Anwendung angelegt wird:
Hier finden sich keine Besonderheiten. Die Methode populateApplications liest alle Anwendungen ein und füllt die Liste im UI, anschließend wird die neu persistierte Anwendung in der Liste ausgewählt. Nun wird das Hinzufügen einer neuen Version zu den Anwendungen näher betrachtet. currentApplication ist die aktuell ausgewählte Instanz von Application, die Methode wird mit einem String für die neue Versionsbezeichnung aufgerufen:
Neueste Kommentare
Noch keine Kommentare zu EJB Persistenz mit Java SE (3. Teil)
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.