2012-04-12 6 views
11

Verwendung Ich verwende JBoss AS 7.1.1 und in der Lage eine neue JTA-Datenquelle und Draht es meiner EJB konfigurieren mitKann nicht RESOURCE_LOCAL Behälter injizieren verwaltet EntityManager @PersistenceContext

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

Als ich versuchte, RESOURCE_LOCAL PersistenceUnit ich zu verwenden Ich bekomme den Fehler, dass ich RESOURCE_LOCAL PU nicht mit @PersistenceContext injizieren kann.

Ich habe meine persistence.xml wie folgt konfiguriert:

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

Und in meinem DAO,

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


} 

Wenn ich meine App AS 7.1.1 zum Einsatz auf ich den folgenden Fehler.

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 

Jede Lösung, um RESOURCE_LOCAL PU mit @PersistenceContext zu verwenden?

Antwort

19

JTA: In Java EE-Umgebung, Transaktionen werden vom Container & standardmäßig seine JTA Transaktion verwaltet. Sie können Entity Manager durch Nachschlagen oder Injizieren erhalten.

RESOURCE_LOCAL: In Java SE muss die Anwendung Transaktionen explizit verwalten & Ressource lokale Transaktionen sind native Transaktionen. Sie müssen EntityManagerFactory & erstellen dann können Sie Entity Manager daraus erstellen.

Ändern Sie die transaction-type in Persistenz.xml in , während Sie es auf dem Anwendungsserver bereitstellen.

+0

Danke für Ihre Erklärung. Also gibt es keine Möglichkeit, die JTA-Datenquelle als Teil von WAR/EAR zu konfigurieren? Wir können es mit Annotationen machen, aber ich suche nach XML-basierter Konfiguration. –

+0

@ sivaprasadreddy.k Gern geschehen. Wenn Sie die Datenquelle bereits konfiguriert haben, können Sie sie in persistence.xml mit '' angeben. –

+0

@NayanWadekar können Sie uns bitte ein Beispiel mit RESOURCE_LOCAL (Persistence.xml) und EntityManagerFactory (Java-Code) teilen. – Sabarish