web-dev-qa-db-ja.com

Glassfish3.1.1を使用したpersistence.xml

私は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が適切に構成されていないと思います。

誰かがヒントを持っていれば本当にうれしいです、私が間違っていること...

ありがとう!

13
Eddy

私の問題に対する解決策は今あります。対応する構成は次のとおりです。

  • glassfish 3.1.1
  • 組み込みのJavaDB/derbyデータベース:jdbc/__ default
  • eclipselinkであるglassfishのJPA
  • (JAX RS:Glassfishに同梱されているジャージー)

したがって、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」としてマークされている場合にのみ機能します。

5
Eddy

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にコピーする必要があります

12
Jman

私は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>

お役に立てれば。

0
Atul Acharya