terça-feira, 6 de abril de 2010

[Oracle BPEL] A instância do meu processo sumiu!

Alguma vez você disparou um processo BPEL e não encontrou a instância do processo no BPEL Console?
Isto ocorre quando o processo BPEL lança alguma exceção (não tratada) antes da instância ser persistida no schema de banco da engine (orabpel).

Para resolver este problema podemos forçar a persistência (dehydration) da instância. Para persistir a instância adicionamos um componente "Java Embedding" logo após o inicio do processo BPEL, dentro deste componente utilizamos a função checkpoint(); conforme imagem abaixo:


A utilização desta função pode causar queda no desempenho do processo BPEL durante o tempo de execução devido à sobrecarga adicional para persistir o processo, porém garante que toda a instância iniciada do processo aparecerá no console. 

O BPEL console apresenta o estado da execução somente até o último ponto de persistência, logo alguns erros ainda assim necessitam o acompanhamento dos logs.

Abaixo relato 2 experiências recentes da utilização do checkpoint.

1) Em um processo, que não estava aparecendo no BPEL Console, adicionei a função de checkpoint antes de um "switch" e o processo simplesmente travou, não teve jeito de funcionar, mas foi só passar a função de checkpoint para depois do "switch" que tudo funcionou perfeitamente.

2) Eu desenvolvi um processo que fazia a chamada de um serviço dentro de um loop, algumas instâncias deste processo chamavam até 5 mil vezes este serviço (sim, era necessário). Naturalmente o processo ficou bem instável e volta e meia travava completamente. A solução que encontrei foi colocar o checkpoint dentro do loop, persistindo o processo a cada chamada do serviço, esta solução onerou o processo, porém a necessidade era garantir a invocação do serviço, independentemente do tempo de execução.


Os exemplos deste post foram executados no Oracle BPEL 10g (10.1.3.3)

Nenhum comentário:

Postar um comentário