2016-04-27 16 views
0

Ich erstelle eine Reihe von REST-Diensten und stelle jeden Dienst in einer separaten WAR-Datei bereit. Da jeder dieser Dienste die exakt gleiche Persistenzkonfiguration verwendet, habe ich meine persistence.xml in eine jar-Datei gestellt (der Pfad der Datei persistence.xml im jar ist immer noch/META-INF).Wie kann ich Websphere dazu bringen, persistence.xml in einer JAR-Datei statt in META-INF zu finden?

Wenn dies mit TomEE (1.7) ausgeführt wird, funktioniert das gut. Wenn ich jedoch dasselbe mit WebSphere (8.5.5.x) versuche, werden meine Persistenzeinheiten nicht geladen. Im WebSphere Protokoll, erhalte ich einen Fehler, der wie folgt aussieht:

[4/27/16 8:54:21:653 EDT] 00000080 JPAApplInfo E CWWJP0029E: The server cannot find the MRO_PU_JTA persistence unit in the Customer_WAR.war module and the DS_APP_EAR application. [4/27/16 8:54:21:654 EDT] 00000080 InjectionBind E CWNEN0035E: The ds.services.helper.AbstractServiceHelper/em reference of type javax.persistence.EntityManager for the component in the Customer_WAR.war module of the DS_APP_EAR application cannot be resolved. [4/27/16 8:54:21:657 EDT] 00000080 ResourceInjec E CWOWB0102E: A JCDI error has occurred: The ds.services.helper.AbstractServiceHelper/em reference of type javax.persistence.EntityManager for the null component in the Customer_WAR.war module of the DS_APP_EAR application cannot be resolved.

Wenn ich kopieren Sie die Datei persistence.xml aus meiner JAR-Datei auf dem lokalen SIND META-INF, diese Fehler gehen weg und alles funktioniert . Da ich eine Tonne von Diensten habe, die auf diese Weise bereitgestellt werden, möchte ich keine Kopien von persistence.xml für jede WAR-Datei erstellen müssen.

Gibt es eine Möglichkeit, WebSphere dazu zu bringen, meine Datei persistence.xml zu finden? Vielleicht eine Einstellung in WebSphere, die ich nicht finden konnte?

Danke.

+0

Mögliches Duplikat von [Freigabe einer Persistenzeinheit über Komponenten in einer EAR-Datei] (http://stackoverflow.com/questions/4073635/sharing-a-persistence-unit-across-components-in-a-e-ar- Datei) –

Antwort

1

Ok, so scheint es, dass dies ein Duplikat der folgenden: Sharing a persistence unit across components in a .ear file

auf der Antwort der Suche auf diese Frage von Pascal Thivent, wird es ziemlich offensichtlich, was das Problem ist: Um diese Arbeit zu bekommen Die JAR-Datei mit der Datei persistence.xml muss im Verzeichnis/lib der EAR vorhanden sein, die in WebSphere bereitgestellt wird. Anscheinend funktioniert die EAR so, dass sie die Datei persistence.xml auflöst, und wenn jede WAR-Datei versucht, den Entity Manager zu injizieren, verweist sie auf die EAR, um dies zu tun. Dies steht im Gegensatz zu TomEE (das ohne EAR-Datei bereitgestellt wird). In diesem Fall wird die Abhängigkeit von der WAR-Datei classloader aufgelöst, sodass es ausreicht, die jar-Datei im Klassenpfad von WAR zu haben.