• Nenhum resultado encontrado

H´a situa¸c˜oes onde o modelo tradicional de transa¸c˜oes atˆomicas n˜ao ´e adequado. ´E o caso, por exemplo, das transa¸c˜oes de longa dura¸c˜ao (cuja execu¸c˜ao pode levar horas, dias ou at´e sem- anas). Para esse tipo de transa¸c˜ao, muitas vezes ´e invi´avel manter travas (locks) sobre os recursos transacionais durante toda a execu¸c˜ao da transa¸c˜ao. Al´em disso, quando uma transa¸c˜ao de longa dura¸c˜ao ´e abortada, muito trabalho pode ser desfeito.

Outro cen´ario no qual o modelo tradicional de transa¸c˜oes atˆomicas n˜ao ´e adequado ´e o das intera¸c˜oes neg´ocio-a-neg´ocio. Nesse tipo de intera¸c˜ao os recursos transacionais est˜ao espalhados por v´arias empresas, e portanto a obten¸c˜ao de travas sobre recursos alheios pode ser (e geralmente ´e) invi´avel. Muito raramente uma empresa permitir´a que outra empresa coloque travas sobre seus seus recursos, seja por raz˜oes t´ecnicas (seguran¸ca, por exemplo) ou n˜ao t´ecnicas (viola¸c˜ao de normas da empresa, por exemplo).

Para evitar os problemas enfrentados por transa¸c˜oes atˆomicas nos cen´arios acima descritos, WS-BusinessActivity define um modelo transacional menos restritivo. Nesse modelo, as opera¸c˜oes de uma transa¸c˜ao s˜ao executadas e tornam-se dur´aveis imediatamente. Caso ocorra alguma falha durante a execu¸c˜ao da transa¸c˜ao, opera¸c˜oes de compensa¸c˜ao s˜ao acionadas para “compensar” a falha. Isso evita que todo o trabalho executado por uma transa¸c˜ao de longa dura¸c˜ao tenha que ser desfeito devido a ocorrˆencia de uma falha.

4 O projeto

O objetivo do nosso projeto ´e desenvolver um servi¸co de transa¸c˜oes atˆomicas para Web services que seja compat´ıvel com as especifica¸c˜oes WS-Coordination e WS-AtomicTransaction. Esse servi¸co ser´a integrado ao servidor de aplica¸c˜oes JBoss, estendendo a funcionalidade do seu gerenciador de transa¸c˜oes. A decis˜ao de utilizar o JBoss como ponto de partida para o nosso trabalho foi motivada pelas seguintes raz˜oes:

• Trata-se de um servidor de aplica¸c˜oes de c´odigo aberto.

• J´a possu´ıamos uma certa experiˆencia com esse servidor de aplica¸c˜oes, o que facilitaria o processo de desenvolvimento.

• O gerenciador de transa¸c˜oes do JBoss oferece uma infra-estrutura bastante favor´avel ao de- senvolvimento do nosso trabalho.

• O gerenciador de transa¸c˜oes do JBoss n˜ao oferece suporte a transa¸c˜oes atˆomicas distribu´ıdas envolvendo Web services. A adi¸c˜ao desse recurso seria desej´avel e constituiria um consider´avel ganho de funcionalidade.

4.1 O gerenciador de transa¸c˜oes distribu´ıdas do JBoss

Como nosso trabalho ser´a uma extens˜ao do gerenciador de transa¸c˜oes distribu´ıdas do JBoss (Distributed Transaction Manager, ou DTM), ´e conveniente apresent´a-lo antes de fornecermos maiores detalhes sobre o nosso projeto.

O DTM oferece suporte a transa¸c˜oes distribu´ıdas envolvendo m´ultiplos servidores de aplica¸c˜oes e m´ultiplos gerenciadores de recursos (resource managers)12

. Atualmente ele ´e capaz de coordenar transa¸c˜oes que envolvem dois tipos de recursos transacionais:

• Recursos XA: s˜ao recursos transacionais (banco de dados, filas de mensagens, etc.) diretamente acess´ıveis ao DTM via adaptadores JCA [39] com suporte a XA [46], como por exemplo drivers JDBC [22] e provedores JMS [37]. O DTM interage com esses recursos atrav´es da API XA. • Recursos remotos: s˜ao recursos acess´ıveis ao DTM atrav´es de algum mecanismo de chamada

remota (por exemplo, CORBA/IIOP). Esses recursos geralmente est˜ao localizados em outras instˆancias de servidores de aplica¸c˜oes.

12

Um gerenciador de recurso permite que uma aplica¸c˜ao tenha acesso a um recurso transacional. Ele participa de uma transa¸c˜ao distribu´ıda implementando uma interface que representa tal recurso. O gerenciador de transa¸c˜oes utiliza tal interface para se comunicar com o recurso.

Portanto, o DTM ´e capaz de atuar como coordenador e conduzir a execu¸c˜ao do protocolo 2PC em transa¸c˜oes distribu´ıdas que envolvem esses dois tipos de recursos. Em particular, no caso dos recursos remotos, o DTM provˆe suporte a dois mecanismos de chamada remota:

• CORBA/IIOP: as chamadas aos recursos remotos s˜ao feitas utilizando o protocolo IIOP. • JBoss Remoting: as chamadas aos recursos remotos s˜ao feitas atrav´es do JBoss Remoting [20],

um arcabou¸co para chamadas remotas espec´ıfico do JBoss.

Ou seja, na realidade o DTM comporta transa¸c˜oes distribu´ıdas envolvendo trˆes tipos de recursos: recursos XA, recursos remotos acess´ıveis via CORBA e recursos remotos acess´ıveis via JBoss Remoting (figura 17).

Figura 17: Os trˆes tipos de recursos transacionais comportados pelo DTM.

A propaga¸c˜ao do contexto transacional ´e feita automaticamente pelo DTM para todas as requisi¸c˜oes CORBA/IIOP ou JBoss Remoting que ocorrem dentro do escopo de uma transa¸c˜ao (figura 17). No caso de uma requisi¸c˜ao CORBA/IIOP, o contexto transacional ´e propagado no formato definido pela especifica¸c˜ao OTS. J´a no caso de uma requisi¸c˜ao via JBoss Remoting, o contexto transacional ´e propagado num formato espec´ıfico do JBoss.

Durante a execu¸c˜ao do protocolo 2PC, o DTM interage com os recursos remotos acess´ıveis via CORBA atrav´es de interfaces definidas pela especifica¸c˜ao OTS. No caso dos recursos remo-

tos acess´ıveis via JBoss Remoting, a intera¸c˜ao com o DTM ocorre atrav´es de interfaces que s˜ao espec´ıficas do JBoss e foram definidas tendo como base as interfaces do OTS (figura 17).

´

E importante ressaltar que o DTM oferece suporte a recupera¸c˜ao de falhas. Para possibilitar a recupera¸c˜ao nos casos de falhas, o DTM faz o uso de um log, onde ele grava as ocorrˆencias dos eventos relevantes do 2PC. As informa¸c˜oes em tal log s˜ao utilizadas pelo procedimento de recupera¸c˜ao, que ´e executado ap´os uma falha ou queda do participante.

Documentos relacionados