Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > Persitence Unit en módulo EJB con geronimo 3.0

Hola

Estoy teniendo problemas con la inyección de PersistenceUnit en un módulo EJB, dentro de un EAR, desplegado en un geronimo 3.0.

Entiendo que el datasource está correctamente generado, con un pool tranql-xa con transacción local (aunque con un local debería ser suficiente?).

La referencia dentro de los EJB está de la siguiente forma


@Local(PruebaBL.class)
@Remote(PruebaBL.class)
@Stateless
public class PruebaBLImpl {

@PersistenceContext(unitName = "pruebaPU")
private EntityManager em;

@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void metodoPrueba(HttpServletResponse response) throws IOException, NamingException {
...

Por otra parte, la definición la persistencia está dentro de META-INF, de la siguiente forma


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="pruebaPU" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>jdbc/pruebaDS</jta-data-source>
</persistence-unit>
</persistence>

El caso es que el datasource lo localiza, porque con cualquier otro nombre da un error de despliegue diciendo que no ha resuelto la dependencia.

El problema es que cuando invoco al EJB el entityManager no se inyecta y siempre tiene un valor nulo. Y el problema no parece estar en JTA puesto que en DEBUG me dice que inicia y termina una transacción.

También he probado a mover la información de openejb-jar.xml a geronimo-application.xml, pero creo que sólo ha servido para complicar el problema.

Estoy migrando desde JBOSS 5.0 y ando un poco perdido, agradecería cualquier sugerencia al respecto. Creo que he seguido todas las instrucciones de las guías de Gerónimo e incluso de WASCE, pero estoy bloqueado con esto.

Gracias de antemano

Saúl

enero 27, 2013 | Registered Commentersaulario

Bueno, creo que estaba mirando donde no era. El hecho es que en persistence.xml no estoy introduciendo propiedades y por lo que he encontrado en la pág. 320 del manual de openjpa hay que especificar una serie de propiedades. Si encuentro la solución la documentaré en este mismo post.

enero 28, 2013 | Registered Commentersaulario

¿Necesitas la interfaz remota? ¿Puedes probar incluso eliminando ambas (@Remote, @Local)?

enero 29, 2013 | Registered Commenterantoniovl

No, realmente no necesito la remota.

Yo estaba centrando el problema en JTA, pero la realidad es que se abre y se cierra la transacción correctamente.

El problema es que mi entityManager no se inyecta en el EJB. Para salir de dudas busco en el jndi el nombre del datasource que debe utilizar la persistenceUnit y -manda narices- me da una excepción. El caso es que persistence.xml se inicia bien con el nombre correcto, pero da un error si pongo un nombre equivocado.

La prueba que iba a hacer ahora es a incluir en persistence.xml las clases a persistir de forma explícita, no vaya a ser que al dejarlo vacío me falte alguna propiedad de openjpa.

Gracias

enero 29, 2013 | Registered Commentersaulario

Con que servidor de aplicaciones estas trabajando y que IDE??

junio 9, 2013 | Unregistered CommenterFernando