2016-08-16 21 views
0

私はしばらくこの状態にいました。助けを求めていました。最初のpersistence.xmlはその下に出力を与えます。別のpersistence.xmlがクラッシュする:javax.persistence.PersistenceException: No Persistence provider for EntityManager named com.topcat_mavenproject1_jar_1.0-SNAPSHOTPUこれを明確にするために広告できるものがあれば教えてください。どのようにして、プロジェクトが、管理対象のEnitymanagerライフサイクルではなく、コンテナ管理によるライフサイクルを使用するようにしますか?

import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.EntityTransaction; 
import javax.persistence.Persistence; 
import javax.persistence.PersistenceContext; 


@Stateless 
public class NewClass { 

@PersistenceContext(unitName ="com.topcat_mavenproject1_jar_1.0-SNAPSHOTPU") 
static EntityManager containerManagedEntityManager; 

public static void main(String[] args) { 
    EntityManagerFactory emf = Persistence.createEntityManagerFactory(
      "com.topcat_mavenproject1_jar_1.0-SNAPSHOTPU"); 

    EntityManager applicationManagedEntityManager = emf.createEntityManager(); 
    System.out.println("Container managed entityManager: "+containerManagedEntityManager); 
    System.out.println( "Application managed entityManager: " +applicationManagedEntityManager); 
    } 

} 

出力:

[EL Info]: 2016-08-16 01:51:13.395--ServerSession(33510911)--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd 
[EL Info]: connection: 2016-08-16 01:51:13.535--ServerSession(33510911)--file:/Users/me/NetBeansProjects/mavenproject1/target/classes/_com.topcat_mavenproject1_jar_1.0-SNAPSHOTPU login successful 
[EL Warning]: metamodel: 2016-08-16 01:51:13.552--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element 

Container managed entityManager: null 
Application managed entityManager: [email protected] 

私のpersistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
<persistence-unit name="com.topcat_mavenproject1_jar_1.0-SNAPSHOTPU" transaction-type="RESOURCE_LOCAL"> 
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
<properties> 
    <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/nutrition_DB"/> 
    <property name="javax.persistence.jdbc.user" value="app"/> 
    <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/> 
    <property name="javax.persistence.jdbc.password" value="pass"/> 
    <property name="javax.persistence.schema-generation.database.action" value="create"/> 
</properties> 

別のpersistence.xml:

<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="persistenceUnit" transaction-type="JTA"> 
    <jta-data-source>jdbc/dataSource</jta-data-source> 
    <class>test.domain.TestEntity</class> 
</persistence-unit> 
</persistence> 
+0

代替パーシスタンス・ファイル – RafToTheK

+0

@RafToTheKでPUに異なる名前を付けたため、クラッシュする問題があります。申し訳ありませんが、この問題はJTAの設定には影響しません。私はそのPUの命名を修正しましたが、このエラーが発生しました。javax.naming.NoInitialContextException:環境またはシステムのプロパティ、アプレットのパラメータ、またはアプリケーションリソースファイルのクラス名を指定する必要があります。java.naming.factory.initial私の質問は、コンテナ管理のEntity Managerを使用するようにアプリケーションを変更する方法ですか?Glassfishでアプリケーションを実行しています – user465001

+0

あなたは '@ PersistenceContext'を注入するとコンテナ管理されます。私はあなたが今は例外的な展開から来ていると思うが、私は確信していない(とにかくあなたは最初にグーグルでなければならない)。また、persistence.xml java:/ path/to/data/sourceのjta-data-sourceタグを使用していますが、必要であればわかりません。 – RafToTheK

答えて

0

コンテナ管理のエンティティマネージャを使用するには、RESOURCE_LOCALの代わりにJava Transaction API(JTA)を使用する必要があります。それらの間の異なるがあります:

  • JTA永続性は、アプリケーション・サーバーによって管理されている意味
  • RESOURCE_LOCALは、持続性を自分で管理されていることを意味します。

    1. 例えば、あなたは、Java EE環境にいることを確認してください:あなたはだからあなたの場合には、私はあなたが次の操作を行うことをお勧めPersistence unit as RESOURCE_LOCAL or JTA?

      のためのより多くの違いを見ることができます

Tomcat、WildFlyであり、Java SEではありません。

  • EntityManagerを注入したタグであなたのJTAデータソース(DS)は、サーバーで設定されていることを確認しtransaction-type="JTA"
  • を設定し、
  • 活性化は、あなたの永続性XMLでこのデータソースを説明し、jta-data-source
  • をごPU com.topcat_mavenproject1_jar_1.0-SNAPSHOTPUを変更javaクラスにPersistenceContextを使用しています。永続性はアプリケーションサーバーによって管理されるので、実行していることを正確に把握していない限りエンティティマネージャファクトリを使用しないでください。
  • しかし、あなたはJava SE環境の下にいるようです。この場合、Java EEコンテナ(アプリケーションサーバー)はありません。

    関連する問題