Algoritmia - Tranasacciones distribuidas

 
Vista:

Tranasacciones distribuidas

Publicado por Fernando (1 intervención) el 26/10/2006 13:37:11
Hola a todos, os comento mi problema.

En la aplicación que estoy desarrollando, en un punto del flujo de la aplicación el usuario pulsa un botón. Este evento provoca que el sistema ejecute una serie inserciones en base de datos a traves de un web service, y ademas otras inserciones en la misma base de datos pero con otro web service (desarrollado por otra empresa). El problema es que tengo que conseguir que el conjunto de todos los accesos a la base de datos se realice de forma transaccional. Conseguir que cada uno de los ws se ejecute de forma transaccional es sencillo, pero no veo la forma de conseguir que el conjunto sea transaccional.

He intentado orientarme con la filosofia del commit en dos fases, el problema es que los web services son principalmente susceptibles de fallar por problemas en la red o la bbdd. Dado que el commit en dos fases hace que los subprocesos implicados esperen mensajes de cada otro, y que el problema mas probable es que falle la red, el commit en dos fases me resuelve más bien poco.

¿Alguna idea? ¿Cambiar de perspectiva?

Como es dificil que falle el primer WS sin que falle el segundo ¿deberia no perder el tiempo en prevenir algo que rara vez sucede?

Gracias por anticipado.

Un saludo, Fernando.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Gestión transaccional en inserciones de base de datos con web services

Publicado por Alejandro (307 intervenciones) el 07/03/2024 00:19:00
Fernando, comprendo tu situación. Aquí te presento una perspectiva y una posible solución:

1. Transaccionalidad a nivel de aplicación:
En lugar de depender únicamente de las transacciones a nivel de base de datos o de los mecanismos de commit en dos fases, podrías implementar un control de transacciones a nivel de aplicación. Esto significa que gestionarías manualmente las transacciones y revertirías cualquier cambio en caso de error.

2. Pseudo-código con control de transacciones:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Procedimiento EjecutarTransaccion()
    IniciarTransaccion()
 
    Intentar
        // Inserciones mediante web service 1
        ResultadoWS1 = LlamarWebService1()
 
        // Inserciones mediante web service 2
        ResultadoWS2 = LlamarWebService2()
 
        // Comprobar si ambos web services fueron exitosos
        Si ResultadoWS1 y ResultadoWS2 son exitosos Entonces
            ConfirmarTransaccion()
        Sino
            // Si hubo algún error, revertir la transacción
            RevertirTransaccion()
        Fin Si
    Fin Intentar
    Capturar Excepción
        // Manejar cualquier excepción y revertir la transacción
        RevertirTransaccion()
    Fin Capturar
Fin Procedimiento

3. Ventajas:
- Mayor control sobre la transaccionalidad a nivel de aplicación.
- Puedes implementar lógica personalizada para manejar errores y revertir transacciones.

4. Consideraciones:
- Asegúrate de que ambos web services sean compatibles con el control de transacciones a nivel de aplicación.
- La implementación puede variar según el lenguaje de programación y el entorno de desarrollo que estés utilizando.

Recuerda que esta es una perspectiva, y puede haber otras soluciones o consideraciones específicas según el contexto de tu aplicación. ¡Espero que encuentres útil esta sugerencia!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar