É possível usar o protocolo de transporte JMS (Java™ Message Service) como uma alternativa para
transmitir as mensagens SOAP entre clientes e servidores através de SOAP sobre HTTP.
Sobre Esta Tarefa
Este produto oferece suporte a um SOAP padrão de mercado emergente sobre o protocolo JMS.
A especificação SOAP
sobre JMS fornece um conjunto padrão de diretrizes de interoperabilidade para utilizar um transporte compatível com JMS com mensagens SOAP para permitir a interoperabilidade entre as implementações de diferentes fornecedores. Usando esse padrão, uma mistura de componentes clientes e componentes do servidor de diferentes fornecedores pode interoperar ao trocar solicitações SOAP e mensagens de resposta no transporte JMS para o Java API for XML Web Services (JAX-WS) e os serviços
da Web do Java API for XML-based RPC (JAX-RPC). Ao usar o transporte JMS, os clientes e servidores de serviço da Web baseados em beans corporativos
podem se comunicar por meio de filas e tópicos JMS em vez de por meio
de conexões HTTP.
Recurso Reprovado: Em versões anteriores do servidor de aplicativos, um protocolo SOAP sobre JMS do proprietário IBM® era suportado para aplicativos JAX-RPC (Java API for XML-based RPC). No
WebSphere Application
Server 7.0, esse protocolo proprietário SOAP sobre JMS agora está reprovado em favor de
um protocolo emergente SOAP sobre JMS padrão de mercado. É possível usar o protocolo SOAP sobre JMS de propriedade IBM com seu Java API for XML Web Services (JAX-WS) ou os serviços da Web JAX-RPC; entretanto, aproveite o protocolo SOAP sobre JMS padrão emergente. Se seu aplicativo padrão chamar serviços da Web baseados em Enterprise Beans que são suportados por uma versão anterior do WebSphere Application Server, será necessário continuar a usar o protocolo SOAP sobre JMS de propriedade IBM para acessar esses serviços da Web. depfeat
Os benefícios de usar JMS incluem:
- O transporte do sistema de mensagens confiável para comunicar mensagens de pedido e resposta.
- Pedidos flexíveis de via única a clientes e servidores. Por exemplo, o servidor não tem que estar ativo quando o cliente envia o
pedido de sentido único. Pedidos simultâneos de via única podem ser enviados a vários servidores através
da utilização de um tópico.
- Pedidos Síncronos de duas vias são suportados para aJava API for XML-Based Web Services (JAX-WS)
e para clientes de Java API for XML-based RPC (JAX-RPC).
- Os pedidos assíncronos são suportados para clientes JAX-WS.
A especificação SOAP sobre JMS define uma sintaxe URI de terminal JMS
para especificar os destinos JMS.
Uma URL de terminal JMS é usada para acessar serviços da Web JAX-WS ou JAX-RPC com o transporte JMS. Essa URL especifica o destino JMS e a conexão fábrica, assim como o nome do componente de porta para o pedido de serviço da Web. Esse URL de nó de extremidade é semelhante à URL de nó de extremidade HTTP, que especifica o host e a porta, assim como a raiz de contexto e o nome do componente da porta.
- Desenvolva o enterprise bean que você pretende utilizar como
bean de implementação do serviço.
- Para aplicativos JAX-WS, inclua a anotação @BindingType na classe de implementação do terminal e especifique o ID da ligação SOAP sobre JMS para o terminal. Por exemplo:
@WebService
@BindingType("http://www.w3.org/2010/soapjms/")
public class MyServiceBeanImpl {
...
}
A anotação @BindingType é usada para indicar o protocolo (SOAP) e o transporte (JMS) a serem usados ao enviar mensagens de solicitação e de resposta para o terminal.
- Monte os enterprise beans.
- Monte um
arquivo JAR que está ativado para serviços da Web a partir de um
enterprise bean. É possível montar os artefatos que são necessários para ativar o módulos dos enterprise beans para serviços da Web em um arquivo Java archive (JAR).
- Monte um
arquivo JAR de enterprise bean ativado para serviços da Web em
um arquivo enterprise archive (EAR). É possível montar os artefatos necessários para ativar o
arquivos JAR ativado para serviços da Web em um arquivo EAR.
- Ative os terminais baseados em enterprise beans, utilizando o comando endptEnabler. Use a opção -transport jms para pedir que o comando endptEnabler crie um listener message-driven bean (MDB) para cada arquivo JAR Enterprise JavaBeans (EJB) que contenha beans de implementação de serviços da Web. Esse bean acionado por mensagens serve como um listener para pedidos
que estão associados com os terminais de serviço da Web contidos no
arquivo JAR EJB
- Decida sobre os nomes e os tipos dos objetos JMS utilizados por seu aplicativo.
Antes de instalar seu aplicativo,
você precisa:
- Decida se seu serviço da Web recebe pedidos de uma fila ou de um
tópico.
- Decida se é necessário utilizar um destino seguro ou um destino não seguro.
- Decida os nomes para as suas filas e tópicos, o connection factory e a especificação de ativação.
Utilize as seguintes diretrizes para decidir os tipos e os nomes do objeto JMS. Em
situações normais, você pode usar uma fila para receber pedidos de
serviços da Web.
- Fila
- Uma fila recebe todos os tipos de pedidos. Os pedidos válidos incluem
unidirecionais, bidirecionais e síncronos. A solicitação
assíncrona é válida somente com serviços da Web JAX-WS.
- Uma fila é utilizada somente por um único arquivo EJB JAR
para receber os pedidos de terminais de serviço da Web contidos com
esse arquivo EJB JAR.
- Tópico
- Um tópico é utilizado para receber apenas os pedidos unidirecionais.
- É possível compartilhar um tópico entre vários arquivos JAR EJB. Cada mensagem
de pedido que é enviada para um tópico é processada por cada um dos listeners
MDB configurados para atender nesse tópico. Isso significa que cada mensagem de
pedido é processada por cada arquivo JAR EJB associado a esse tópico específico.
O exemplo a seguir descreve uma configuração típica para um único
arquivo EJB JAR que contém terminais de serviços da Web:
- Suponha que o arquivo JAR EJB seja StockQuoteEJB.jar e contém um ou mais terminais de serviços da Web relacionados ao serviço StockQuote.
- Você tem uma única fila, StockQuote_Q, com o nome JNDI, jms/StockQuote_Q,
que é utilizada para receber pedidos.
- Você possui uma connection factory, StockQuote_CF, com nome JNDI, jms/StockQuote_CF,
que pode ser utilizada pelos clientes para se conectarem ao provedor JMS.
- Você também possui uma connection factory, StockQuote_ReplyCF, com nome JNDI,
jms/StockQuote_ReplyCF, que é utilizada pelo listener MDB para o
arquivo EJB JAR para conectar-se ao provedor JMS durante o envio de mensagens de
resposta.
- Você tem uma especificação de ativação, StockQuote_AS, com nome JNDI,
jms/StockQuote_AS, que é usada para associar o listener MDB do
StockQuoteEJB.jar com a fila denominada StockQuote_Q.
- Defina os objetos administrados
JMS.
Depois de decidir sobre os nomes e tipos dos
objetos JMS, utilize o console administrativo ou a ferramenta de script wsadmin para definir os objetos JMS. Há
várias maneiras de administrar recursos JMS, dependendo de que tipo de provedor JMS está sendo utilizado. Leia sobre a escolha de
um provedor do sistema de mensagens para aprender mais sobre a administração dos recursos JMS.
- Implemente o aplicativo de serviços da Web.
Durante o processo de instalação você é avisado sobre dois
tipos de informações para cada arquivo JAR de enterprise
bean que está ativado para servidos da Web e que está contido em seu
arquivo EAR:
- O nome JNDI do Connection Factory que é utilizado pelo listener MDB a ser
utilizado para enviar mensagens de resposta.
Se seu serviço da
Web contém operações de duas vias, o listener MDB que está
definido pelo comando endptEnabler precisa acessar
um factory de conexão da fila para incluir uma mensagem de resposta à
fila de resposta. O listener MDB utiliza uma referência de ambiente de recurso
de java:comp/env/jms/WebServicesReplyQCF.
Portanto, durante o processo de instalação do aplicativo, você
deve fornecer o nome JNDI real do connection factory para o listener
MDB utilizar para esse serviço da Web. Utilizando o exemplo anterior, o nome JNDI
é jms/StockQuote_ReplyCF.
- O nome da especificação de ativação para o listener
MDB utilizar.
Uma especificação de ativação é um objeto utilizado para associar um
Connection Factory JMS a um destino JMS (fila ou tópico). Quando implementado,
um MDB é configurado com a especificação de ativação correta de modo que as
mensagens da fila ou do tópico sejam corretamente entregues ao MDB. Durante a
implementação, você pode modificar o nome da especificação de ativação
associada a cada listener MDB.
O nome da especificação de ativação contido no
arquivo EAR de entrada é exibido como um valor padrão. Se você especificar o
nome de especificação de ativação correto para o comando
endptEnabler, poderá aceitar o valor padrão. Caso contrário, digite o nome da especificação de ativação correto.
- Decida se deseja usar o novo protocolo SOAP sobre JMS padrão de mercado
ou o protocolo SOAP/JMS proprietário da IBM.
Boas Práticas: Esta é uma boa prática para utilizar o protocolo
SOAP/JMS padrão de mercado. O protocolo SOAP/JMS proprietário da IBM foi
reprovado com este release. No entanto, se seu aplicativo precisar interoperar com versões anteriores
do produto, utilize o protocolo proprietário.
bprac
- (Opcional) Configure
as informações da URL do terminal para ligações JMS.
Utilize o console administrativo para configurar um prefixo de URL de terminal
JMS que você possa associar a cada módulo JAR EJB em seu aplicativo.
O publicador WSDL
utiliza essa cadeia de URL parcial para produzir a URL JMS real para cada componente
de porta definido no arquivo JAR de enterprise bean. Os clientes
que precisam chamar o serviço da Web podem usar o arquivo WSDL
publicado.
Execute essa etapa somente se estiver publicando o arquivo WSDL para seu aplicativo.
- (Opcional) Publique o arquivo WSDL para seu aplicativo.
A publicação do arquivo WSDL produz documentos WSDL que você pode utilizar para desenvolver seus aplicativos clientes. O processo de publicação produz as URLs de local de terminal resolvidas completamente dentro dos arquivos WSDL.
Execute essa etapa somente se os arquivos WSDL publicados forem necessários para desenvolver seus aplicativos clientes.
O que Fazer Depois
Desenvolva um cliente de serviços da Web.