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:
- Trabalhando com Mensagens JMS no OSB – Parte 1: Criando e Configurando as Filas
- Trabalhando com Mensagens JMS no OSB – Parte 2: Publicando uma Mensagem na Fila
- Trabalhando com Mensagens JMS no OSB – Parte 3: Recebendo a Mensagem
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.
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
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
O BPEL então ficou assim:
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
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.
Veja que nosso Business é baseado no WSDL normalmente.
E esta apontando para nosso BPEL
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
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.
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
Na guia JMS Transport em Destination Type escolha a opção Queue
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:
Clique sobre o nome Routing e conforme abaixo selecione nosso Business (RecebeFilaBusiness.biz) e em Involking selecione a opção process
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:
<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>
Obs: Este é o payload de request do nosso Business RecebeFilaBusiness.biz
Então deverá ficar assim:
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:
Clique em Resource Browser e ao lado direito deverá aparecer o nosso Proxy BlogJmsPublishQueueProxy
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>
Clique em Execute e veja abaixo como deverá aparecer:
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:
Na tela abaixo clique em JMS Modules conforme abaixo:
Clique agora em BlogModule
Clique em BlogQueue
Agora clique em Monitoring
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.
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
Agora teremos:
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.
Abraços e até a Próxima
/:-D