Suporte à Compensação de Transação e à Atividade de Negócios

Uma atividade de negócios é uma coleção de tarefas que são vinculadas para que apresentem um resultado em comum. Ao contrário de transações atômicas, atividades como enviar um e-mail podem ser difíceis ou impossíveis de serem retrocedidas atomicamente e, portanto, requerem um processo de compensação em caso de erro. A atividade de negócios do WebSphere Application Server suporta essa capacidade de compensação por meio de escopos de atividade de negócios.

Quando Utilizar o Suporte à Atividade de Negócios

Utilize o suporte à atividade de negócios quando você tiver um aplicativo que requeira compensação. Um aplicativo requererá compensação se suas operações não puderem ser atomicamente revertidas. Geralmente, esse cenário ocorre por um dos seguintes motivos:
  • O aplicativo utiliza vários recursos não XA (Extended-Architecture).
  • O aplicativo utiliza mais de uma transação atômica, por exemplo, enterprise beans que possuem Requer novo como a configuração para o campo Transação no descritor de implementação de transações do contêiner.
  • O aplicativo não é executado em uma transação global.
O diagrama a seguir mostra um aplicativo de serviço da Web simples que usa suporte à atividade de negócios. Os serviços Varejo, Armazém e Fabricação estão em execução em ambientes não WebSphere Application Server. O serviço Varejo chama o serviço Fornecedor, em execução no WebSphere Application Server, que delega tarefas aos serviços Armazém e Fabricação. A implementação do serviço Fornecedor contém um bean de sessão stateless, que chama outros beans de sessão stateless que estão associados aos serviços Armazém e Fabricação, e que executam trabalho que pode ser compensado. Esses outros beans de sessão possuem cada um manipulador de compensação; uma parte da lógica que está associada ao componente de aplicativo em tempo de execução, e executam atividades de compensação, como reenvio de e-mail.
Consulte texto descritivo.

Design do Aplicativo

Os contextos da atividade de negócios são propagados com mensagens de aplicativos e podem, portanto, ser distribuídos entre os componentes de aplicativos que não são colocados no mesmo servidor. Ao contrário dos contextos de transação atômica, os contextos da atividade de negócios são propagados em ambas as mensagens, de chamada-resposta síncronas (de bloqueio) e assíncronas unidirecional. Um componente de aplicativo executado em um escopo de atividade de negócios é responsável por assegurar que qualquer trabalho assíncrono iniciado esteja concluído antes da conclusão do próprio processamento do componente. Um aplicativo que inicia o trabalho assíncrono usando um padrão de mensagem fire-and-forget não deve usar escopos de atividade de negócios, porque tais aplicativos não têm meios de detectar se este processamento assíncrono foi concluído.

Apenas os enterprise beans que possuem transações gerenciadas por contêiner podem usar as funções de atividade de negócios. Enterprise beans que exploram escopos de atividade de negócios podem oferecer interfaces de serviço da Web, mas também interfaces Java™ local ou remota do enterprise bean. O contexto de atividade de negócios é propagado em mensagens do serviço da Web utilizando um elemento padrão, interoperável, o CoordinationContext do Services Business Activity (WS-BA) . O WebSphere Application Server também pode propagar o contexto da atividade de negócios em chamadas de RMI para enterprise beans quando serviços da Web não estão sendo usados, mas essa forma de contexto não é interoperável com ambientes não WebSphere Application Server. Talvez você queira utilizar esse cenário homogêneo se precisar de compensação para um aplicativo que for interno para seus negócios. Se desejar utilizar a compensação de atividade de negócios em um ambiente heterogêneo, exponha seus componentes de aplicativo como serviços da Web.

Contextos de atividade de negócios podem ser propagados em firewalls e fora do domínio do WebSphere Application Server. A topologia utilizada para chegar a essa propagação pode afetar a alta disponibilidade e o comportamento de afinidade da transação de atividade de negócios.

Desenvolvimento e Implementação de Aplicativo

O WebSphere Application Server fornece um modelo de programação para criar escopos de atividade de negócios e para associar manipuladores de compensação com esses escopos. O WebSphere Application Server também fornece uma interface de programação de aplicativos para especificar dados de compensação, além de verificar ou alterar o status de uma atividade de negócios. Para utilizar o suporte à atividade de negócios, é necessário configurar determinados descritores de implementação de aplicativos apropriadamente, fornecer uma classe de rotina de tratamento de compensação, se necessário, e ativar o suporte à atividade de negócios em qualquer servidor que executar o aplicativo.
Nota: Aplicativos só podem explorar o suporte à atividade de negócios se você implementá-los em um WebSphere Application Server da Versão 6.1 ou posterior. Os aplicativos não podem usar o suporte à atividade de negócios se você implementá-los em um cluster que inclua servidores WebSphere Application Server Versão 6.0.x.

Escopos de Atividade de Negócios

O escopo de uma atividade de negócios é aquele de uma unidade de trabalho WebSphere Application Server principal: uma transação global, uma sessão de atividade ou uma restrição de transação local (LTC). Um escopo de atividade de negócios não é uma nova unidade de trabalho (UOW); é um atributo de uma UOW principal existente. Portanto, existe uma relação de um para um entre um escopo de atividade de negócios e uma UOW.

Em uma implementação WS-BA, o UOW deve ser gerenciado por contêiner:
  • O UOW pode ser um enterprise bean CMT (transação gerenciada por contêiner) que cria uma transação global.
  • O UOW pode ser uma contenção de transação local (LTC) em que o contêiner é responsável por iniciar e finalizar transações locais de gerenciador de recursos (RMLTs). Isto é, nos atributos do descritor de implementação transacional, o Resolvedor do atributo de Transação Local deve ser definido como ContainerAtBoundary. Para utilizar WS-BA, você não deve definir o atributo de Resolvedor como Application.
Qualquer UOW principal pode ter um escopo de atividade de negócios associado a ela. Se um componente em execução em uma UOW que estiver associada a um escopo de atividade de negócios chamar outro componente, esse pedido propagará o escopo de atividade de negócios; qualquer trabalho feito pelo novo componente será associado ao mesmo escopo de atividade de negócios do componente de chamada. O componente chamado poderá criar uma nova UOW, por exemplo, se um enterprise bean tiver uma configuração de Requer novo para o campo Transação ou se for executado sob a mesma UOW que o componente de chamada. Se uma nova UOW for iniciada, um novo escopo de atividade de negócios será criado e associado à nova UOW. O escopo de atividade de negócios recém-criado é um filho do escopo de atividade de negócios associado à UOW de chamada. No diagrama a seguir, EJB1a em execução na UOW1 chama dois componentes: EJB1b que também é executado na UOW1 e EJB2 que cria uma nova UOW, UOW2. O enterprise bean EJB1b chama outro enterprise bean, EJB3, que cria outra nova UOW, UOW3. Como cada nova UOW é criada por um componente de chamada cuja UOW já possui uma associação com o escopo de atividade de negócios BAScope1, as UOWs recém-criadas são associadas a novos , BAScope2 e BAScope3.
Consulte o texto para descrição.

Os escopos de atividade de negócios internos devem ser concluídos antes dos escopos de atividade de negócios externos. Os escopos de atividade de negócios internos, por exemplo, BAScope2, possuem uma associação com o escopo de atividade de negócios externo, neste caso, BAScope1. Cada escopo de atividade de negócios será direcionado para o fechamento, se sua UOW associada for concluída com êxito, ou para a compensação, se sua UOW associada falhar. Se o BAScope2 for concluído com êxito, as rotinas de tratamento de compensação ativas que forem de propriedade do BAScope2 serão movidas para o BAScope1 e serão direcionadas da mesma maneira que a direção de conclusão de BAScope1: compensação ou fechamento. Se o BAScope2 falhar, as rotinas de tratamento de compensação ativas serão compensadas automaticamente e nada será movido para o BAScope1 externo. Quando um escopo de atividade de negócios interno falhar, como resultado da falha de sua UOW associada, será emitida uma exceção do servidor de aplicativos no componente de aplicativo de chamada, em execução na UOW externa.

Por exemplo, se a UOW interna falhar, ela poderá emitir uma exceção TransactionRolledBackException. Se o aplicativo de chamada puder manipular a exceção, por exemplo, tentando novamente o componente chamado ou chamando outro componente, a UOW de chamada e seu escopo de atividade de negócios associado, poderão ser concluídos com êxito, embora o escopo de atividade de negócios interno tenha falhado. Se o design do aplicativo requerer que a UOW de chamada falhe e que seu escopo de atividade de negócios associado seja compensado, o componente de aplicativo de chamada deverá fazer com que sua UOW falhe, por exemplo, permitindo que qualquer exceção do sistema da UOW que falhou seja manipulada por seu contêiner.

Quando o escopo de atividade de negócios externo for concluído, seu êxito ou falha determinará a direção da conclusão (fechamento ou compensação) de todos os manipuladores de compensação ativos de propriedade do escopo de atividade de negócios externo, incluindo aqueles promovidos pela conclusão bem-sucedida dos escopos de atividade de negócios internos. Se o escopo de atividade de negócios externo for concluído com êxito, ele direcionará todas as rotinas de tratamento de compensação ativas para o fechamento. Se o escopo de atividade de negócios externo falhar, ele direcionará todas as rotinas de tratamento de compensação ativas para a compensação.

Esse comportamento de compensação é resumido na tabela a seguir.
Tabela 1. Comportamento de Compensação para um Único Escopo de Atividade de Negócios. A tabela lista as possíveis combinações de sucesso e falha para os escopos de atividade de negócios interno e externo e o comportamento de compensação associado a cada combinação.
Escopo de atividade de negócios interno Escopo de atividade de negócios externo Comportamento de compensação
É bem-sucedido É bem-sucedido As rotinas de tratamento de compensação de propriedade do escopo de atividade de negócios interno aguardam a conclusão da UOW externa. Quando a UOW externa for bem-sucedida, o escopo de atividade de negócios externo direcionará todas as rotinas de tratamento de compensação para o fechamento.
Falha É bem-sucedido As rotinas de tratamento de compensação ativas de propriedade do escopo de atividade de negócios interno são compensadas. É emitida uma exceção na UOW externa; se essa exceção for capturada, quando a UOW externa for bem-sucedida, o escopo de atividade de negócios externo direcionará as outras rotinas de tratamento de compensação ativas para o fechamento.
Falha Falha As rotinas de tratamento de compensação ativas de propriedade do escopo de atividade de negócios interno são compensadas. É emitida uma exceção na UOW externa; se essa exceção não for capturada, o escopo de atividade de negócios externo falhará. Quando o escopo de atividade de negócios externo falhar, seja por causa da exceção não manipulada ou por algum outro motivo, as outras rotinas de tratamento de compensação ativas serão compensadas.
É bem-sucedido Falha As rotinas de tratamento de compensação de propriedade do escopo de atividade de negócios interno aguardam a conclusão da UOW externa. Quando a UOW externa falhar, o escopo de atividade de negócios externo direcionará todas as rotinas de tratamento de compensação para a compensação.

Quando uma UOW com um escopo de atividade de negócios associado for concluída, o escopo de atividade de negócios sempre será concluído na mesma direção que a UOW à qual ele estiver associado. A única maneira de influenciar a direção do escopo de atividade de negócios é influenciar a UOW à qual ele estiver associado, que pode ser feito utilizando o método setCompensateOnly da API da atividade de negócios.

Uma rotina de tratamento de compensação registrado em uma UOW transacional pode ser inativo inicialmente, dependendo do método chamado pela API de atividade de negócios. As rotinas de tratamento inativas nesta situação ficarão ativas quando a UOW na qual essa rotina de tratamento estiver declarada for concluída com êxito. Uma rotina de tratamento de compensação registrada fora de uma UOW transacional sempre fica ativa imediatamente. Para obter mais informações, consulte o tópico sobre a API da atividade de negócios.

Cada escopo de atividade de negócios no diagrama representa uma atividade de negócios. Por exemplo, a atividade de negócios externa em execução em BAScope1 pode ser um cenário de registro de feriado, com BAScope2 sendo uma atividade de registro de vôo e BAScope3 um registro de hotel. Se o registro de vôo ou do hotel falhar, o registro geral de feriado também falhará, por padrão. Como alternativa, se a reserva de voo falhar, talvez você queira que seu aplicativo tente reservar um voo usando outro componente que representa uma empresa aérea diferente. Se o registro geral de feriado falhar, o aplicativo poderá utilizar rotinas de tratamento de compensação para cancelar os vôos ou os hotéis já reservados com êxito.

Utilização dos Escopos de Atividade de Negócios por Componentes de Aplicativos

Por padrão, os componentes de aplicativos não utilizam escopos de atividade de negócios. Use as ferramentas do conjunto do WebSphere Application Server para especificar o uso do escopo de uma atividade de negócios e para identificar qualquer classe de manipulador de compensação para o componente:
Configuração padrão
Se um contexto de atividade de negócios estiver presente em um pedido recebido por um componente sem configuração de escopo de atividade de negócios, o contexto será armazenado pelo contêiner, mas nunca será utilizado durante o escopo do método do componente de destino. Um novo escopo de atividade de negócios não será criado. Se o componente de destino chamar outro componente, o contexto de atividade de negócios armazenado será propagado e poderá ser utilizado por outros componentes de compensação.
Executar métodos de enterprise beans em um escopo de atividade de negócios
Todo contexto de atividade de negócios presente no pedido que chega é recebido pelo contêiner e disponibilizado ao componente de destino. Se uma nova UOW for criada para o método de destino, por exemplo, porque o método de enterprise bean possui uma configuração de Requer novo para o campo Transação, o escopo de atividade de negócios recebido se tornará um escopo de atividade de negócios externo para uma atividade de negócios recém-criada. Se a UOW for propagada a partir do componente de chamada e utilizada pelo método, o escopo de atividade de negócios recebido será utilizado pelo método. Se um escopo de atividade de negócios não existir na chamada, um novo escopo de atividade de negócios será criado e utilizado pelo método.
Para criar um escopo de atividade de negócios quando um enterprise bean for chamado, você deverá configurar o enterprise bean para executar os métodos de enterprise bean em um escopo de atividade de negócios. Você também deverá configurar os descritores de implementação do método que está sendo chamado para especificar a criação de uma nova UOW na chamada. Para obter detalhes, consulte o tópico sobre a criação de um aplicativo que usa o suporte WS-BA.

Ícone que indica o tipo de tópico Tópico de Conceito



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjta_wsbascope
Nome do arquivo: cjta_wsbascope.html