Como descrito no Processamento por demanda, o processamento dos documentos é realizado através de um pool de Threads onde os dados para processamento são obtidos da memória do appserver do TSS, ou seja, ao invés de buscar registros na base de dados, as rotinas de processamento recebem os dados através de parâmetros, enviados pelas  rotinas de recepção dos documentos. Essa característica exige a criação uma contingência para casos de indisponibilidade de Threads ou em casos de falhas durante o processamento, pois todo o processo está sendo realizado com dados em memoria da aplicação.        

A indisponibilidade de Threads para processamento pode ocorrer em casos de alta demanda de Processamento de requisições, já as falhas de processamento podem ser provocadas devido à  fatores que possam provocar a interrupção do processamento. Seja por falha de acesso a serviços externos de integração com a aplicação(como a indisponibilidade dos serviços do Fisco de documentos: Sefaz, Prefeituras etc...  ) ou até mesmo pela queda(desligamento) do servidor da aplicação. 

Para que haja a contingência do processamento, os dados para processamento são persistidos na base de dados. Todas requisições referente a processamento de documentos geram Processos dentro do TSS. E é através desses Processos que o Job de Contingência garantirá o processamento. O fato de todos os Processos serem gravados na tabela de processos, faz com que o JOB filtre os registros para processamento. O filtro é realizado através do Status de processamento do documento.

Os processos são gravados com "Status = 2: ( Em processamento )". Em caso de falha,  a execução atual do Processo é encerrada e o Status passa para "Status= 1(Aguardando Processamento)" para que o JOB possa dar continuidade no processamento.

Porém as situações em que a interrupção do processamento  ocorra de forma involuntária, impossibilita a atualização do STATUS, exigindo que  o JOB utiliza outros critérios para o Filtro dos registros. Neste caso além do STATUS, o JOB compara a data e horário atual com a data e horário do início do processamento e caso tenha ultrapassado 5 minutos, o registro será reprocessado. 

 

No exemplo abaixo temos uma ilustração de um processo de Emissao de NFe. onde o Processamento por Demanda foi interrompido no Sub Processo de Consulta de retorno do processamento na Sefaz. Neste caso o JOB de Contingência garante o reprocessamento a partir do Sub Processo que apresentou a falha.

 

 

 

 

Fluxo do Processo:

 

1 -  Rotina de Recepção  realiza a remessa do documento na Tabela de Negócio.

2 - Rotina de Recepção gera e grava o Processo na tabela de Processos

3 - Rotina de Recepção dispara a execução da Rotina de Processamento por Demanda

4 - Rotina de Processamento por Demanada executa Rotina responsável pela execução do Processo.  

5 -  O processamento por Demanda é interrompido no Sub Processo de Consulta do documento

6 -  O registro do Processo é retornado na consulta realizada pelo JOB na tabela de Processos

7 - O JOB de Contingência reinicia o processamento a partir do Sub Processo que apresentou a falha.