BPEL

Selecionando Dados usando o Database Adapter Bpel (DbAdapter) Oracle SOA Suite 11g

O Oracle Database Adapter permite o Oracle SOA Suite se comunicar com o banco de dados, incluindo servidores de banco de dados Oracle e quaisquer bancos de dados relacionais que seguem o padrão SQL ANSI e que fornecem drivers JDBC, realizando operações de SELECT, UPDATE e INSERT usando um Assistente de Configuração do Adaptador, onde as entradas / saídas são XML, mais facilmente visto como parâmetros de entrada e e resultados convertidos em XML.

Neste artigo sobre o Database Adapter (DbAdapter) do BPEL vamos selecionar alguns dados de uma tabela do banco de dados e mostrarmos na tela do Enterprise Manager (EM)

Mais especificamente, vamos passar um numero de Identificador de um cliente para que nos mostre todos os dados deste cliente na tabela de empregados.

Para nossos testes, vamos criar um projeto chamado SelecDBAdapter

Clique em File >> New

Imagem Blog UansCarvalho

Será aberto uma tela como abaixo:

Em seguida selecione Generic Project

Imagem Blog UansCarvalho

Em Project Name coloque SelecDBAdapter e em Project Technologies selecione o nome SOA e clique na setinha > para que o nome vá para a direita e fique como abaixo:

Obs: Veja em Directory que ele irá preencher automaticamente o nome onde será criado o nome do projeto que você informou em Project Name

No meu caso: /home/uans/jdeveloper/mywork/UansBlogApplication/SelecDBAdapter

Clique em Next em seguida:

Imagem Blog UansCarvalho

Abaixo clique em Finish deixando o Composite Template em Empty Composite

Imagem Blog UansCarvalho

Agora que criamos um Projeto vazio vamos criar um BPEL

Imagem Blog UansCarvalho

Agora com o botão direito clique Componets > Insert > BPEL Process

Imagem Blog UansCarvalho

Clique em BPEL 2.0 Specification

Em name coloque SelecDBAdapterBPELProcess

Em Template selecione Synchronous BPEL Process e clique em OK

Deixe selecionado a opção Expose as a SOAP service, pois este será o responsável por criar um WSDL default o qual iremos alterar para nossos testes.

Imagem Blog UansCarvalho

Pronto, ele deverá ficar assim:

Imagem Blog UansCarvalho

Vamos agora alterar nosso WSDL criado para inserirmos nosso parâmetros de entrada  que será utilizado em nosso DBAdapter e inserirmos nossos parâmetros de saída que serão exibidos na tela do Enterprise Manager (EM)

Para isso, clique no nosso projeto criado e na pasta xsd dê um duplo clique no xsd que foi criado automaticamente SelecDBAdapterBPELProcess.xsd

 Imagem Blog UansCarvalho

Agora vamos alterar nossos parâmetros de entrada e saída.

Dentro da tag <element name=”Process”> em input, altere para idCliente e em type altere para integer, dentro da tag <element name=”processResponse”> em result, altere e acrescente os parâmetros conforme abaixo:

<element name=”idCliente” type=”integer”/>
<element name=”Nome” type=”string”/>
<element name=”Profissao” type=”string”/>
<element name=”Salario” type=”integer”/>
<element name=”NumeroDepartamento” type=”integer”/>

Veja como ficou:

Imagem Blog UansCarvalho

Agora vamos criar o nosso Database Adapter (DBAdapter)

Em External References clique com o botão direito e escolha a opção Database Adapter

Imagem Blog UansCarvalho

Na próxima tela clique em Next

Imagem Blog UansCarvalho

Em Service Name coloque SelectEmployeeDBAdapter e clique em Next

Imagem Blog UansCarvalho

Na próxima tela certifique-se que sua Connection está correta, no caso, apontando para o banco de dados correto, e em JNDI Name está também com o nome correto.

Caso você não tenha criado ainda, faça o seguinte:

Clique no ícone + ao lado do nome de sua Connection

IImagem Blog UansCarvalho

Na tela seguinte preencha conforme a imagem abaixo:

Obs: No meu caso, estou apontando para a base do meu Oracle XE, no seu caso você pode colocar os dados referente a base que você irá conectar e em seguida clique em Test Connection para ter certeza que você inseriu corretamente as informações do seu banco de Dados e clique em OK

Imagem Blog UansCarvalho

Deverá então ficar assim:

Imagem Blog UansCarvalho

Caso você não saiba o nome que deverá ficar em JNDI Name, verifique meu Post: Adicionando uma nova Base de Dados ao DbAdapter no Console (Web) do SOA Suite 11g pois neste Post descrevo como configurar uma nova base ao DbAdapter (WEB), mas caso ainda tenha duvidas de onde encontra esse nome, entre na Console WEB conforme abaixo:

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

Obs: A porta 10000 é o numero que escolhi ao criar o meu Domínio.

Faça o Login:

Imagem Blog UansCarvalho

Clique em Deployments

Imagem Blog UansCarvalho

Clique em DbAdapter

Imagem Blog UansCarvalho

Clique em Configuration

Imagem Blog UansCarvalho

Clique em Outbound Connection Pools e em seguida clique no  javax.resource.cci.ConnectionFactory Expand Node   ao lado de javax.resource.cci.ConnectionFactory

Imagem Blog UansCarvalho

Veja abaixo as conexões minhas conexões e lá temos a que estou usando no DBAdapter, no caso:  eis/DB/OracleXe e este será o nome do JNDI Name que iremos usar no nosso DBAdapter

Imagem Blog UansCarvalho

Voltando ao nosso DBADapter, então teremos a tela abaixo, então clique em Next:

Imagem Blog UansCarvalho

Na tela abaixo, selecione Perform an Operation on a Table e marque a opção Select e clique em Next:

Imagem Blog UansCarvalho

Agora clique em Import Tables para importarmos a nossa Tabela a qual faremos o Select

Imagem Blog UansCarvalho

Na tela seguinte em Name Filter coloque  %EMPLOYEE%

Obs: Estou usando o % para que você veja que é possivel usar o sinal de porcentagem para encontrar a tabela caso você não saiba o nome exato, em seguida clique em Query e abaixo em Available iŕa ser mostrado a sua tabela, mas caso não apareça veja na criação de suas configurações se o seu usuario tem as devidas permissões para acessar essa tabela e/ou o Owner esta correto.

Imagem Blog UansCarvalho

Agora clique na sua tabela e clique na seta > para que sua tabela vá para o lado direito conforme abaixo e clique em OK.

Imagem Blog UansCarvalho

Veja abaixo que você fez o import corretamente, já que agora a tabela EMPLOYEE aparece em nossa tela, agora clique em Next:

Imagem Blog UansCarvalho

A próxima tela nos mostra uma relação entre as tabelas que o próprio BPEL cria conforme a modelagem desta tabela, não mexa em nada e clique em Next

Imagem Blog UansCarvalho

No próximo passo, na tela é nos mostrado os dados que irão aparecer no Select, mas no caso ele faz uma relação com as tabelas conforme a modelagem da tabela.

Clique em Next para continuarmos.

Veja abaixo que ele mesmo já fez o SELECT para nós e agora só falta colocarmos o parâmetro que iremos passar depois no BPEL para selecionar os dados que queremos, então clique em Add…

Imagem Blog UansCarvalho

Na caixinha que abriu coloque o nome idCliente e clique em OK.

Imagem Blog UansCarvalho

Veja abaixo que o nosso parâmetro já apareceu, agora clique em Edit para adicionarmos o parâmetro à clausula Where

Imagem Blog UansCarvalho

Nesta tela clique em Add.. e veja que ao lado direito ele irá colocar conforme abaixo:

Imagem Blog UansCarvalho

Agora em na caixa Second Argument estará marcado Literal, então altere para Parameter conforme abaixo, veja que ele já aparece o idCliente que você havia colocado como parâmetro e então clique em OK.

Imagem Blog UansCarvalho

Ficará então como abaixo e clique em Next:

Obs: Veja que nosso parâmetro ficou com o símbolo #idCliente, ou seja, ele precisa deste sinal # para entender que o que irá na frente deste símbolo será nosso parâmetro de entrada.

Imagem Blog UansCarvalho

Clique em Next novamente:

Imagem Blog UansCarvalho

Agora clique em Finish

Imagem Blog UansCarvalho

Então teremos o seguinte:

Imagem Blog UansCarvalho

Agora coloque o cursor do mouse sobre o Bpel, no caso a caixa azul ai do meio até aparecer uma seta cor laranja, então segure o botão esquerdo do mouse e arraste até a outra setinha do seu DBAdapter:

Imagem Blog UansCarvalho

Agora dê um duplo clique sobre o seu BPEL:

Imagem Blog UansCarvalho

Ao lado direito na tela em BPEL Constructs clique no componente Invoke e arraste para o centro do seu BPEL:

Imagem Blog UansCarvalho

Arraste a setinha que aparece ao lado de seu Invoke para o seu DBAdapter que aparecerá em Partner Links

IImagem Blog UansCarvalho

Após isso será mostrado a tela abaixo:

Imagem Blog UansCarvalho

Então na guia input clique no sinal verde + para criar a variável de entrada, no caso que dará nome ao seu input

E veja que ele irá criar uma outra caixinha já com o nome da variável preenchida, no caso Invoke1_SelectEmployeeDBAdapterSelect_InputVariable, então clique em OK

Imagem Blog UansCarvalho

Agora na guia OutPut novamente clique no sinal verde + para criar a variável de saída, no caso seu OutPut que ficará com o  nome Invoke1_SelectEmployeeDBAdapterSelect_OutputVariable

Imagem Blog UansCarvalho

Agora em Name coloque o seguinte: SelectEmployee_Invoke e clique em OK

Imagem Blog UansCarvalho

Teremos então a seguinte tela após termos clicado em OK.

Imagem Blog UansCarvalho

Arraste agora um Assign para acima do seu Invoke e outro para abaixo do seu invoke conforme abaixo:

Imagem Blog UansCarvalho

O primeiro Assing1 renomei-o para Variaveis_Entrada e o segundo para Variaveis_Saida, para isso basta dar um duplo clique sobre o nome Assign1 e posteriormente no nome Assign2

Imagem Blog UansCarvalho

Agora dê um duplo clique sobre a caixinha  Variaveis_Entrada, clique no sinal + do inputVariable até chegar em client:idCliente, e arraste até o ns2:idCliente que estará em Invoke1_SelectEmployeeDBAdapterSelect_InputVariable do lado direito conforme abaixo e clique em OK.

Obs: Este Invoke1_SelectEmployeeDBAdapterSelect_InputVariable é a mesma variável que definimos para o Invoke que criamos acima.

Imagem Blog UansCarvalho

Agora dê um duplo clique sobre a caixinha  Variaveis_Saída, que está abaixo do seu SelectEmployee_Invoke

Do seu lado esquerdo da tela, clique no sinal + do Invoke1_SelectEmployeeDBAdapterSelect_OutputVariable até chegar em ns2:empno

Faça o mesmo do seu lado direito em outputVariable até chegar em client:idCliente

Imagem Blog UansCarvalho

Agora faça o ligamento conforme abaixo e clique em OK

Imagem Blog UansCarvalho

Faça o deploy do seu projeto para testarmos:

Com o botão direito do mouse em cima do seu projeto (SelectDBAdapter) clique em Deploy > SelectDBAdapter

Imagem Blog UansCarvalho

Clique em Next

Imagem Blog UansCarvalho

Marque a opção Overwrite any existing composites with the same revision ID e desmarque a opção Keep running instances on after redeployment e clique em Next

Imagem Blog UansCarvalho

Escolha a opção localhost e clique em Next

Imagem Blog UansCarvalho

Clique em Next novamente

Imagem Blog UansCarvalho

Agora clique em Finish

Imagem Blog UansCarvalho

No seu Jdeveloper, bem abaixo, clique na guia Deployment e veja se aparece a mensagem —-  Deployment finished.  —- se aparecer seu deploy foi executado com sucesso, se não aparecer verifique novamente os passos acima para ver se você esqueceu de fazer algo.

Imagem Blog UansCarvalho

Vamos fazer o teste para ter certeza que tudo funcionou perfeitamente.

No seu Browser vá no endereço http://localhost:10000/em

Obs: A porta 10000 é o numero que escolhi ao criar o meu Domínio.

Faça o Login:

Imagem Blog UansCarvalho

Clique no seu projeto: SelectDBAdapter[1.0]

Imagem Blog UansCarvalho

Clique em Test

Imagem Blog UansCarvalho

Abaixo em input coloque 7839 que no meu caso é um ID de Cliente que possuo na minha base de dados e clique em Test Web Service

Imagem Blog UansCarvalho

Se no response aparecer conforme abaixo, seu projeto foi concluído com sucesso.

Imagem Blog UansCarvalho

 

Duvidas ? Deixe seu comentário e faça download deste Projeto 🙂

 

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

2 Comments

  • marcio bianchi

    boa noite,
    amigo, estou com dificuldades no bpel para a seguinte situação:

    imagine 2 aplicações oracle e o bpel fazendo a integração entre os dois bancos, pois bem, imagine que eu preciso mapear um campo que foi incluído na tabela destino.

    minha duvida: Como eu faço para aparecer esse campo que foi incluído na tabela sem perder o mapeamento atual ?

    Quando eu entro no DB CONECTOR que incluindo o campo para ser retornado no select, ele não aparece para ser mapeado com o banco destino, ele só aparecer se eu importar a tabela novamente, teria algum jeito de fazer isso sem tem que importar a tabela novamente ?

    obrigado pela atenção

    Att.

  • Uans

    Olá Marcio,

    Obrigado pelo acesso, quando você precisa alterar um select usando o DBAdapter o melhor jeito para fazer isso é simplesmente alterando a query que fica dentro do arquivo _db.jca que esta dentro do seu projeto.. por exemplo SelectEmployeeDBAdapter_db.jca …

    Também existe o arquivo -properties.xml (por exemplo:SelectEmployeeDBAdapter-properties.xml) que é onde ficam os campos mapeados da tabela…

    Uma outra dica é você usar a opção pureSQL do DBAdapter pois ficará sempre mais fácil a manipulação da query e sem falar que ainda ganha em performance dependendo da complexidade da sua Query.

    Espero ter ajudado. Abraços e duvidas estou a disposição.

Leave a Reply

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