Datenbank-Einstellungen in persistence.xml nicht verwendet
Ich bin neu in JPA und zu versuchen, zu lehren Sie mich, ich bin die Einrichtung eines kleinen web-Anwendung und den Einsatz auf Glassfish 3.1.
JPA funktioniert, wenn ich beziehen sich auf eine JNDI-Datenquelle in persistence.xml wie zum Beispiel diese:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="foo" transaction-type="JTA">
<jta-data-source>jdbc/foo</jta-data-source>
<class>my.app.Foo</class>
</persistence-unit>
</persistence>
Aber soweit ich das verstanden habe, soll es möglich sein, um alle meine Datenbank-Verbindung Einstellungen in den Eigenschaften in persistence.xml. Dies ist möglicherweise nicht gute Praxis, aber es scheint, wie es könnte nützlich sein, wenn ich nur Experimentieren, und vielleicht während der unit-Tests.
Allerdings, wenn ich Folgen Sie den Beispielen, die ich gefunden haben für diese, persistence.xml scheint zu sein, einfach ignoriert und stattdessen der Standard-container-managed-DataSource jndi/__default verwendet wird. Dies ist einer Derby-Instanz nicht ausgeführt wird.
Habe ich versucht, diese Datei auf eine Kurzfristige in-memory-Derby-Instanz:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="foo" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>my.app.Foo</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:NxtMv;create=true"/>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="javax.persistence.jdbc.user" value=""/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="database" />
<property name="eclipselink.logging.level" value="INFO"/>
</properties>
</persistence-unit>
</persistence>
Habe ich auch versucht, diese für einen PostgreSQL-server (was funktioniert, wenn der Zugriff über JNDI):
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="foo" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>my.app.Foo</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/foo"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.user" value="myuser"/>
<property name="javax.persistence.jdbc.password" value="secret"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="database" />
<property name="eclipselink.logging.level" value="INFO"/>
</properties>
</persistence-unit>
</persistence>
Wahrscheinlich gibt es einige irrelevante Reste in den Dateien, die sich angesammelt hat während meiner unzähligen versuchen und Wiederholungen.
Was vermisse ich hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht manuell konfigurierten datasource mit
transaction-type="JTA"
.JPA Spec sagt:
Versuchen
transaction-type="RESOURCE_LOCAL"
statt (obwohl ich nicht sicher bin, wie wäre es mit container-verwalteten Transaktionen, wenn Sie Sie verwenden).Persistence.createEntitiyManagerFactory()
). Es sieht aus wie eine weitere Inflexibilität der EJB.