Tengo consultas de la siguiente manera:
- ¿Cuál es la diferencia de estos dos?
- ¿Ambos son compatibles con todas las bases de datos?
- ¿Son JPA TransactionManager y JTA TransactionManager diferentes?
Las implementaciones de JPA tienen la opción de administrar las transacciones por sí mismas ( RESOURCE_LOCAL
) o hacer que las administre la implementación de JTA del servidor de aplicaciones.
En la mayoría de los casos, RESOURCE_LOCAL está bien. Esto usaría transacciones básicas de nivel JDBC. La desventaja es que la transacción es local para la unidad de persistencia JPA, por lo que si desea una transacción que abarque varias unidades de persistencia (u otras bases de datos), es posible que RESOURCE_LOCAL no sea lo suficientemente bueno.
JTA también se usa para administrar transacciones en sistemas como JMS y JCA, pero ese es un uso bastante exótico para la mayoría de nosotros.
Para usar JTA, necesita soporte en su servidor de aplicaciones y también soporte del controlador JDBC.
Como complemento a otras respuestas
Aquí hay un extracto del artículo extremadamente útil (publicado en el sitio web de Apache TomEE ), que también puede ayudar a responder la primera pregunta del OP (el enlace al artículo se encuentra a continuación).
Cualquiera que esté interesado en aprender la API de persistencia de Java, hágase un favor y lea el artículo completo aquí: Conceptos de JPA: JPA 101 .
fuente
transaction-type=RESOURCE_LOCAL
y@PersistenceContext
y@Transactional
gestionado por la primaveraResource_Local y JTA son administradores de transacciones (métodos para realizar transacciones). Esta no es propiedad de la base de datos, sino el componente responsable de coordinar las transacciones. Los administradores de transacciones JPA y JTA son diferentes. El administrador de transacciones de JPA es responsable de las transacciones de JPA y desea utilizar uno si solo está realizando una transacción de JPA. El administrador de transacciones de JTA es un administrador de transacciones de propósito general y puede incorporar otros recursos como las colas JMS en la transacción. Normalmente, los contenedores Java EE emplean un administrador de transacciones JTA para EJB, entidades JPA, etc.
fuente
resource_local vs JTA se trata de transacciones locales vs transacciones globales. Se trata de si podemos gestionar varios recursos en una sola transacción.
CMT vs BMT se trata de quién abre y cierra la transacción: desarrollador de aplicaciones o servidor de aplicaciones.
fuente