私はJPAを初めて使い、自分自身を教えようと私は小さなWebアプリケーションをセットアップしてGlassfish 3.1に配備しています。persistence.xmlのデータベース設定が使用されていません
<?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>
しかし、これまで私が理解し、すべて私のデータベース接続設定を配置することも可能であると考えられる:私はこのような、persistence.xmlでJNDIデータソースを参照するとき
JPAが正常に動作しますpersistence.xmlのプロパティに追加します。これは良い習慣ではないかもしれませんが、私はちょうど実験しているとき、おそらく単体テストのときに便利かもしれないようです。
しかし、私が見つけた例に従えば、persistence.xmlは無視されているようで、デフォルトのコンテナ管理のDataSourceであるjndi/__ defaultが使用されています。これは実行されていないDerbyインスタンスです。
私は一時的なインメモリ・ダービーのインスタンスに、このファイルを試してみた:
<?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>
は私も(JNDIを介してアクセスしたときに働く)PostgreSQLサーバのためにこれを試してみました:
<?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>
私の無数の試行と再試行の間に蓄積されたこれらのファイルには、おそらく無関係ないくつかの欠点があります。
私はここで何が欠けていますか?
私はこれを試しましたが、あなたは正しいです。これは、「トランザクション・タイプJTAの永続ユニットのみをコンテナ管理のエンティティ・マネージャとして使用できます」というエラーが発生します。私が展開しようとするとき。 RESOURCE_LOCALを使用して引き続き展開できるシナリオは何ですか? –
@Coder:JTAデータソースなしでcontrainer-managedトランザクションを使用することはできません。つまり、手動で設定されたデータソースを使用するには、(Persistence.createEntitiyManagerFactory()によって取得された永続コンテキストで)トランザクションを手動で管理する必要があります。 EJBの柔軟性に欠けているようです。 – axtavt
@Coder Doe:コンテナ管理のトランザクションを使用している場合、JTAデータソースを使用する以外に選択肢はありません。私はこれがすぐにいつでも変わるとは思わない! JTAを直接サポートするサーバーは、Glassfish、JBoss、Websphereです。非JTAサーバー:Tomcat – ChuongPham