BPEL

Trabalhando com FileAdapter no BPEL – Parte 5: Deletando um arquivo

Para este nosso exemplo vamos utilizar nosso projeto anterior onde Renomeamos ou Movemos um arquivo, e agora neste Post vamos criar mais uma operação para Deletarmos o arquivo.

Consulte os Links abaixo para verificar as demais partes deste nosso Projeto:

Vamos agora atualizar o WSDL do nosso projeto FileAdapterUtilBPEL para que agora tenha a nova operação deleteFile.

Então substitua o WSDL para nosso projeto FileAdapterUtilBPEL clicando aqui

Imagem Blog UansCarvalho

Feito isso basta abrir novamente seu composite.xml e a nova operação irá aparecer no seu Serviço Exposto automaticamente conforme abaixo:

Obs: Caso o seu composite.xml ele já estava aberto, feche-o e abra-o novamente.

Imagem Blog UansCarvalho

Agora para dentro do seu composite.xml arraste um componente chamado Mediator e dê o nome de FileUtilMediator

Em Template deixe marcado a opção Define Interface Later conforme abaixo e clique em OK.

Imagem Blog UansCarvalho

Obs: O Mediator será responsável por dizer ao BPEL qual das operações deverão ser chamadas.

Agora exclua a linha que liga seu WebService Exposto com seu BPEL e ligue nosso Mediator a este Serviço Exposto e ao seu BPEL

Ao fazer a ligação do Mediator ao BPEL escolha as opções abaixo:

  • Mediator Operation –> renameOrMoveFile
  • Target Operation –> renameOrMoveFile

Imagem Blog UansCarvalho

Clique em OK e ficará conforme abaixo:

Imagem Blog UansCarvalho

Dê um duplo clique sobre o seu Mediator

Abaixo fique atento pois as vezes podem ocorrer um problema onde a operação deleteFile aparece a operação RenameOrMoveBPELProcess:

Imagem Blog UansCarvalho

Caso o seu também esteja assim, então será necessário excluir esta transformação e depois criarmos novamente do modo correto. Para isso clique ao lado no X

Imagem Blog UansCarvalho

Confirme sua decisão:

Imagem Blog UansCarvalho

Ficará conforme abaixo:

Imagem Blog uansCarvalho

Então crie uma transformação para a operação renameOrMoveFile:

Ao lado da operação renameOrMoveFile clique no sinal + do seu lado direito e depois clique em static routing rule

Imagem Blog UansCarvalho

Abaixo clique em Service

Imagem Blog UansCarvalho

Agora clique em renameOrMoveFile:

Imagem Blog UansCarvalho

Feito isso veja abaixo como deverá ficar:

Imagem Blog UansCarvalho

Obs: Fique atento a tela acima, pois veja que na operação renameOrMoveFile deve aparecer a operação RenameOrMoveBPELProcess/renameormovebpelprocess_client::renameOrMoveFile

Obs 2: Devera aparecer parameters : <<Transformation Map>> nos dois Transform Using e esta parte não deve estar em branco, caso esteja então exclua novamente a transformação e crie novamente conforme fizemos acima

Volte ao seu composite.xml e arraste um File Adapter para criarmos nossa operação de delete e dê o nome de DeleteFileAdapter

Imagem Blog UansCarvalho

Deixe marcado a opção Define from operation and schema (specified later)

Imagem Blog UansCarvalho

Abaixo marque a opção Write

Imagem Blog UansCarvalho

Abaixo não é necessário especificarmos muita coisa pois os dados que inserirmos aqui serão perdidos posteriormente pois iremos alterar as propriedades deste componente e por isso podemos colocar o que quisermos neste passo.

Então, coloque apenas uma barra / em Directory for Outgoing Files e coloque um * em File Naming Convention e clique em Next

Imagem Blog UansCarvalho

Marque a opção Native format translation is not required

Imagem Blog UansCarvalho

Clique em Finish

Imagem Blog UansCarvalho

No seu Projeto procure o arquivo DeleteFileAdapter_file.jca, pois dentro dele iremos alterar as propriedades do componente.

Imagem Blog UansCarvalho

Fique atento a linha <interaction-spec pois iremos alterar o ClassName e suas propriedades, então troque somente esta linha e as propriedades conforme abaixo:

<interaction-spec className="oracle.tip.adapter.file.outbound.FileIoInteractionSpec">
      <property name="TargetPhysicalDirectory" value="/tmp"/>
      <property name="TargetFileName" value="lixo.txt"/>
      <property name="Type" value="DELETE"/>
</interaction-spec>

Arraste um componente BPEL Process, e deixe as opções conforme abaixo:

  • Selecione a opção BPEL 2.0 Specification
  • Dê o nome de DeleteFileBPELProcess
  • Em Template selecione Base on a WSDL
  • Em Service Name coloque deleteFile
  • Desmarque o flag de Expose as a SOAP serivice
  • Em WSDL URL procure o WSDL que baixamos: FileUtilContract.wsdl

Imagem Blog UansCarvalho

Ficou assim:

Imagem Blog UansCarvalho

Ligue agora o seu Mediator a este BPEL e depois o seu BPEL ao DeleteFileAdapter

Na tela abaixo escolha a opção deleteFile

Imagem Blog UansCarvalho

Então ficará assim:

Imagem Blog UansCarvalho

Abra novamente seu Mediator:

Faça agora o mesmo procedimento onde criamos a transformação para a operação  renameOrMoveFile agora para a operação deleteFile

Pronto… Criamos duas transformações padrões para direcionar nossas operações

Veja abaixo como ficou nossas transformações e se atente novamente para que as operações estejam corretas conforme imagem abaixo, onde a operação deleteFile deve aparecer ao lado do Funil a operação DeleteFileBPELProcess/deleteFile::deletefile e na operação renameOrMoveFile deve aparecer a operação RenameOrMoveBPELProcess/renameormovebpelprocess_client::renameOrMoveFile lembrando que também devem aparecer parameters : <<Transformation Map>> nos dois Transform Using e esta parte não deve estar em branco.

Caso não esteja conforme abaixo basta apenas clicar no X para excluir a transformação e repetir o procedimento acima para adicionar a transformação correta

Imagem Blog UansCarvalho

Feito isso abra nosso Processo BPEL do DeleteFileBPELProcess

Imagem Blog UansCarvalho

Em Variables… defina as seguintes variaveis:

  • nomeArquivo do tipo String
  • nomeDiretorio do tipo String
  • retornoSucesso do tipo Integer
  • retornoErro do tipo Integer

Imagem Blog UansCarvalho

Agora para dentro do seu BPEL arraste um Assign e renomeie para Variaveis_Entrada

Imagem Blog UansCarvalho

Abra este Assign e ligue as variaveis de seu Request do lado esquerdo com as variáveis que criamos acima que estão do lado direito e na variável $retornoSucesso inicialize com 0, veja abaixo como deverá ficar:

  • $$inputVariable.parameters/ns1:request/ns3:nomeArquivo ligar em $nomeArquivo
  • $inputVariable.parameters/ns1:request/ns3:diretorio ligar em $nomeDiretorio
  • Colocar zero 0 em $retornoSucesso

Imagem Blog UansCarvalho

Arraste um Invoke abaixo do seu Assign Variaveis_Entrada e coloque o nome de Invoke_DeleteFileAdapter, então clique no sinal + em Input para que crie a variavél de Input conforme abaixo, posteriormente clique em OK.

Imagem Blog UansCarvalho

Clique agora na guia Properties e em To clique no sinal + e em Name: escolha a opção jca.file.FileName e em Variable selecione a variável $nomeArquivo

Imagem Blog UansCarvalho

Obs: Está é apenas uma tática para aparecer em nosso código fonte as propriedades que precisamos alterar.

Imagem Blog UansCarvalho

Clique em OK acima e no seu BPEL DeleteFileBPELProcess clique sobre a caixa do seu Invoke_DeleteFileAdapter e clique depois em Source abaixo:

Imagem Blog UansCarvalho

Veja abaixo  que o cursor irá parar no seu Invoke e então teremos o código entre a tag <bpelx:toProperty> conforme abaixo:

Imagem Blog UansCarvalho

Agora troque esta propriedade com as abaixo:

<bpelx:toProperties>
        <bpelx:toProperty name="jca.file.TargetFileName" variable="nomeArquivo"/>
        <bpelx:toProperty name="jca.file.TargetDirectory" variable="nomeDiretorio"/>
</bpelx:toProperties>

Veja abaixo como ficou:

Imagem Blog UansCarvalho

Pronto, agora abaixo do seu Invoke arraste mais um Assign e coloque o nome de Variaveis_Saida.

Imagem Blog UansCarvalho

Dê um duplo clique sobre Variaveis_Saida e ligue a variavel $retornoSucesso que está ao seu lado esquerdo com $outputVariable.parameters/ns1:response/ns3:codigoRetorno do seu lado direito e em seguida clique em OK

Imagem Blog UansCarvalho

Obs: Neste exemplo estou acrescentando algumas variáveis de retornoSucesso e retornoErro caso seja necessário realizar algum tratamento de erro, porem não farei neste Post já que não será nosso foco.

Faça o Deploy do seu projeto para testarmos nosso projeto  🙂

Após o Deploy com sucesso do Projeto, crie um arquivo em um local qualquer com o nome arquivo.txt 

No meu caso criei em /home/uans/Arquivos

Imagem Blog UansCarvalho

Clique em seguida em Test Web Service do lado direito superior da tela

Imagem Blog UansCarvalho

Veja abaixo o retorno do nosso serviço:

Imagem Blog UansCarvalho

Volte no diretorio onde estava o arquivo.txt e verá que ele não estará mais lá

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

Leave a Reply

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