Tags
11G, Banco de Dados, BPEL, Database Adapter, DBAdapter, Deployment, EM, INSERT, JDeveloper, Oracle, SELECT, SOA, Soa-Suite, UPDATE, XML
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
Será aberto uma tela como abaixo:
Em seguida selecione Generic Project
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:
Abaixo clique em Finish deixando o Composite Template em Empty Composite
Agora que criamos um Projeto vazio vamos criar um BPEL
Agora com o botão direito clique Componets > Insert > BPEL Process
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.
Pronto, ele deverá ficar assim:
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
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:
Agora vamos criar o nosso Database Adapter (DBAdapter)
Em External References clique com o botão direito e escolha a opção Database Adapter
Na próxima tela clique em Next
Em Service Name coloque SelectEmployeeDBAdapter e clique em Next
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
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
Deverá então ficar assim:
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:
Clique em Deployments
Clique em DbAdapter
Clique em Configuration
Clique em Outbound Connection Pools e em seguida clique no ao lado de javax.resource.cci.ConnectionFactory
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
Voltando ao nosso DBADapter, então teremos a tela abaixo, então clique em Next:
Na tela abaixo, selecione Perform an Operation on a Table e marque a opção Select e clique em Next:
Agora clique em Import Tables para importarmos a nossa Tabela a qual faremos o Select
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.
Agora clique na sua tabela e clique na seta > para que sua tabela vá para o lado direito conforme abaixo e clique em OK.
Veja abaixo que você fez o import corretamente, já que agora a tabela EMPLOYEE aparece em nossa tela, agora clique em Next:
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
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…
Na caixinha que abriu coloque o nome idCliente e clique em OK.
Veja abaixo que o nosso parâmetro já apareceu, agora clique em Edit para adicionarmos o parâmetro à clausula Where
Nesta tela clique em Add.. e veja que ao lado direito ele irá colocar conforme abaixo:
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.
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.
Clique em Next novamente:
Agora clique em Finish
Então teremos o seguinte:
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:
Agora dê um duplo clique sobre o seu BPEL:
Ao lado direito na tela em BPEL Constructs clique no componente Invoke e arraste para o centro do seu BPEL:
Arraste a setinha que aparece ao lado de seu Invoke para o seu DBAdapter que aparecerá em Partner Links
Após isso será mostrado a tela abaixo:
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
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
Agora em Name coloque o seguinte: SelectEmployee_Invoke e clique em OK
Teremos então a seguinte tela após termos clicado em OK.
Arraste agora um Assign para acima do seu Invoke e outro para abaixo do seu invoke conforme abaixo:
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
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.
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
Agora faça o ligamento conforme abaixo e clique em OK
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…
Clique em Next
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
Escolha a opção localhost e clique em Next
Clique em Next novamente
Agora clique em Finish
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.
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:
Clique no seu projeto: SelectDBAdapter[1.0]
Clique em Test
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
Se no response aparecer conforme abaixo, seu projeto foi concluído com sucesso.
Duvidas ? Deixe seu comentário e faça download deste Projeto 🙂
Abraços e até a Próxima
/:-D
marcio bianchi said:
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 said:
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.