Tratamento de falhas em processos automatizados no Oracle BPM

Processos automatizados com a utilização de Suítes de BPM (BPMS) podem trazer grandes benefícios para a organização através do controle e gerenciamento da execução das atividades, além da possibilidade de acionar ações em outros sistemas de informação da organização, como gravar ou obter dados importantes para as tarefas do processo.

Na implantação de uma solução automatizada, um dos aspectos técnicos mais importantes a serem planejados está relacionado ao gerenciamento das falhas que podem acontecer no decorrer da execução do processo.

Isto é fundamental para garantir que, em caso de falhas, o problema possa ser resolvido ou mitigado, evitando que o processo fique parado.

No Oracle BPM, existem situações em que você poderá encontrar problemas inesperados que levam seu processo automatizado a falhar. Uma destas situações são erros de sistemas na execução de um processo.

Erros de sistema são consequências de uma falha no software ou hardware onde o BPMN está rodando. Pode ser ocasionado por várias causas. Alguns exemplos de causas de erros de sistemas são:

  • Falha na conexão com o Banco de dados
  • Perda de conectividade
  • Problema com o disco rígido
  • Indisponibilidade de serviço sendo invocado

Para recuperar os erros de sistema é possível utilizar no Enterprise Manager a opção de recuperação de falhas.

Neste post será descrito um exemplo de como definir a política de erros para processos com problemas, que permitem intervenção de usuário.

Neste exemplo, é definida uma política de falhas onde a mesma será recuperada manualmente pelo Administrador. Por exemplo,  em um processo de compras, o usuário cadastra o orçamento solicitado pelo cliente informando os dados do cliente (endereço, cep, CPF/CNPJ) e dados da compra (produtos desejados e quantidades). Neste momento todos os itens solicitados no orçamento estão em estoque. O usuário envia este orçamento ao cliente e aguarda o retorno positivo ou negativo. Caso o retorno seja positivo, o processo segue seu fluxo normal. Uma tarefa de serviço automática é chamada para verificar se ainda existem os itens solicitados em estoque. Porém, o serviço que faz a validação do estoque estava fora do ar no momento em que o processo precisou. Com isso, gerou-se uma falha no fluxo do processo.

No Oracle BPM, são necessários dois arquivos para definir o que deve acontecer quando ocorre um erro na execução do processo BPMN:

  • fault-policies.xml
  • fault-bindings.xml

O uso destes arquivos devem ser configurados no composite do processo BPM e adicionados no diretório do processo.

No Oracle BPM 11g…

No Oracle BPM 11g, basta criar manualmente os dois arquivos dentro do diretório do processo (conforme figura abaixo).

Diretório - arquivos

Exemplo da configuração no composite.xml:

<component name="PocAprovadores">
    <implementation.bpmn src="processes/PocAprovadores.bpmn"/>
    <property name="oracle.composite.faultPolicyFile">fault-policies.xml</property>
    <property name="oracle.composite.faultBindingFile">fault-bindings.xml</property>
</component>

A ação de intervenção de usuário é definida com a tag ora-humam-intervention no arquivo fault-policies.xml. Sem a política de falhas, as instancias BPMN não irão gerar falhas recuperáveis:

<faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <faultPolicy version="1.0" id="DefaultPolicy"
                xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns="http://schemas.oracle.com/bpel/faultpolicy"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Conditions>
      <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
                  name="bpelx:bindingFault">
           <condition>
               <action ref="ora-human-intervention"/>
           </condition>
       </faultName>
       <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
                  name="bpelx:remoteFault">
           <condition>
               <action ref="ora-human-intervention"/>
           </condition>
       </faultName>
       <faultName xmlns:task="http://xmlns.oracle.com/bpel/workflow/taskService"
                  name="task:operationErroredFault">
           <condition>
               <action ref="ora-human-intervention"/>
           </condition>
       </faultName>
       <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
                  name="bpelx:selectionFailure">
           <condition>
               <action ref="ora-human-intervention"/>
           </condition>
       </faultName>
       <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
                  name="bpelx:runtimeFault">
           <condition>
               <action ref="ora-human-intervention"/>
           </condition>
       </faultName>
       <faultName>
           <condition>
               <action ref="ora-human-intervention"/>
           </condition>
       </faultName>
   </Conditions>
   <Actions>
           <Action id="ora-human-intervention">
               <humanIntervention/>
           </Action>
           <Action id="ora-rethrow-fault">
                <rethrowFault/>
           </Action>
           <Action id="ora-terminate">
                <abort/>
           </Action>
           <Action id="ora-replay-scope">
                <replayScope/>
           </Action>
           <Action id="ora-retry">
               <retry>
                   <retryCount>5</retryCount>
                   <retryInterval>10</retryInterval>
                   <exponentialBackoff/>
                   <retryFailureAction ref="ora-human-intervention"/>
               </retry>
           </Action>
   </Actions>
   </faultPolicy>
</faultPolicies>

Onde “retryCount” é a quantidade de vezes que vai tentar recuperar o erro, “retryInterval” é o tempo programador de intervalo entre as tentativas de recuperação do erro, “retryFailureAction“ é a ação que será tomada se todas as tentativas de recuperação de erros falharem.

O arquivo fault-bindings associa a política de falhas definidas no arquivo fault-policies.xml ao composite do processo:

<faultPolicyBindings version="1.0"
                    xmlns="http://schemas.oracle.com/bpel/faultpolicy"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <composite faultPolicy="DefaultPolicy"/>
</faultPolicyBindings>

Uma vez definida a intervenção de usuário como ação, é possível recuperar as falhas no Enterprise Manager.

NO ORACLE BPM 12c…

No Oracle BPM 12c, existe uma nova opção da criação do arquivo fault-policies pelo JDeveloper.  Toda vez que é criado um arquivo fault-policies pelo editor, você basicamente está criando um novo arquivo XML com a política de falhas padrão. Ou seja, criando o arquivo fault-policies.xml na pasta do processo.

Através do JDeveloper, este arquivo pode ser configurado pelo editor de forma amigável.

Fault-Policies Oracle 12 c As falhas são categorizadas na seção “Fault Handler” em “System faults” – bindings faults, mediator faults and remote faults – e “Service Faults” – uma lista de falhas definidas pelo WSDL que seu composite utiliza.

Para cada tratamento de exceção é possível selecionar uma ação padrão, da lista de ações definidas.

Nota: assim como no 11g, para que o processo identifique e use o tratamento de erros, é preciso criar manualmente o arquivo fault-bindings.xml e relacionar a política criada.

Também é preciso configurar manualmente os arquivos de tratamentos de falhas no composite.xml.


Referências:

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>