13

JBoss AS 7.1.1 を使用しており、新しい JTA データソースを設定して、EJB に接続できます。

@PersistenceContext(unitName="TestPU")
private EntityManager entityManager;

RESOURCE_LOCAL PersistenceUnit を使用しようとすると、@PersistenceContext を使用して RESOURCE_LOCAL PU を注入できないというエラーが表示されます。

次のようにpersistence.xmlを構成しました。

<persistence-unit name="TestPU" transaction-type="RESOURCE_LOCAL">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <properties>   
    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/xy"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="blah"/>        
        <property name="hibernate.hbm2ddl.auto" value="update" />       
      </properties> 
</persistence-unit>

そして私のDAOでは、

@Stateless
public class UserDAO {
    @PersistenceContext(unitName="TestPU")
    private EntityManager entityManager;


}

AS 7.1.1 にアプリをデプロイすると、次のエラーが発生します。

JBAS011428: Cannot inject RESOURCE_LOCAL container managed EntityManagers using @PersistenceContext
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor$1.handle(ModuleJndiBindingProcessor.java:169)
    at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:54)
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.processClassConfigurations(ModuleJndiBindingProcessor.java:162)
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:155)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    ... 5 more

@PersistenceContext で RESOURCE_LOCAL PU を使用するソリューションはありますか?

4

1 に答える 1

24

JTA : Java EE 環境では、トランザクションはコンテナーによって管理され、デフォルトではそのJTAトランザクションが管理されます。ルックアップまたはインジェクションによってエンティティ マネージャーを取得できます。

RESOURCE_LOCAL : Java SE では、アプリケーションはトランザクションを明示的に管理する必要があり、リソース ローカル トランザクションはネイティブ トランザクションです。作成する必要があり、EntityManagerFactoryそこからエンティティマネージャーを作成できます。

アプリケーション サーバーにデプロイするので、persistence.xml でtransaction-typeをに変更します。JTA

于 2012-04-12T05:48:40.453 に答える