Webservices na mesma transação

3 respostas
stolakos

Olá!

Galera, estou desenvolvendo uma arquitetura e me deparei com o seguinte problema:

Transação de serviços SOA, preciso gerenciar de alguma forma transação de webservices (SOA), ou seja, preciso que 2 webservices estejam na mesma transação, mas não sei como fazer isso, o meu cliente é .NET, por exemplo, meu cliente chama um webservice e o retorno é ok, em seguida, meu cliente chama outro webservice, vamos supor que ocorreu algum erro, é necessário dar rollback na primeira chamada do webservice, não posso abrir transação no cliente, porque é .NET, meu servidor é websphere 7.

Tentei estudar um pouco de SPRING e EJB mas não consegui muita coisa!

Obrigado.

3 Respostas

leoramos

Mestre, existem duas abordagens pra resolver isso: Two-phase commit e three phase commit.
Na prática, é aquela coisa meio braçal: você envia as chamadas, executa sem commit, confirma que tudo pôde ser concluído sem erro, e só então envia o comando de commit pra todas as transações.
Se você precisa do primeiro commit pra executar uma segunda transação (não deveria, mas ok, vá saber), aí você pode analisar a possibilidade de implementar o design pattern MEMENTO aí. É o pattern usado pro ctrl + z, por exemplo. Aí você consegue controlar o histórico de estados dos teus objetos e retorná-los a um estado anterior. ATENÇÃO A UM RISCO AÍ: caso a primeira transação funcione, a segunda não, e ao fazer rollback da primeira, ocorra, por exemplo, um erro de rede, você terá seu sistema num “estado inválido”, ou seja, você terá dados inconsistentes.
Boa sorte aí!

(Eu passei por isso na PIOR empresa em que já trabalhei. Espero que você não seja de Fpolis e não tenha tido o azar de estar nessa empresa… senão tu tá lascado! uiaehhaeuhaeiu)

leoramos
stolakos

Obrigado pela atenção!

Só mais uma dúvida, existe algum framework para facilitar?

(Não sou de Floripa não…sou de SP…)

vlw

Criado 22 de março de 2012
Ultima resposta 22 de mar. de 2012
Respostas 3
Participantes 2