Tengo un proceso que implica el envío de un mensaje JMS. El proceso es parte de una transacción. Si falla una parte posterior de la transacción, una parte posterior a una parte anterior que envió el mensaje, necesito cancelar el mensaje. Lo único que pensé fue configurar el mensaje de alguna manera para que no se recogiera durante un cierto período de tiempo, y si necesito deshacerlo, podría ir y cancelar el mensaje. Si no conozco los mensajes, no sé si la idea es posible. O, ¿hay una mejor idea? GraciasJMS rollback
Respuesta
Puede usar JMS y JTA (Java Transaction API) al mismo tiempo - see here. Al hacer eso, el envío de un mensaje JMS o el consumo de un mensaje recibido sucede de manera atómica como parte de la confirmación de transacción.
¿Qué significa esto? Si la transacción falla o se revierte, el mensaje "enviado" no se apaga y los mensajes "recibidos" no se consumen realmente. Todo gestionado para usted por su proveedor JMS y JTA.
Debe utilizar una implementación JMS que admita JTA. Parece que ya está usando transacciones, por lo que podría ser una cuestión de hacer alguna configuración para que esto suceda (agitando la mano vigorosamente ...).
He tenido experiencia al usar esto (BEA WebLogic 7 con BEA WebLogic Integration). Funcionó como se anuncia: "el mundo exterior" no vio el impacto de las cosas de JMS que probé a menos que la transacción se haya realizado correctamente.
Lo que ha descrito es una transacción XA. Esto permite que una transacción abarque múltiples capas, es decir, proveedor JMS, DB o cualquier otro EIS. La mayoría de los contenedores pueden configurarse para usar transacciones que no sean XA y ninguna transacción XA, así que verifique la configuración de su contenedor.
Por ejemplo, si está utilizando JMS con transacciones XA, es posible lo siguiente.
Start Transaction
|
DB Insert
|
Send JMS Msg
|
More DB Inserts
|
Commit Transaction <- Only at this point will the database records be inserted and the JMS message sent.
XA tranactions sólo están disponibles en contenedores llenos de Java EE por lo transacciones XA no están disponibles en Tomcat.
¡Buena suerte!
Karl
- 1. transacción Arjuna JTA rollback inesperadamente
- 2. NUnit Rollback After Test
- 3. Git rollback 1 pull
- 4. Rollback un Git fusionar
- 5. Symfony2 Doctrine MongoDB rollback
- 6. SVN Versión Rollback Pregunta
- 7. ¿Se requiere ROLLBACK TRANSACTION?
- 8. Android sqlite rollback
- 9. Largas sesiones de JMS. Mantener las conexiones JMS/sesiones JMS siempre abiertas ¿una mala práctica?
- 10. Android SQLite Transaction rollback facility?
- 11. Anulado/Ejecución de TransactionScope Rollback
- 12. Google App Engine: appcfg.py rollback
- 13. Rollback al último git commit
- 14. savepoint commit rollback en mysql
- 15. Rollback no funciona en MySQL
- 16. Cómo rollback de transacciones sin
- 17. Rails 3: rollback for after_create
- 18. Cómo deshacer un Git rollback
- 19. rake db: rollback no funciona?
- 20. git equivalente para hg rollback
- 21. Java JMS de mensajería
- 22. JMS vs Webservices
- 23. mensajes JMS por Node.js
- 24. Corredor liviano JMS
- 25. Cliente JMS genérico
- 26. Procesamiento JMS efectivo
- 27. JMS y JMX tutoriales?
- 28. Tamaño de mensaje JMS
- 29. JBoss JMS Remote Queue?
- 30. ActiveMQ JMS ping
También tener en cuenta el gasto de recursos: http://stackoverflow.com/questions/12305900/performance-overhead-of-xa-data-sources-best-practices – Vadzim