BPEL,  OSB

Trabalhando com Mensagens JMS no OSB – Parte 3: Recebendo a Mensagem

Vamos neste Post receber a imagem da Fila JMS que enviamos conforme Post anterior e gravá-la em nosso Banco de Dados XE.

Consulte os Links abaixo para verificar as demais partes:

A primeira coisa a fazer será criarmos um BPEL simples para fazer um Insert ou Update, neste paso não irei detalhar como criarmos esse BPEL porque este não é o foco deste Post.

Para meus testes estou utilizando o banco de dados do Oracle XE e usando a tabela Departamento que terá os campos (DEPTNO, NAME E LOCATION), veja abaixo que já temos alguns campos.

Imagem Blog UansCarvalho

Veja apenas alguns detalhes simples do meu processo BPEL.

Ao criar o BPEL marquei a opção Expose as a SOAP service para não ter a necessidade de criar um WSDL e dei o nome de RecebeFilaBPELProcess

Imagem Blog UansCarvalho

No DBAdapter deixei marcado a opção Insert or Update apenas para casos em que precisemos realizar um Update, mas fica a sua escolha colocar somente Insert Only

Imagem Blog UansCarvalho

O BPEL então ficou assim:

Imagem Blog UansCarvalho

Abaixo fique atento no XSD que foi criado automaticamente, pois no element name=”process” coloquei os elementos numeroDepartamento, nomeDepartamento e localDepartamento que será os dados a serem inseridos pelo nosso BPEL e recebidos de nossa Fila JMS

Imagem Blog UansCarvalho

Veja acima que foi criado apenas um BPEL simples onde alterei nosso input para receber os parametros de nossa Fila

Agora vamos ao nosso OSB e a primeira coisa a fazer será expor este serviço.

Como também expor o serviço não é o foco vamos pular esta parte e caso você tenha alguma duvida de como expor um serviço verifique meu Post Expondo um Serviço no Oracle Service Bus (OSB)

Veja abaixo apenas as estruturas, lembrando que para nosso Business não foi preciso alterar nada ao expor.

Imagem Blog UansCarvalho

Veja que nosso Business é baseado no WSDL normalmente.

Imagem Blog UansCarvalho

E esta apontando para nosso BPEL

Imagem Blog UansCarvalho

Vou agora detalhar a criação do Proxy que será o mais importante neste momento.

Crie um Proxy com o nome RecebeFilaProxyService e na guia General marque a opção Messaging Service

Imagem Blog UansCarvalho

Abaixo na guia Messaging escolha a opção XML e aponte para o nosso XSD DadosDepartamento.xsd que é o mesmo XSD que criamos no passo anterior

Isso é necessário para termos certeza que enviaremos e receberemos o mesmo payload sem necessidade de alterações subsequentes.

Imagem Blog UansCarvalho

Na guia Transport, escolha a opção de Protocol JMS e coloque em Endpoint URI conforme abaixo que são as configurações que criamos no Passo 1

Imagem Blog UansCarvalho

Na guia JMS Transport em Destination Type escolha a opção Queue

Imagem Blog UansCarvalho

Na guia Message Flow,  arraste um Route para a abaixo do RecebeFilaProxyService, dentro do Route arraste um Routing e dentro do Routing e abaixo do Request Action arraste um Replace para que fique conforme abaixo:

Imagem Blog UansCarvalho

Clique sobre o nome Routing e conforme abaixo selecione nosso Business (RecebeFilaBusiness.biz) e em Involking selecione a opção process

Imagem Blog UansCarvalho

Agora clique sobre o Replace e na guia Properties coloque conforme abaixo:

  • XPath: Coloque um ponto .
  • In Variable: Escreva a palavra body
  • Replace node contents (escolha esta opção)
  • Expression: Coloque o payload abaixo:

Obs: Fique atento a namespace abaixo onde:

rec: que no meu payload é http://xmlns.oracle.com/UansBlogApplication/InsereFila/RecebeFilaBPELProcess

br: que no meu payload é br.com.uansblog.BlogJmsPublishQueuePublisher

Caso a sua namespace seja diferente acrescente-a conforme abaixo:

Imagem Blog UansCarvalho

<rec:process xmlns:rec=”http://xmlns.oracle.com/UansBlogApplication/InsereFila/RecebeFilaBPELProcess”>
<rec:numeroDepartamento>{data($body/br:dadosDepartamentoRequest/br:numeroDepartamento)}</rec:numeroDepartamento>
<rec:nomeDepartamento>{data($body/br:dadosDepartamentoRequest/br:nomeDepartamento)}</rec:nomeDepartamento>
<rec:localDepartamento>{data($body/br:dadosDepartamentoRequest/br:localDepartamento)}</rec:localDepartamento>
</rec:process>

Imagem Blog UansCarvalho

Obs: Este é o payload de request do nosso Business RecebeFilaBusiness.biz

Imagem Blog UansCarvalho

Então deverá ficar assim:

Imagem Blog UansCarvalho

Pronto… Faça o Publish do projeto e vamos testar.

Para realizar o procedimento agora é facil, toda vez que você enviar uma mensagem para a fila, ele será gravado automaticamente em nosso banco de dados, vou lhe mostrar um exemplo:

A parte abaixo já foi realizada no Passo 2, mas caso você não tenha feito vamos fazer novamente para que você entenda o processo, caso você já tenha feito e existia uma mensagem na sua Fila, provavelmente esta mensagem já foi consumida e gravada em seu Banco de dados.

No seu Browser vá no endereço http://localhost:9000/sbconsole

Obs: A porta 9000 é o numero que escolhi ao criar o meu Domínio do OSB

Faça o Login:

Imagem Blog UansCarvalho

Clique em Resource Browser e ao lado direito deverá aparecer o nosso Proxy BlogJmsPublishQueueProxy

Imagem Blog UansCarvalho

Ao lado direito na guia Actions clique no ícone que parece uma “baratinha verde“: e preencha conforme abaixo:

<br:dadosDepartamentoRequest xmlns:br=”br.com.uansblog.BlogJmsPublishQueuePublisher”>
<br:numeroDepartamento>50</br:numeroDepartamento>
<br:nomeDepartamento>SISTEMAS</br:nomeDepartamento>
<br:localDepartamento>BRASIL</br:localDepartamento>
</br:dadosDepartamentoRequest>

Imagem Blog UansCarvalho

Clique em Execute e veja abaixo como deverá aparecer:

Imagem Blog UansCarvalho

Pronto, nossa mensagem foi enviada…

No seu Browser vá no endereço http://localhost:9000/console

Obs: A porta 9000 é o numero que escolhi ao criar o meu Domínio do OSB

Faça o Login:

Imagem Blog UansCarvalho

Na tela abaixo clique em JMS Modules conforme abaixo:

Imagem Blog UansCarvalho

Clique agora em BlogModule

Imagem Blog UansCarvalho

Clique em BlogQueue

Imagem Blog UansCarvalho

Agora clique em Monitoring

Imagem Blog UansCarvalho

Na tela abaixo precisamos de uma visualização que se chama Messages Total e neste caso ainda não está aparecendo, caso o seu esteja pode pular este passo.

Imagem Blog UansCarvalho

Então clique em Customize this table conforme tela acima e conforme abaixo ajuste para a coluna da direita os seguinte itens que para nós será interessante analisarmos agora e posteriormente clique em Apply

Imagem Blog UansCarvalho

Agora teremos:

Imagem Blog UansCarvalho

Veja que em Messages Total que iremos ter o Total de mensagens enviadas, no caso temos 1 pois só enviamos uma mensagem para a nossa Fila.

Obs: Aqui fique muito atento ao Consumers Total, pois ele nos mostra que existe algum Proxy configurado para consumir esta Fila, e dependendo da sua configuração de Dominio ou Servers, podemos ter 16 ou mais, mas nunca zero, caso esteja com zero, verifique suas configurações novamente até que apareça uma quantidade > 0 de Consumers.

Para que você entenda, nosso Proxy que acabamos de criar RecebeFilaProxyService foi configurado para ficar “escutando” nossa Fila e a cada mensagem que cair nesta fila, será automaticamente capturado pelo nosso Proxy.

Abaixo veja que gravamos nossa Mensagem com sucesso em nosso Banco de Dados.

Imagem Blog UansCarvalho

 

Abraços e até a Próxima

/:-D

 

 

Criei este Blog destinado a desenvolvedores e interessados na Tecnologia Oracle SOA Suite, minha idéia é que no futuro ele sirva de referência para Analistas e Desenvolvedores desde aprendizes a especialistas. Já existem alguns Posts interessantes que abordam um pouco do meu dia a dia, no passar do tempo irei alimentar este Blog com o máximo de informações possíveis, por isso peço por gentileza aos interessados e afins que caso tenham alguma dúvida, sugestão ou crítica que me digam para que eu possa da melhor forma suprir as expectativas e na medida do possível sanar todas as duvidas que vierem a surgir ou até mesmo criar novos Posts abordando algum tópico que venha a ser relevante para todos os interessados. Obrigado Uans Carvalho

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *