quarta-feira, 9 de dezembro de 2009

[Oracle BPM] Adicionando usuários administradores em configurações híbridas de diretório

O Oracle BPM 10g permite a existência de mais de um usuário administrador, estes usuários possuem permissão para logar no Process Administrator e realizar as tarefas administrativas.

Quando utilizamos um serviço híbrido de diretório (banco de dados + LDAP) não é possível conceder estas permissões diretamente pelo Process Administrator pois esta funcionalidade está desabilitada, conforme podemos ver na imagem abaixo.



No Oracle BPM existem 2 perfis de usuários administradores, são eles:
  • Administradores de usuários: os usuários com este perfil somente conseguem realizar operações de mapeamento de papéis para usuários e grupos e cadastrar períodos de ausência.
    • As permissões são atribuídas no nível de Unidade Organizacional;
    • Um administrador de usuários pode administrar somente os usuários associados a Unidades Organizacionais cuja as quais ele tenha permissão de administração.
  • Administrador: os usuários com este perfil tem total acesso ao Process Administrator e podem gerenciar todas as operações disponíveis no diretório.
Mas como atribuir estes perfis para um usuário se as opções estão desabilitadas na interface do Process Administrator? É isso que veremos a partir de agora.

Para exemplificar, vamos utilizar um usuário fictício, cujo user id é "gerentea".

Bom vamos colocar a mão na massa. O primeiro passo é conectar no schema de banco de dados do diretório de usuários. Para isto, você pode utilizar qualquer cliente SQL.

O segundo passo é descobrir o ID interno do usuário para qual você deseja adicionar o perfil, no meu caso o usuário "gerentea". Para isto, você terá que fazer uma consulta na tabela FUEGO_PARTICIPANT, conforme abaixo:

Após executar o SQL, descobrimos que o ID interno do usuário "gerentea" é 30. Guarde este número pois iremos utilizá-lo em seguida.

A partir de agora cada um dos perfis necessitam passos específicos para configuração, vamos começar pelo perfil de Administrador de usuários.

Adicionando perfil de Administrador de usuários (acesso restrito)

Vamos imaginar que temos a seguinte estrutura organizacional.

Usuários
   - TI
   - Comercial
   - Outros

Neste exemplo, vamos permitir que o usuário "gerentea" administre todos os usuários da unidade organizacional "TI", para isto é necessário incluir uma nova linha na tabela FUEGO_PART_ADMINOUS, conforme imagem abaixo:

onde:
  • USUARIOS/TI é o nome da Unidade Organizacional que o usuário "gerentea" terá direito de administrar
  • 30 é o ID interno do usuário "gerentea"
Porém não é só isso, ainda precisamos dizer que o usuário "gerentea" possui o perfil de administrador de usuários, caso contrário ele não conseguirá fazer o login no Process Administrator. Para atribuir a permissão precisamos alterar a tabela FUEGO_PARTICIPANT, conforme imagem abaixo:

onde:
  • 30 é o ID interno do usuário "gerentea"

Agora o usuário "gerentea" pode logar no Process Administrator e também já consegue administrar todos os usuários membros da unidade organizacional "TI", porém continua sem permissão para as demais unidades organizacionais.

Adicionando perfil de Administrador (acesso completo)

Para atribuir o perfil de usuário administrador precisamos apenas alterar a tabela FUEGO_PARTICIPANT, conforme imagem abaixo:


onde:
  • 30 é o ID interno do usuário "gerentea"

Pronto, com isso finalizamos mais esta dica sobre o Oracle BPM.

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.

quarta-feira, 21 de outubro de 2009

[Oracle BPEL] Lançando exceções no JAVA para capturar no BPEL

E os desafios no projeto continuam surgindo, o post de hoje é referente a utilização de código JAVA dentro do processo BPEL (eu não gosto de java mas essa foi barbada).

Em um processo BPEL utilizamos o componente Java Embedding quando precisamos executar algum código java dentro do processo e, normalmente precisamos tratar algumas exceções que possam vir a ocorrer.

A questão é que as exceções lançadas a partir do java devem ser somente exceções do tipo com.oracle.bpel.client.BPELFault, não é possivel lançar qualquer outro tipo de exceção a partir do java para o processo BPEL. Toda a exceção java deve ser capturada e tratada dentro do java, e se for necessário lançar a exceção para o BPEL então deve ser lançada uma BPELFault.

O tipo BPELFault é especificado utilizando a javax.xml.namespace.QName que é passada como argumento para o contrutor do BPELFault.

Para "setar" os detalhes da exceção, como a mensagem de erro por exemplo, utilizamos o método setPart do BPELFault.

Segue exemplo de como lançar uma exceção BPELFault a partir do componente java.



Pronto! Agora é só testar.

Aproveitando o post sobre o componete Java Embedding, você sabe como fazer imports do java dentro do BPEL?

Quando existe necessidade de fazer imports (ou seja, sempre), estes não devem ser feitos dentro do componente java, devem ser feitos diretamente no código BPEL.

Para fazer imports no BPEL:
  • Abra o arquivo .bpel;
  • Clique na aba Source;
  • Adicione a linha abaixo, logo no inicio do xml, por exemplo: logo abaixo da tag que representa a sequence principal.


Feito, agora já é possivel utilizar o que você importou dentro dos componentes java.

terça-feira, 13 de outubro de 2009

[Oracle BPEL] Iniciando um processo a partir de um Email

Semana passada voltei para o projeto em Porto Alegre e o primeiro requisito que tive que implementar é o "Processo de Monitoramento de Email", cujo objetivo é monitorar uma conta de email. Ao chegar um novo email, o processo identifica o cliente e salva os anexos do email na pasta do cliente por meio de FTP.

O Objetivo deste post é mostrar como funciona o disparo de processos através do monitoramento de uma conta de email.

Em resumo, para disparar um processo a partir do monitoramento de uma caixa de email é necessário:
  • Configurar as informações da conta de email que se quer monitorar no servidor BPEL
  • Criar o processo BPEL que será iniciado a partir da chegada de um novo email
Configurando uma conta de Email no servidor BPEL
Para configurar uma conta de email no servidor BPEL é necessário colocar um arquivo de configuração no seguinte diretório:

    \bpel\domains\default\metadata\MailService

Onde:

  • default é o nome do domínio onde o processo será disponibilizado
  • metadata e MailService são dois novos diretórios que devem ser criados

O arquivo de configuração deve ser um arquivo XML (com a extensão .xml) e pode ter qualquer nome, o que permite a criação de diversas contas de Email. O nome desse arquivo será o link entre a conta de email e  o processo BPEL.

Exemplo do arquivo de configuração:



Este arquivo de configuração suporta tanto o protocolo POP3 quanto o IMAP.


Criando o processo BPEL que será iniciado a partir da chegada de um novo e-mail
O primeiro passo é criar um processo assíncrono com a mensagem de entrada do tipo mailMessagem, esta mensagem está definida no schema Mail.xsd que pode ser encotrado em \bpel\system\xmllib.

Dica: O schema Mail.xsd pode ser acessado diretamente pelo browser de internet, através da URL: http://localhost:8888/orabpel/xmllib/Mail.xsd

Onde:
  • localhost é o servidor onde o BPEL está instalado; 
  • 8888 é a porta onde o BPEL foi instalado.
    O schema Mail.xsd faz import do schema common.xsd, então precisamos importá-lo também no projeto BPEL.

    Definindo o Mail Activation Agent
    O Mail Activation Agent irá fazer o polling em uma caixa de email (definida no arquivo de configuração) e irá disparar para cada email recebido uma nova instância do processo.

    Para fazer o link do processo com o arquivo de configuração, precisamos adicionar a seguinte definição no arquivo bpel.xml.


    Onde:
    • heartBeatInterval é a frequência, em segundos, do polling na caixa de email
    • accountName é o nome do arquivo de configuração que definimos anteriormente
    Feito! Agora é só fazer o deploy do processo e testar.


    Dica: Toda vez que você modificar o processo BPEL, o arquivo bpel.xml será gerado novamente, as alterações que você fez serão perdidas e seu processo nunca será inicializado. Então, sempre antes de fazer deploy, adicione novamente a definição do Mail Activation Agent.

    quinta-feira, 1 de outubro de 2009

    [Oracle BPM] "Bug" no mapa do processo de uma instância

    Esta semana estou dando um curso de Oracle BPM em Florianópolis, módulo Developer.

    Ao preparar o material para o treinamento estou aprendendo algumas coisas "novas". Pretendo escrever mais posts sobre estes aprendizados, mas o primeiro post vou dedicar a algo que parecia (e eu acreditava) ser um bug.

    Até então achava que existia um bug na ferramenta pois, na lista de trabalho, ao acessar o mapa do processo de uma instância só era marcado o trajeto entre atividades interativas, sempre que existia uma atividade automática no meio do fluxo o trajeto não era marcado em vermelho.

    Isso acontecia porque, por default, o Oracle BPM não gera eventos para todas as atividades apenas para atividades interativas. Para "corrigir" este "bug" siga os passos abaixo:
    • Clique com o botão direito sobre o seu processo e clique sobre "Properties";
    • Na aba "Advanced" marque a opção "Generate Events for All Activities".
    Pronto, agora é só executar o processo e ver que todo o trajeto da instância está marcado em vermelho.