Tags
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:
- Trabalhando com FileAdapter no BPEL – Parte 1: Lendo o arquivo de um diretório
- Trabalhando com FileAdapter no BPEL – Parte 2: Lendo o conteúdo do arquivo
- Trabalhando com FileAdapter no BPEL – Parte 3: Gravando o conteúdo do arquivo no Banco de Dados
- Trabalhando com FileAdapter no BPEL – Parte 4: Renomeando ou Movendo um arquivo
- Trabalhando com FileAdapter no BPEL – Parte 5: Deletando um arquivo
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
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: 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 variaveis:
- 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 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
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 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