Bom, como já disse, não gosto muito de chamar de “legadas” as aplicações que serão ativadas pelo BUS em um arquitetura SOA. A não ser é claro, que realmente façam jus a este nome. O que não gosto é de construir uma nova aplicação que conterá realmente a lógica de negócio do zero, e ainda chamá-la de legada, e olha que isso é mais comum do que pensamos.
Enfim, a nossa grande aplicação que será ativada pelo BUS via JMS, seguindo o desenho deste post se chamará “ReverseIt”, e conterá uma lógica nuclear de inverter a string que receberá como parâmetro. Não vou entrar em detalhes dos detalhes da criação do projeto na IDE, mas basicamente será um “Web Service Project” com o facet do XMLBeans Builder Library, para que ele converta nosso XSD em objetos java facilmente. A aplicação está rodando em um domÃnio Weblogic Server puro, em localhost:30000.
Vamos definir um schema XSD (dentro da pasta schemas) que contenha a operação de request e de response para a operação. Obviamente como temos um parâmetro string para entrada e outro para saÃda, ficaria algo bem trivial, basicamente o escrito abaixo:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"Â
     targetNamespace="http://blog.lucastex.com/reverseit"Â
     xmlns:revit="http://blog.lucastex.com/reverseit"Â
     elementFormDefault="qualified">
   <element name="reverseItRequest" type="revit:ReverseItRequest"></element>
   <element name="reverseItResponse" type="revit:ReverseItResponse"></element>
   (...) definição e descrição dos tipos (...)
</schema>
Agora vamos:
- Criar um web service como de costume
- Configurar entrada do serviço para ReverseItRequest
- Configurar saÃda do serviço para ReverItResponse
- Escrever a lógica para inversão da palavra
Â
public ReverseItResponseDocument reverseIt(ReverseItRequestDocument request) {
  Â
   (...) 1- Pegar input do request
   (...) 2- Inverter a string
   (...) 3- Retornar no responseÂ
}
Legal, mas até aà temos o nosso Web Service tão padrão quanto todos que já fizemos, vamos agora para as anotações, que vão garantir que o serviço trabalhe de forma assÃncrona. Bom, como ele funcionará via JMS, uma coisa que temos que fazer é criar uma fila JMS onde serão colocadas as mensagens que este serviço irá consumir, e também uma fila de resposta, para que ele coloque as mensagens de response. Não podemos esquecer também da ConnectionFactory o nosso serviço. Estes foram os nomes que eu dei:
- Fila de Request: reversit.jms.requestQueue
- Fila de Response: reverseit.jms.responseQueue
- ConnectionFactory: reversit.jms.connectionFactory
Não vou entrar em detalhes da criação dos mesmos, não é este o foco da explicação.
Agora, vamos anotar nosso serviço para os resources criados.
@WLJmsTransport(serviceUri="ReverseIt",
portName="ReverseItPort",
connectionFactory="reverseit.jms.connectionFactory",Â
queue="reverseit.jms.requestQueue",Â
contextPath = "ReverseIt")
Nesta anotação WLJmsTransport, nós definimos o serviceURI e contextPath do serviço para que ele possa ser encontrado, também colocamos o connectionFactory e a queue de onde ele receberá as requisições, e também o nome do port que será criado no WSDL para este transporte.Â
Prontinho, nosso serviço está funcionando de maneira JMS. Uma ponto muito (muito mesmo) legal e interessante, é que poderÃamos expor este MESMO serviço via HTTP, apenas adicionando a anotação @WLHttpTransport com suas propriedades, e terÃamos 2 ports diferentes na definição do WSDL.
Amanhã acho que consigo fazer a parte do Service BUS chamando ele, e transformando um request do terceiro (HTTP) para este nosso request (JMS). É nessa parte que tem o “pulo do gato” do produto.
Vamos deixar para testar assim que fizermos este passo.
Até,