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.