JPA Dependency Injection mit Jersey in JEE Containern

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>