EJB3 JPA

OpenXava soporta EJB3 desde la versión 2.1.

Configurar nuestra aplicacion para que funcione con EJB3

Desde la v3.0 JPA es el gestor de pesistencia por defecto, así que no tienes que hacer nada. Pero si usas v2.1 o v2.2 y quieres usar JPA entonces has de editar el archivo properties/xava.properties de tu proyecto, y lo dejarlo así:
# EJB3 Java Persistence API
persistenceProviderClass=org.openxava.model.impl.JPAPersistenceProvider
mapFacadeAsEJB=false
A partir de ahora, tu aplicación usará EJB3 JPA en lugar de Hibernate para manejar la persistencia de los objetos.

Usando EJB3 JPA en nuestro código

Podemos usar el estándar Java Persistence API en cualquier parte de una aplicación OpenXava, esto es, dentro de calculadores, acciones, filtros, etc.
Para facilitar el uso de JPA OpenXava provee la clase XPersistence. Por ejemplo, si queremos guardar un objeto en la base de datos usando JPA, la manera típica sería:
EntityManagerFactory f = Persistence.createEntityManagerFactory("default");
EntityManager manager = f.createEntityManager();
manager.getTransaction().begin();
Cliente cliente = ... ;
manager.persist(cliente);
manager.getTransaction().commit();
manager.close();
 
Pero, dentro de OpenXava y usando XPersistence podemos escribir:
Cliente cliente = ... ;
XPersistence.getManager().persist(cliente);
 
Nada más.
La primera vez que llamamos a XPersistence.getManager() un manager nuevo es creado y asignado al hilo actual y una transacción es creada también; la siguiente vez que lo llamemos, el mismo manager de JPA es usado. Al final del ciclo completo de la ejecución de la acción, OpenXava confirma automáticamente la transacción y cierra el manager.
Podemos, opcionalmente, confirmar la transacción en cualquier momento llamando a XPersistence.commit(), si después de esto llamamos a XPersistence.getManager() un nuevo manager y transacción son creados.
Podemos ver más acerca de esto consultando el API de org.openxava.jpa.XPersistence.