que programar para licencia jdk for developers descargar desarrollo costo java c++ oracle transactions jta

programar - Propagación de transacciones de Oracle entre C++ y Java



oracle java (3)

Creo que JBoss Transaction Manager admite la propagación de 2pc tx en las llamadas al servicio web. Podría, supongo, integrar sus sistemas de esa manera, pero el rendimiento apestaría.

Tenemos una aplicación C ++ existente que vamos a reemplazar gradualmente con un nuevo sistema basado en Java. Hasta que hayamos reimplementado completamente todo en Java, esperamos que C ++ y Java tengan que comunicarse entre sí (RMI, SOAP, mensajería, etc., no lo hemos decidido).

Ahora mi gerente piensa que necesitaremos los lados Java y C ++ para participar en la misma transacción Oracle DB. Esto está relacionado con el problema habitual de transacción distribuida, pero es diferente de tener un solo proceso que coordine 2 recursos transaccionales, como un DB y una cola de mensajes.

Creo que propagar una transacción entre procesos es una idea terrible desde el punto de vista de la performance y la estabilidad, pero aún así se me pedirá una solución.

Estoy familiarizado con las transacciones XA y he trabajado un poco con JBoss Transaction Manager, pero mi Google no ha encontrado nada bueno en la propagación de una transacción XA entre 2 procesos.

Estamos utilizando Spring en el lado de Java y su documentación establece explícitamente que no proporcionan ninguna ayuda con la propagación de transacciones.

No estamos planeando usar un servidor Java EE tradicional (por ejemplo: IBM Websphere), que puede tener soporte para propagación (no es que pueda encontrar documentación definitiva).

Cualquier ayuda o sugerencias sobre soluciones es muy apreciada.


Hay un ejemplo en el blog de Laurent Schneider sobre el uso del paquete DBMS_XA dentro de Oracle para permitir que varias sesiones funcionen en la misma transacción. Por lo tanto, sería posible tener sesiones Java y C ++ participando en la misma transacción sin necesidad de ningún tipo de coordinador adicional.

Alternativamente, podría considerar usar el Administrador de espacio de trabajo. Originalmente fue diseñado para soportar transacciones de larga duración (es decir, manipular gran cantidad de datos espaciales para un desarrollo propuesto). Esencialmente, puede crear un espacio de trabajo, que en su caso sería más o menos equivalente a una transacción con nombre. Tanto el código de Java como el de C ++ podrían ingresar a ese espacio de trabajo (desde sesiones separadas) y ambos podrían manipular y confirmar datos en ese espacio de trabajo. Cuando se completa la transacción, puede fusionar el espacio de trabajo en el espacio de trabajo EN VIVO, lo que equivale a realizar una confirmación en una transacción normal.

Por otro lado, estoy totalmente de acuerdo con su evaluación inicial de que coordinar las transacciones entre los procesos es muy probable que sea una mala idea desde el punto de vista del rendimiento, la estabilidad, la simplicidad y el mantenimiento. Por otro lado, bien podría ser un requisito comercial legítimo dependiendo de cómo se va a retirar el código C ++ (es decir, si es posible reemplazar el código de tal manera que las transacciones puedan ser exclusivamente Java o exclusivamente C ++)


He estado utilizando la mensajería de Hazlecast y los bloqueos de memoria distribuida para solucionar algunos de estos problemas, sin embargo, al utilizar una herramienta de este tipo se requerirá redisignar el software en aquellas partes donde toque los mismos datos. El cliente de C ++ pone aquí el cliente de Java aquí

Oracle también tiene un producto similar llamado Oracle Coherence que puede ayudarlo, vea cómo bloquear la guía de desarrollo.

Además, la base de datos contiene un sistema MQ llamado Cola avanzada de Oracle Streams ( colas transaccionales persistentes) que podría ayudarlo en algunas situaciones. Oracle AQ se integra bien con los desencadenadores de Oracle.

Además, existe la Notificación de cambio de base de datos que puede ayudarlo a actualizar los cachés o notificar los procesos de las actualizaciones, esto se puede utilizar junto con el patrón Optimistic Offline Lock .

Ver también memoria transaccional de software

Apache Zookeeper también puede ayudarlo con el bloqueo distribuido.