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

Por Uanderson Carvalho
Postado em Março 2016

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 FileAdapterUtilBPELpara que agora tenha a nova operação deleteFile.

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

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.

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.

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

Clique em OK e ficará conforme abaixo:

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:

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

Confirme sua decisão:

Ficará conforme abaixo:

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

Abaixo clique em Service

Agora clique em renameOrMoveFile:

Feito isso veja abaixo como deverá ficar:

Obs 1: 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

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

Abaixo marque a opção Write

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

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

Clique em Finish

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

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

Ficou assim:

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

Na tela abaixo escolha a opção deleteFile

Então ficará assim:

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

Feito isso abra nosso Processo BPEL do DeleteFileBPELProcess

Em Variables… defina as seguintes variáveis:

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

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

Abra este Assign e ligue as variáveis de seu Request do lado esquerdo verá ficar:

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

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.

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

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

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

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

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:

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

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

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

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

Veja abaixo o retorno do nosso serviço:

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

Faça download deste Projeto  

Uanderson Carvalho é um Especialista Oracle SOA com foco em integração entre sistemas legado utilizando as tecnologias Oracle Fusion Middleware e SOA, Pós-graduado em Administração de Banco de Dados Oracle. Certificado pela Oracle como: Oracle SOA Suite 11g Certified Implementation Specialist.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.