2012-04-12 20 views
11

estoy usando JBoss AS 7.1.1 y capaz de configurar una nueva fuente de datos JTA y el alambre a mi EJB utilizandoNo se puede inyectar contenedor RESOURCE_LOCAL lograron EntityManager utilizando @PersistenceContext

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

Cuando intenté usar RESOURCE_LOCAL PersistenceUnit I recibo el error que dice que no puedo inyectar RESOURCE_LOCAL PU utilizando @PersistenceContext.

He configurado mi persistence.xml de la siguiente manera:

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

Y en mi DAO,

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


} 

Cuando desplegué mi aplicación en AS 7.1.1 estoy recibiendo el siguiente error.

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 

Cualquier solución para usar RESOURCE_LOCAL PU con @PersistenceContext?

Respuesta

19

JTA: En el entorno de Java EE, las transacciones son manejadas por el contenedor & por defecto su transacción JTA. Puede obtener el administrador de entidades por búsqueda o inyección.

RESOURCE_LOCAL: En Java SE, la aplicación tiene que administrar las transacciones explícitamente & las transacciones locales de recursos son transacciones nativas. Debe crear EntityManagerFactory & y luego crear el administrador de entidades.

Al implementarlo en el servidor de aplicaciones, cambie transaction-type a JTA en persistence.xml.

+0

Gracias por su explicación. Entonces, ¿no hay forma de configurar el origen de datos JTA como parte de WAR/EAR? Podemos hacerlo con Anotaciones, pero estoy buscando una configuración basada en XML. –

+0

@ sivaprasadreddy.k De nada. Si ya ha configurado el origen de datos, puede mencionarlo en persistence.xml con ''. –

+0

@NayanWadekar puede por favor compartir un ejemplo con RESOURCE_LOCAL (persistence.xml) y EntityManagerFactory (código de java). – Sabarish

Cuestiones relacionadas