Suporte ao Web Services Business Activity no Servidor de Aplicativos
Com suporte a Web Services Business Activity (WS-BA) no servidor de aplicativos, os serviços da Web em diferentes sistemas podem coordenar atividades que são acopladas mais livremente do que transações atômicas. Estas atividades podem ser difíceis ou impossíveis de reverter atomicamente e exigem portanto um processo de compensação, caso ocorra um erro.
- O WS-BA é um tipo de coordenação específico que define protocolos para atividades de negócios. As especificações são:
- Web Services Coordination (WS-COOR) especifica CoordinationContext e um serviço de Registro com os quais os serviços da Web participantes podem se inscrever para fazer parte dos protocolos que são oferecidos por tipos de coordenação específicos. As especificações são:
- Web Services Coordination Versão 1.0
- Web Services Coordination Versão 1.1
- Web Services Coordination Versão 1.2
Além de suportar o protocolo de interoperabilidade do WS-BA, o servidor de aplicativos fornece uma interface de programação para criar atividades de negócios e manipuladores de compensação. Com esta interface de programação, é possível especificar dados de compensação e verificar ou alterar o status de uma atividade de negócios.
Também é possível usar este recurso de compensação com aplicativos que não são serviços da Web, contanto que estes aplicativos envolvam a comunicação apenas entre WebSphere Application Servers. Consulte os tópicos relacionados para obter informações adicionais.
É possível configurar as políticas para o protocolo WS-BusinessActivity. Pode configurar se um cliente propaga e um servidor recebe um contexto de WS-BA. Para garantir que um cliente sempre envie contexto de WS-BusinessActivity quando cria um pedido de serviço de saída, você deve associar um conjunto de políticas com o cliente, em que o conjunto de políticas deve incluir o tipo de política WS-Transaction e este tipo de política deve ter uma configuração WS-BusinessActivity Obrigatória. Ou então, se você souber que o cliente sempre chama terminais remotos que incluem o atributo do tipo de política WS-BusinessActivity BAAtomicOutcomeAssertion, poderá configurar o cliente para aplicar a configuração WS-Policy do provedor de modo que o cliente adote a política obrigatória do provedor automaticamente.
Para garantir que quaisquer solicitações recebidas pelo provedor de serviço da Web incluam um contexto WS-BusinessActivity, você deve associar um conjunto de políticas ao provedor, em que o conjunto de políticas deve incluir o tipo de política WS-Transaction e este tipo de política deve ter uma configuração WS-BusinessActivity igual a Obrigatória.
Para garantir que um cliente ou provedor nunca utilize contexto de WS-BusinessActivity, você deve associar um conjunto de políticas com o cliente ou provedor, em que o conjunto de políticas inclua o tipo de política WS-Transaction e este tipo de política deva ter uma configuração WS-BusinessActivity igual a Nunca. É possível usar esta configuração para ambientes nos quais não quer que solicitações de serviço da Web criem um forte acoplamento entre um cliente e um provedor, por exemplo, quando há solicitações entre empresas.
Se nenhum conjunto de políticas estiver associado a um cliente ou provedor, ou o tipo de política WS-Transaction não estiver incluído no conjunto de políticas, o comportamento padrão de WS-Transaction será utilizado.
Desenvolvimento de Aplicativo
Nenhuma tarefa de desenvolvimento específica é necessária para que aplicativos de serviço da Web sejam beneficiados por WS-BA.
Para aplicativos JAX-RPC, qualquer componente Enterprise JavaBeans (EJB) que é configurado para ser executado sob um escopo BusinessActivity propaga este escopo automaticamente ao fazer uma solicitação de serviço da Web JAX-RPC de saída. O tempo de execução do JAX-RPC suporta o WS-BA 1.0.
Para aplicativos JAX-WS, ative o suporte WS-BA criando um conjunto de políticas, incluindo o tipo de política WS-Transaction no conjunto de políticas, configurando opcionalmente o tipo de política e anexando o conjunto de políticas ao aplicativo ou cliente que será envolvido na comunicação WS-BA. O tempo de execução JAX-WS suporta asserção WS-BA 1.0, WS-BA 1.1, WS-BA 1.2 e WS-Policy para WS-BA.
Quando o tempo de execução JAX-WS recebe uma solicitação de entrada, os níveis de especificação WS-Transaction 1.0, WS-Transaction 1.1 e WS-Transaction 1.2 são suportados. Quando um pedido do JAX-WS de saída é enviado, somente um nível de especificação pode ser utilizado. Se as asserções WS-Transaction WS-Policy estiverem disponíveis, tanto do Web Services Description Language (WSDL) do serviço da Web de destino, quanto do tipo de política do WS-Transaction do cliente, o nível de especificação aplicável ao cliente e o serviço da Web de destino são usados. Por exemplo, se o ambiente de hosting do serviço da Web de destino suportar apenas WS-Transaction 1.0, WS-BA 1.0 será usado. Se os dois níveis de especificação forem aplicáveis, ou se nenhuma asserção WS-Transaction WS-Policy estiver disponível, o nível de especificação WS-Transaction padrão definido nas configurações do serviço de Transação será utilizado.
- Se um cliente não considerar a política do provedor, o cliente não enviará nenhum contexto de WS-AT (Web Service Atomic Transaction) ou de WS-BA. Esse comportamento é equivalente a uma definição de configuração de política do WS-Transaction como Nunca.
- Se um cliente considerar a política do provedor, o cliente enviará o contexto de WS-AT ou de WS-BA se a política do provedor incluir asserções de WS-AT ou de WS-BA. Este comportamento é equivalente a uma definição de configuração de política WS-Transaction igual a Suporta.
- Um servidor não recebe nenhum contexto de WS-AT ou de WS-BA. Esse comportamento é equivalente a uma definição de configuração de política do WS-Transaction como Nunca.
Asserções de Política do WS-Transaction
Se você configurar as políticas para o protocolo WS-BusinessActivity para um provedor, isso afetará as asserções incluídas em qualquer WSDL gerado para o serviço da Web com o qual o tipo de política está associado. A asserção de WS-Policy que é utilizada para descrever os requisitos de compensação de um cliente ou provedor que utiliza WS-BusinessActivity é BAAtomicOutcomeAssertion. Se o tipo de política WS-Transaction tiver uma definição de WS-BusinessActivity igual a Obrigatório ou Suporta, uma asserção de política será incluída no WSDL.
O servidor de aplicativos também pode analisar, compreender e aplicar essas asserções que estão no WSDL que ele analisa.
O exemplo a seguir mostra o WSDL em que o WS-BusinessActivity BAAtomicOutcomeAssertion indica que um terminal deve ser chamado com o contexto de WS-BA incluído na mensagem de pedido e que o contexto pode estar no formato do WS-Transaction 1.0 ou 1.1. Há dois espaços de nomes e duas asserções: uma para cada nível de especificação do WS-Transaction, que usa o operador WS-Policy ExactlyOne para mostrar que o cliente deve escolher qual nível de especificação será usado.
<wsdl:definitions targetNamespace="bank.example.com"
xmlns:tns="bank.example.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsat11="http://docs.oasis-open.org/ws-tx/wsba/2006/06"
xmlns:wsat10="http://schemas.xmlsoap.org/ws/2004/10/wsba"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:Policy wsu:Id="BAPolicy">
<wsp:ExactlyOne>
<wsat11:BAAtomicOutcomeAssertion />
<wsat10:BAAtomicOutcomeAssertion />
<!-- omitted assertions -->
</wsp:ExactlyOne />
</wsp:Policy>
<!-- omitted elements -->
<wsdl:binding name="BankBinding" type="tns:BankPortType">
<!-- omitted elements -->
<wsdl:operation name="TransferFunds">
<wsp:PolicyReference URI="#BAPolicy" wsdl:required="true"/>
<!-- omitted elements -->
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>