Was wird in die jta-Datenquelle von persistence.xml geschrieben?
Welchen Wert soll ich in <jta-data-source>
meiner persistence.xml
?
In der glassfish admin-panel erstellt habe ich eine datasource-name "abcDS"
. In meinem jndi.properties
(innen src/test/resources
) ich definierte es so:
[...]
abcDS=new://Resource?type=DataSource
abcDS.JdbcDriver=org.hsqldb.jdbcDriver
abcDS.JdbcUrl=jdbc:hsqldb:mem:testdb
abcDS.JtaManaged=true
[...]
Was soll ich in persistence.xml
? Ich habe eine Menge von Varianten im Netz, wie: "jdbc/abcDS"
"java:/abcDS"
"abcDS"
. Welche ist die richtige? Und gibt es da eine Regel dafür? Ich verstehe, dass es um JNDI, aber...
Ich versuche zu schaffen, EMF in meinem unit-test:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("abc");
Dies ist, was ich bin immer in der log:
[...]
SEVERE: Could not find datasource: abcDS javax.naming.NameNotFoundException:
Name "abcDS" not found.
at org.apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java:193)
at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:150)
at org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:115)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
[...]
InformationsquelleAutor der Frage yegor256 | 2010-10-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass
Persistence.createEntityManagerFactory("abc")
ist die "do it yourself" - API und nicht die Vorteile der Embedded EJB Container. Sie können einen container managedEntityManager
in den test-Fall sehr leicht.Genauso mit den zugehörigen jndi/datasource-Frage empfehle ich Ihnen, schauen Sie sich die Beispiele in der examples.zip. Sie sind alle entworfen, um den Kampf aus der erste Schritte.
Hier ist ein Ausschnitt aus der
testcase-injection
Beispiel, das zeigt, wie man einen EntityManager und andere Dinge aus dem container für den Einsatz in einem test.Fügen Sie zunächst eine leere ejb-jar.xml oder application-client.xml für Ihren test zu aktivieren scanning für Ihr test-code:
Dann kommentieren Sie Ihren Testfall mit
@org.apache.openejb.api.LocalClient
und verwenden Sie die standard-Java ee-Annotationen, die für die eigentliche Injektion.Als
movieDatabase
ist die einzige Datenquelle, die wir eingerichtet haben, OpenEJB automatisch zuweisen, dass Sie DataSource auf Ihre Ausdauer-Einheit ohne die Notwendigkeit, ändern Sie Ihre persistence.xml. Sie können sogar lassen Sie die<jta-data-source>
oder<non-jta-data-source>
leer und OpenEJB wissen noch, was zu tun ist.Aber der Vollständigkeit halber, hier ist, wie dies insbesondere die Anwendung definiert hat, die
persistence.xml
Dann der unterhaltsame Teil, mit der Sie alle gemeinsam in tests
InformationsquelleAutor der Antwort David Blevins