2016-06-07 13 views
0

Ich habe eine Client-Server-Anwendung, die ich für ein Projekt an meiner Universität gemacht habe und ich habe Probleme mit der Datenbank-JPA-Cache-Synchronisation. Ich verwende einen anwendungsverwalteten EntityManager, von dem ich in anderen Posts erfahren habe, dass es sehr schwierig ist, es zu verwenden, weil man immer vorsichtig sein muss, um es zu öffnen und zu schließen.So injizieren Sie EntityManager in Java SE mit @PersistenceContext (EclipseLink)

Die beste Lösung, die ich für dieses Problem gefunden habe, ist die Verwendung eines containergesteuerten EntityManagers, der mit der Annotation @PersitenceContext initialisiert wurde. Auf diese Weise würde ich mich nicht mehr um das Öffnen und Schließen der EM kümmern müssen.

Also meine eigentliche Frage ist, wie die Injektion eines EntityManager in Java SE mit EclipseLink JPA getan wird, weil ich nie die NullPointerException bestanden. Ich werde einige Druckbildschirme von einem Beispiel dieser Operation anbringen und wie ich denke, dass es getan werden sollte.

Für mein Projekt verwende ich jdk 1.8, grundlegende jpa Konfiguration (2.1) und EclipseLink 2.5.x als Plattform. Auf der DB-Seite verwende ich MySql-Server und keinen Anwendungsserver (dieser muss von mir entwickelt werden).

Die persistence.xml Datei

Die 2 Klassen, die das Beispiel enthalten: https://gyazo.com/a7b1a372875a259096dc220653cd5bcd

+0

Wie Laszlo gesagt hat, können Sie nur ein „Container verwaltete EntityManager“ verwenden, wenn Sie einen „Container“ haben. "Container" ist ein Name für ein Framework wie ein Java EE Server oder Spring. An alle Java-Anmerkungen ist zu denken, dass sie nur Metadaten ohne Verhalten sind. Ein anderer Code muss die Annotation lesen und dann darauf reagieren: der "Container". – DavidS

+0

(Übrigens, wenn Sie Code schreiben, bitte den tatsächlichen Code, keine Screenshots. Verwenden Sie das Code-Markup, um richtige Einrückung und Färbung zu bekommen.) – DavidS

+0

Sie können auch einen cdi-Container selbst und ohne Feder starten: https: // deltaspike .apache.org/ –

Antwort

2

Sie nicht den Container Managed Persistence nach den verwendeten Technologien, die von Ihnen aufgeführten verwenden können, weil Sie tun keinen Behälter haben, der die Injektion handhaben könnte. Mein Verständnis ist, dass Sie nicht in einem JEE-Anwendungsserver sind, daher haben Sie keinen EJB-Container.

Wenn Sie in einer eigenständigen Anwendung JPA verwenden Sie 2 Dinge tun:

  1. die Injektion vergessen und nutzen die Anwendung Persistenz verwaltet.
  2. einen Federbehälter verwenden und Sie können nach wie vor injizieren: How to inject JPA EntityManager using spring