sábado, 28 de novembro de 2009

[Oracle BPM] Simulação de processos

Há alguns meses atrás criei um vídeo sobre simulação de processos com a ferramenta Oracle BPM e busquei dar uma passada geral pelas funcionalidades de simulação que a ferramenta oferece.

Este vídeo e muitos outros, estão disponíveis no canal da iProcess no youtube (www.youtube.com/iprocessbpm), não deixem de conferir o vídeo sobre simulação de processos.

 

quarta-feira, 18 de novembro de 2009

[Oracle BPEL] Automatizando o deploy de processos, agora com bibliotecas


Para utilizar bibliotecas java em componentes Java Embedding dentro de processos BPEL, precisamos adicioná-las como Libraries do projeto.

No deploy via ant, quando queremos que estas bibliotecas sejam empacotadas junto com o projeto BPEL, precisamos ajustar o arquivo build.xml.

No meu caso, eu quero empacotar junto com o processo BPEL 2 bibliotecas java, são elas: commons-net-2.0.jar e commons-net-ftp-2.0.jar.

O primeiro passo é criar uma pasta para armazenar os arquivos ".jar".
Dentro do diretório do projeto BPEL eu criei uma pasta chamada "libs" e joguei para lá as bibliotecas acima listadas.

O segundo passo é definir uma nova propertie no arquivo build.xml que irá armazenar o caminho da pasta "libs" criada no passo 1.
Conforme podemos ver na imagem abaixo (linha selecionada), eu criei uma propertie chamada "bpel.lib" e apontei para a pasta "libs" criada no passo 1.

O terceiro passo é incluir na tag compile, do arquivo build.xml, a inclusão de todos os arquivos de biblioteca que estão na pasta "libs".
Conforme podemos ver na imagem abaixo (linha selecionada), esta inclusão é feita com a tag "lib".

Agora é só rodar o ant e testar o processo.

Até o próximo post.


quarta-feira, 4 de novembro de 2009

[Oracle BPEL] Automatizando o deploy de processos

A automatização do deploy torna muito mais fácil o trabalho de mover os projetos entre os ambientes de desenvolvimento, teste, homologação e produção. Muitas vezes precisamos alterar o descritor do processo para atualizar as URLs de acordo com o ambiente em que o processo será disponibilizado, e pior ainda quando se torna necessário atualizar arquivos WSDLs individuais.

Vamos começar fazendo um deploy simples, apenas parametrizando as informações do servidor BPEL. Os passos para este deploy são:
  1. Criar o(s) arquivo(s) de properties;
  2. Fazer o deploy via ANT.
1.Criando o arquivo de properties 
Ao criar um novo projeto no JDeveloper, automaticamente o JDev cria um template de arquivo de properties, chamado build.properties.

Para acessá-lo abra o projeto, expanda a pasta Resources e de um duplo clique no arquivo build.properties.

Antes de começar, vamos copiar e definir um novo nome para este arquivo. Com o arquivo aberto, clique em "File > Save as" e informe um novo nome para o arquivo, chamaremos de build_dsv.properties.

Inicialmente, vamos apenas configurar o servidor BPEL, para isto informe as configurações do servidor semelhante a imagem abaixo (claro que informando os valores de acordo com seu ambiente de desenvolvimento).


2.Fazendo o deploy via ANT
O ANT utiliza o arquivo build.xml para fazer o deploy dos processos. O JDeveloper gera um template deste arquivo sempre que um novo projeto BPEL é criado. Este arquivo possui a tag "deploy" configurado como tag default, ou seja, ao digitar apenas "ant" no diretório de um projeto a tag "deploy" será executada.

Este arquivo, por default, já importa o arquivo de properties "build.properties". Vamos fazer uma alteração no arquivo build.xml para importar o arquivo de properties que criamos no passo anterior, porém vamos deixar esta importação dinâmica, de modo que facilite a troca de ambientes futuramente. Para isto, vamos utilizar a property env concatenada com o nome padrão do arquivo de properties (conforme imagem abaixo), o resultado desta concatenação será o nome do arquivo de properties de acordo com o ambiente, neste exemplo: build_dsv.properties.

Podemos fazer o deploy do processo via linha de comando ou diretamente pelo JDev.

Deploy via linha de comando:
  • Antes de mais nada, é necessário setar algumas variáveis de ambiente. Para facilitar este trabalho vamos criar um arquivo ".bat" (no caso de windows) que sete estas variáveis automaticamente;
  • Veja um exemplo deste arquivo clicando aqui;
  • No prompt de comando vá até o diretório do seu projeto;
  • Para fazer o deploy digite ant -Denv=dsv, onde:
    • -D indica a passagem de parâmetros;
    • env é a property que vamos setar (utilizada para indicar qual arquivo de properties será utilizado);
    • dsv é o valor que concatenado com o nome do arquivo pré-configurado no build.xml irá indicar o ambiente que vamos fazer o deploy, neste caso no ambiente de desenvolvimento.
Deploy via JDev:
  • Clique com o botão direito sobre o arquvio build.xml e selecione Run Ant...;

  • Na aba properties, na seção Properties, clique em Add...;
    • Em Property informe env;
    • Em Value informe dsv;
    • Clique em OK.

  • Clique em OK na janela principal do ANT para fazer o deploy do processo.
Com os passos acima, já estamos fazendo o deploy via ANT. Agora você pode criar outros arquivos de properties (build_prd.properties, por exemplo), sempre lembrando de passar o valor correto para a property env (neste caso, o valor seria prd) no momento de fazer o deploy.

Mas claro, podemos fazer muito mais.

Imagine a seguinte situação. Você possui um processo BPEL que chama alguns webservices (java, por exemplo) e estes webservices também possuem versões de desenvolvimento, teste e produção.

Ao incluir a chamada destes serviços no Oracle BPEL, como eles não possuem a definição de partnerLinkType o Oracle BPEL cria um outro wsdl (nome_do_serviço + ref.wsdl) para encapsular o serviço e incluir a definição de partnerLinkType, necessária para a chamada do serviço através do BPEL, conforme imagem abaixo.

O Problema: Quando terminamos o desenvolvimento e precisamos fazer o deploy do processo no ambiente de testes, por exemplo, é necessário editar manualmente os WSDLs dos serviços e alterar os endpoints dos mesmos para agora apontar os serviços para o ambiente de testes.

A Solução: Configurar o ANT para que ele fique responsável por trocar todos os endpoints dos serviços de acordo com as properties definidas para cada ambiente.

Os passos para configurar a solução acima, são:
  1. Editar os arquivos de properties;
  2. Gerar o template do plano de deploy;
  3. Customizar o plano de deploy;
  4. Adicionar o plano de deploy no pacote do projeto;
1.Editando o arquivo de properties 
  • Abra o arquivo build_dsv.properties e adicione uma property chamada host_ws (conforme imagem abaixo). Obs.: Se for o caso, pode-se criar também uma property para customizar a porta do servidor, chamada por exemplo de port_ws.
  • Salve e feche o arquivo.

2.Gerando o template do plano de deploy
Para gerar o template do plano de deploy vamos adicionar uma nova tag no arquivo build.xml, eu chamei esta tag de "generateTemplateDeploymentPlan", como pode ser visto na imagem abaixo.

Esta tag, quando executada, irá criar um arquivo chamado deploymentPlan.xml com base no arquivo bpel.xml do projeto BPEL.

Para executar esta tag, clique com o botão direito sobre o arquvio build.xml e selecione "Run Ant Target > generateTemplateDeploymentPlan".

Agora dê um refresh no projeto e veja que foi criado o arquivo deploymentPlan.xml, semelhante a imagem abaixo.

3.Customizando o plano de deploy
No meu caso a única coisa que quero alterar são os endpoitns dos serviços chamados pelo processo e neste exemplo tenho apenas um serviço.

Altere o atributo name da tag wsdlAndSchema e vamos deixar apenas o WSDL do serviço que queremos alterar, no caso de ter mais de um arquivo use "|" como separador.

Os serviços, no ambiente de desenvolvimento apontam para a minha própria máquina, ou seja "localhost", então eu quero alterar todas as referências de localhost para o nome do servidor que está configurado no arquivo de properties. Para isto, vamos configurar na tag replace o valor @HOST. Este valor @HOST será alterado durante a execução do ANT de acordo com o arquivo de properties, veremos como fazer isto mais tarde.

O Plano de deploy deve ter ficado semelhante a imagem abaixo.

4.Adicionando o plano de deploy no pacote do projeto
Para adicionar o plano de deploy no pacote do projeto (necessário para o deploy) vamos adicionar uma nova tag no arquivo build.xml, chamada de "attach_plan", como pode ser visto na imagem abaixo.

Bom, mas antes de anexar o plano de deploy precisamos alterar a referência @HOST, que deixamos previamente configurada no plano de deploym para o valor configurado no arquivo de properties. Então antes de adicionar o plano de deploy vamos substituir a referência @HOST pelo conteúdo da variável definida no passo 1, chamada host_ws, conforme imagem abaixo:

Com esta alteração, temos um novo problema, ao executar o ANT pela primeira vez, o arquivo deploymentPlan.xml será alterado através da tag replace e não funcionará para as próximas execuções, então para resolver este problema vamos criar um deploymentPlan temporário.

Vamos começar definindo 2 novas properties no arquivo build.xml, para armazenar o nome dos arquivos do plano de deploy e o plano de deploy temporário, conforme imagem abaixo:

Agora vamos atualizar as referências a estes arquivos na tag attach_plan e adicionar uma nova tag que irá fazer uma cópia do arquivo do plano de deploy e no final vamos adicionar uma nova tag para deletar o arquivo temporário.

Note que o arquivo do plano de deploy original só é utilizado na cópia para o arquivo temporário, as demais referências apontam sempre para o arquivo temporário.

Porém só adicionar a tag no arquivo build.xml não vai adiantar em nada, precisamos chamá-la ao fazer o deploy, então vamos adicionar esta tag como dependência na tag process-deploy logo após a tag compile, conforme imagem abaixo.

Feito! Agora é só executar o ANT e verificar o resultado do deploy. Agora use sua criatividade e explore esta ferramenta.

Nestes últimos dias tive alguns problemas com bibliotecas java e o deploy via ANT, no próximo post vou escrever sobre como resolvi este novo problema.