2010-12-15 11 views
6

Digamos que tengo dos aplicaciones, cada una con un archivo EAR individual, que se llaman entre sí dentro de la misma Transacción JTA. Si ambos comparten el mismo entitymanager, ¿obtienen la misma sesión o se crea nueva cada vez?Dos archivos EAR, el mismo administrador de entidades JPA, misma transacción => misma sesión?

+0

¿las aplicaciones comparten archivos de clases? –

+0

sí, las entidades y alguna api común – Mauli

+0

¿Ha configurado su entitymanager para usar contextos de persistencia extendida? – HDave

Respuesta

1

Un EntityManager (en JPA) es más o menos equivalente a una sesión (en Hibernate). En una aplicación JPA pura, solo usaría EntityManager. Encapsula una sesión. La sesión vive mientras el EntityManager viva.

No hay ninguna razón (y creo que de ninguna manera) para compartir un EntityManager entre dos aplicaciones, ya que se ejecutan en diferentes JVM (al menos en los servidores de aplicaciones con los que he trabajado). Lo que puede hacer es compartir la configuración de EntityManager (llamada unidad de persistencia). Puede hacerlo colocando las clases de entidad y el XML en un JAR y usándolo desde ambas aplicaciones, pero cómo exactamente se hace esto depende probablemente de su servidor de aplicaciones. Definitivamente tendrá el mismo efecto que duplicar las clases y el XML para la segunda aplicación.

Lo que sucederá es esto: cada una de las dos aplicaciones tendrá su propio contexto de persistencia. Eso significa que cuando carga una entidad en una aplicación, no se cargará en la otra. Si carga y modifica una entidad en la aplicación uno, luego la carga en la aplicación dos, la aplicación dos verá la entidad no modificada (excepto si tiene una configuración de aislamiento de transacciones muy extraña y, la aplicación decide vaciar primero la entidad).

Cualquier conflicto solo aparecerá al final de la transacción JTA. No sé qué sucederá entonces, y creo que depende de la base de datos y la configuración de la transacción. Probablemente, la transacción se retrotraerá si ambas aplicaciones intentan hacer cosas diferentes con los mismos datos. Cada aplicación tendrá su propia conexión de base de datos. Están vinculados por la transacción JTA, por lo que es allí donde se garantiza que ambos se comprometan o ambos retroceden.

Cuestiones relacionadas