0

Eclipse Juno、Glassfish 3.1.2、および MySQL 5.1 を使用しています。

私は単純な EJB & JSF アプリケーションを構築しています。次の Eclipse プロジェクトを作成しました。

  • appEAR <-- EAR ファイル
  • appEJB <-- UserService.java EJB を含む
  • appJPA <-- UserDAO.java EJB および User.java オブジェクトを含む
  • appWeb <-- index.jsp を含む

今はただのスケルトンですが、アプリをデプロイして index.jsp を見ることができます

次にUserDAOに以下を追加してみたところ……

@PersistenceContext
EntityManager em;

しかし、アプリが再公開しようとすると、次のエラーが表示されます。

'Publishing to GlassFish 3.1.2 at localhost...' has encountered a problem.  cannot Deploy appEar

その他の詳細はありません。

@PersistenceContent コードの 2 行を削除すると、アプリが再びデプロイされます。

また、appJPA プロジェクトの 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="appJPA">
            <class>app.model.User</class>
    </persistence-unit>
</persistence>

助けてください...何が足りないのですか?私はかなり立ち往生しています。

4

3 に答える 3

1

あなたのpersistence.xmlは不完全です。プロバイダーを指定するために接続プロパティを提供する必要があります。接続するDBなど

JPA が提供するものとして hibernate を使用する例を次に示します。

<persistence-unit name="educationPU"
    transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.coe.jpa.StudentProfile</class>
    <properties>
        <property name="hibernate.connection.driver_class"
            value="com.mysql.jdbc.Driver" />
        <property name="hibernate.connection.url"
            value="jdbc:mysql://localhost:3306/COE" />
        <property name="hibernate.connection.username" value="root" />
        <property name="show_sql" value="true" />
        <property name="dialect" value="org.hibernate.dialect.MySQLDialect" />
    </properties>
</persistence-unit>

そして、より一般的なものがあります

私はグラスフィッシュ、JPAなどに非常に慣れていないため、その設定に本当に問題があります。私が計画しているのは、永続的なバックエンドを備えた単純な RESTful サービスです。アプリケーション サーバーとして glassfish3 を使用しており、jersey-library を使用して単純な REST サービスを既に展開しています。次に、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>
于 2013-03-05T08:48:29.153 に答える
0

Glassfishは使用していません。しかし、その理由は、persistence.xmlでデータソースを指定しなかったためだと思います。これは、jndiまたは他の方法で使用できるようにする必要があります。次に、SpringコンテキストのxmlファイルでentityManagerFactoryBeanを定義する必要があります。

于 2013-03-05T06:44:04.123 に答える
0

glasfish にデータソースを追加しましたか? mysql jdbc ドライバーも追加する必要があります。Java EE では、データソースを作成および管理するのは (サーバー内の) 永続化コンテナーです。

http://www.albeesonline.com/blog/2008/08/06/creating-and-configuring-a-mysql-datasource-in-glassfish-application-server/を参照してください。

于 2013-03-05T08:28:17.710 に答える