with tutorial transaction transacciones significa que ejemplo java jpa java-ee ejb-3.0 jta

java - tutorial - transacciones ejb



Diferencia entre un "jta-datasource" y un "resource-local" datasource? (1)

Los términos "jta-datasource" y "resouce-local datasource" son un poco vagos para mí.

Supongo que en realidad se refiere a los elementos jta-datasource y non-jta-datasource . En breve:

  • si el tipo de transacción de la unidad de persistencia es JTA , el elemento jta-datasource se utiliza para declarar el nombre JNDI de la fuente de datos JTA que se utilizará para obtener conexiones. Este es el caso común.
  • si el tipo de transacción de la unidad de persistencia es local de recurso , la non-jta-data-source debe usar para declarar el nombre JNDI de una fuente de datos no JTA.
  • La misma base de datos se puede denominar como jta-datasource o como recurso local de origen de datos

Esto es correcto. Y no mencioné eso justo arriba, pero algunos proveedores incluso permiten declarar un jta-datasource y un non-jta-datasource y usar el último para una lectura optimizada a través de conexiones que no son JTA (es decir, que no estarán asociadas a un transacción JTA en curso).

  • Si se menciona como jta-datasource, los beans / otras clases pueden usar JTA. Por lo tanto, la interfaz UserTransaction.

La primera parte es correcta, la última parte no del todo. De la especificación de EJB 3.0, sección 13.3.4 Enterprise Beans utilizando la demarcación de transacciones gestionadas por contenedor :

Los métodos comerciales de Enterprise Bean [...] no deben intentar obtener o usar la interfaz javax.transaction.UserTransaction .

Y la sección 16.12 UserTransaction Interface :

El contenedor no debe hacer que la interfaz UserTransaction esté disponible para los enterprise beans que no pueden usar esta interfaz.

En otras palabras, la interfaz UserTransaction no está disponible para enterprise beans CMT.

  • No se puede usar CMT / BMT si el origen de datos es un recurso local

La redacción es un poco confusa aquí, pero diría que esto no es estrictamente correcto. De la especificación de JPA 1.0, sección § 5.5 Controlling Transactions :

Un administrador de entidad administrado por aplicación puede ser un administrador de entidad JTA o un administrador de entidad local de recurso.

...

Se requiere que tanto los gerentes de entidades JTA como los gerentes de entidades locales de recursos sean compatibles con contenedores web Java EE y contenedores EJB. Dentro de un entorno EJB, normalmente se usa un administrador de entidades JTA.

Y la sección 6.2.1.2 tipo de transacción

El atributo de transaction-type se utiliza para especificar si los administradores de entidades proporcionados por la fábrica del administrador de entidades para la unidad de persistencia deben ser administradores de entidades JTA o administradores de entidades de recursos locales. El valor de este elemento es JTA o RESOURCE_LOCAL . Un tipo de transacción de JTA supone que se proporcionará una fuente de datos JTA, ya sea como se especifica en el elemento jta-data-source o en el contenedor. En general, en entornos Java EE, un transaction-type de transaction-type de RESOURCE_LOCAL supone que se proporcionará un origen de datos no JTA. En un entorno Java EE, si este elemento no está especificado, el valor predeterminado es JTA.

Por lo tanto, PUEDE utilizar un administrador de entidades administradas por la aplicación que puede ser un administrador de entidades local de recursos (debe inyectar una EntityManagerFactory para obtener el EM en ese caso) y no será parte de una transacción JTA. Vea esta discusión (muy interesante) .

  • Si se menciona como fuente de datos local de recursos, las transacciones no son conscientes de JTA. El código puede usar la interfaz EntityTransaction pero no la interfaz UserTransaction

Una vez más, la redacción es un poco confusa, pero yo diría que esto es correcto.

Los términos "jta-datasource" y "resource-local datasource" son un tanto vagos para mí. Pongo lo que estoy entendiendo (o asumiendo) y me gustaría que diga dónde estoy bien / mal.

  • La misma base de datos se puede denominar como jta-datasource o como recurso local de origen de datos
  • Si se menciona como jta-datasource, los beans / otras clases pueden usar JTA. Por lo tanto, la interfaz UserTransaction
  • No se puede usar CMT / BMT si el origen de datos es un recurso local
  • Si se menciona como fuente de datos local de recursos, las transacciones no son conscientes de JTA. El código puede usar la interfaz EntityTransaction pero no la interfaz UserTransaction

¡Gracias!