2012-04-12 69 views
11

我使用JBoss AS 7.1.1並能夠使用不能注入RESOURCE_LOCAL容器管理的EntityManager使用@PersistenceContext

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

配置一個新的JTA數據源,並將其連接到我的EJB當我試圖用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 

的任何解決方案中使用RESOURCE_LOCAL PU與@PersistenceContext?

回答

19

JTA:在Java EE環境中,交易是由容器&默認其JTA事務管理。您可以通過查找或注入來獲取實體管理器。

RESOURCE_LOCAL:在Java SE,應用程序必須管理交易明確&資源本地事務是本地事務。您必須創建EntityManagerFactory &然後才能從中創建實體管理器。

當您在應用程序服務器中部署它時,請在persistence.xml中將transaction-type更改爲JTA

+0

感謝您的解釋。因此,無法將JTA數據源配置爲WAR/EAR的一部分?我們可以使用註解來完成,但我正在尋找基於xml的配置。 – 2012-04-25 07:52:04

+0

@ sivaprasadreddy.k不客氣。如果您已經配置了數據源,那麼您可以在persistence.xml中用來提及它。 – 2012-04-25 09:11:46

+0

@NayanWadekar你可以請我們與RESOURCE_LOCAL(persistence.xml)和EntityManagerFactory(java代碼)共享一個例子。 – Sabarish 2014-06-04 13:41:29

相關問題