私はGlassfishやJPAなどに非常に慣れていないので、設定に本当に問題があります。私がやろうとしているのは、永続的なバックエンドを備えたシンプルなRESTfulサービスです。私はアプリケーションサーバーとしてglassfish3を使用しており、すでに単純なRESTサービスをjersey-libraryでデプロイしています。JPAを介してデータベースへのアクセスを提供したいと思います。GlassfishはJavaDB/derbyとEclipseLinkに付属しています。 、そうですか?だから、私はそれを使いたいです:-)
META-INFにpersistence.xmlを作成しました。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
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">
<persistence-unit name="myPU" transaction-type="JTA">
<provider>org.Eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.Apache.derby.jdbc.ClientDataSource" /> <!-- org.Apache.derby.jdbc.EmbeddedDriver -->
<property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/sample;create=true" />
<property name="javax.persistence.jdbc.user" value="APP" />
<property name="javax.persistence.jdbc.password" value="APP" />
<property name="eclipselink.ddl-generation" value="create-tables" />
</properties>
</persistence-unit>
</persistence>
次に、リソースにsomデータにアクセス/保存するフィールドを作成しました。
@PersistenceUnit(unitName = "myPU")
EntityManagerFactory emf;
しかし、「emf」は常にNULLです:-(
私のpersistence.xmlが適切に構成されていないと思います。
誰かがヒントを持っていれば本当にうれしいです、私が間違っていること...
ありがとう!
私の問題に対する解決策は今あります。対応する構成は次のとおりです。
したがって、srcフォルダーを使用してフォルダー「META-INF」を作成し、そこにpersistence.xmlを配置する必要があります。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
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">
<persistence-unit name="myPU" transaction-type="JTA">
<provider>org.Eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/__default</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
</properties>
</persistence-unit>
</persistence>
以前にWebContentのMETA-INFで.xmlを作成しましたが、これは誤りです。また、glassfishモジュールが追加されているため、追加のライブラリを参照する必要はありません。
これで、JavaBeanを作成しました。ここで、PersistenceUnitを注入します。
@Stateless
public class StorageService {
@PersistenceContext(unitName = "myPU")
EntityManager em;
...
}
そして、これは私のリソース-Jersey-Servletsのクラスに注入されます:
@Path("/someres")
@Produces(MediaType.APPLICATION_XML)
@Stateless
public class SomeRes {
@EJB
StorageService storageService;
...
}
インジェクションは、クラスが「@Stateless」としてマークされている場合にのみ機能します。
Db接続用にJNDIを作成する方が良いと思います。 GlassFishを使えば簡単にできます。
最初に接続プールを作成します(db接続設定を設定します)。
リソース-> JDBC-> JDBC接続プール
その後、このプールのクレートJNDI名。
リソース-> JDBC-> JDBCリソース
したがって、JNDI名を「dbCon」として設定するとします。
そしてここにあなたのpersistence.xml;
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
<persistence-unit name="myPU" transaction-type="JTA">
<jta-data-source>dbCon</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties/>
</persistence-unit>
</persistence>
注:jdbcjarを\ glassfish-3.1.1\glassfish\domain\domain1\lib\extにコピーする必要があります
私はRESTfulサービスを試したことがありませんが、それは問題ではないと思います。バージョン1でpersistence.xmlを使用していることに気づきました。特定の理由はありますか?
次のpersistence.xmlは私のために働きます:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
<persistence-unit name="myPU">
<properties>
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="database" />
</properties>
</persistence-unit>
</persistence>
お役に立てれば。