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
- 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.

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.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.
- 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.

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.
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
- 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.