Estoy usando Oracle 11g para mi base de datos y su característica Oracle Streams AQ como implementación JMS.¿Compartir transacciones JMS e Hibernate en un Spring MDB utilizando Oracle Streams AQ?
Por lo que sé, debería ser posible implementar un POJO (MDP) impulsado por mensajes basado en Spring que utiliza la misma fuente de datos para acceso a datos transaccionales y transacciones JMS, todo sin XA-Transactions (IIRC, esto fue comercializado como una característica de SpringSource Advanced Pack for Oracle).
¿Esto también es posible con Hibernate? Idealmente, mi MDP iniciaría una transacción JMS y leería un mensaje de una cola, luego volvería a usar la transacción para el acceso a datos a través de Hibernate. Si algo sale mal, la transacción JMS y la base de datos se revertirán, sin utilizar la confirmación de 2 fases (2PC).
No soy un gurú de las transacciones, así que antes de comenzar a cavar más profundo, ¿alguien puede confirmar que esto es posible y también tiene sentido?
Actualización:
Lo que yo quiero es una implementación de la Shared Transaction Resource pattern. El sample code lo demuestra para ActiveMQ y JDBC, pero necesito usar Oracle Streams AQ e Hibernate.
Update2: El paquete avanzado de SpringSource para Oracle ha sido open sourced como parte de la primavera de datos JDBC y que "ofrece la opción de utilizar un único administrador de transacciones locales, tanto para la base de datos y el mensaje acceso sin recurrir a caros distribuido 2 -fase commit gestión de transacciones ".
+1. Me pregunto, sin embargo, sobre "todo sin XA-Transactions (IIRC, esto se comercializó como una característica del paquete avanzado de SpringSource para Oracle)". Estoy bastante seguro de que cualquier transacción que abarque varios nodos (por ejemplo, JMS y DA) tiene que ser una transacción XA y tiene que usar 2PC, mientras que normalmente se hace por contenedor detrás de la escena, sin embargo se hace. ¿Me equivoco? ¿Hay alguna nueva tecnología sorprendente que de alguna manera lo haga innecesario? – ChssPly76
Gracias por sus comentarios. Actualicé mi pregunta después de profundizar un poco más. Como se describe en el artículo al que me he vinculado, me gustaría evitar JTA y XA por completo. Los documentos de [Paquete avanzado de SpringSource para Oracle] (https://www.springsource.com/products/enterprise/oraclepack) (descargue [aquí] (http://www.springsource.com/downloads/springsource-advanced-package) -for-oracle-database-download)) también mencionan esa pasibilidad (ver el último párrafo del capítulo 3.2, que es demasiado largo para citar aquí, desafortunadamente). –
No hay forma de que obtenga la coordinación de tx en orígenes de datos y JMS sin JTA. – skaffman