¿Cómo hacer Transacciones Distribuidas XA en Spring y GlassFish 5?
Hola.
Estoy tratando de hacer una transacción distribuida entre dos servicios web REST, cuya fuente de datos apuntan a la misma base de datos. El primer servicio se denomina 1, que llama con RestTemplate al servicio web denominado 2.
Para el uso de las transacciones distribuidas voy a utilizar un pool de conexiones con JNDI, MySql (con el controlador de conexión 5.1.35), JTA, XA, Spring y el servidor de aplicaciones GlassFish 5.
Ahora, ya he descargado las dependencias de maven en el proyecto de spring, monté el JtaTransactionManager en una clase de configuración y escribí las propiedades de la fuente de datos y el estado de JTA en el archivo application.yml, como en el código siguiente, respectivamente en los dos servicios web ' y 2'):
Clase de configuración:
archivo application.yml:
También he instalado el JNDI en GlassFish 5, que ha sido creado como un "Recurso JDBC" llamado jdbc / Prueba en un "Pool de Conexiones" de tipo javax.sql.XADataSource y llamado pruebaXA:
https://i.stack.imgur.com/JU2ls.png
En la capa de control del servicio web 1, llama al servicio 2 con la clase RestTemplate de Spring Framework:
servicio 1
servicio 2
Si los dos servicios funcionan bien entonces no hay problema, sin embargo, cuando el servicio 1 cae, el servicio 2 no sabe sobre el error y no hace la reversión.
No sé si necesito instalar otra característica en GlassFish 5, o en el programa de Spring.
He leído que en primavera solo es necesario crear el JtaTransactionManager y Spring hará el trabajo relacionado con JTA. https://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/
Gracias por su ayuda y tiempo.
- Inicie sesión o regístrese para enviar comentarios