Ziel des Posts ist es eine Webanwendung soweit aufzuwerten, dass sie mittels Dependency Injection auf Entitiymanager zugreifen kann, die durch den Container verwaltet werden.
@PersistenceContext(unitName = "test") EntityManager em;
Die wichtigsten Punkte zusammengefasst
Auf Seiten von JPA wird die Datenbankverbindung durch die Java Transaction Api (JTA) übernommen. Dies wird in der persistence.xml Datei durch folgenden Eintrag erreicht:
<persistence-unit name="test" transaction-type="JTA"> <jta-data-source>jdbc/TestConnection</jta-data-source> ... </persistence-unit>
die JTA Data Source wird anschließend im Container definiert. In Glassfish kann das im Adminpanel gemacht werden und ist 1 sehr ausführlich am Beispiel MySQL beschrieben.
Um nun eine erfolgreiche Dependency Injection für den EntityManager zu erreichen muss der EJB Container wissen, dass er dies überhaupt tun soll. Am Beispiel einer Jersey REST Page sieht man deutlich wie dies umgesetzt wird.
@Stateless
@Path("/user/{id: [0-9]+}")
public class UserOverview {
Im wesentlich war es das schon. Ohne die @Stateless-Annotation endet eine Anfrage an den EntityManager mit einer NullPointerException.
Ich habe mich bewusst kurz gehalten, um im wesentlich nur eine Unterstützung für meine eignene Aufzeichnungen zu liefern. Für weitergehende Fragen kann ich auf Wunsch gerne eingehen, sofern Bedarf vorhanden ist.