2012-04-12 17 views
11

Sto usando JBoss AS 7.1.1 e in grado di configurare una nuova origine dati JTA e filo al mio EJB utilizzandonon può iniettare contenitore RESOURCE_LOCAL gestito EntityManager utilizzando @PersistenceContext

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

Quando ho provato ad usare RESOURCE_LOCAL PersistenceUnit I sto ricevendo l'errore dicendo che non posso iniettare RESOURCE_LOCAL PU usando @PersistenceContext.

Ho configurato il mio persistence.xml come segue:

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

E nella mia DAO,

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


} 

Quando ho schierato la mia applicazione su AS 7.1.1 sto ottenendo il seguente errore.

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 

Qualsiasi soluzione per utilizzare RESOURCE_LOCAL PU con @PersistenceContext?

risposta

19

JTA: In ambiente Java EE, le transazioni sono gestite dal contenitore & per default il suo JTA transazione. È possibile ottenere il gestore di entità tramite ricerca o iniezione.

RESOURCE_LOCAL: In Java SE, l'applicazione deve gestire esplicitamente le transazioni & le transazioni locali sono transazioni native. Devi creare EntityManagerFactory & quindi puoi creare un gestore di entità da esso.

Mentre lo si distribuisce nel server applicazioni, modificare transaction-type in JTA in persistence.xml.

+0

Grazie per la spiegazione. Quindi non c'è modo di configurare l'origine dati JTA come parte di WAR/EAR? Possiamo farlo con Annotations, ma sto cercando la configurazione basata su XML. –

+0

@ sivaprasadreddy.k Prego. Se hai già configurato data-source, puoi menzionarlo in persistence.xml con ''. –

+0

@NayanWadekar puoi condividere un esempio con RESOURCE_LOCAL (persistence.xml) e EntityManagerFactory (codice java). – Sabarish

Problemi correlati