Pular para o conteúdo principal

Serviço Criminal Local (On-Prem)

Público-alvo: Equipes de infraestrutura e DevOps dos tribunais que farão a implantação local do Serviço Criminal.

Pré-requisito de código: As alterações descritas na análise técnica devem estar implementadas e implantadas antes de executar qualquer etapa deste guia.

Visão Geral

O Módulo Criminal pode operar em dois modos:

ModoDescrição
Nacional (padrão)O PJe do tribunal se comunica com o Serviço Criminal hospedado na infraestrutura do CNJ via API Gateway.
Local (on-prem)O tribunal hospeda sua própria instância do Serviço Criminal. O PJe aponta diretamente para ela, e o Criminal Local consome apenas as mensagens do próprio tribunal via RabbitMQ.

A habilitação do modo local exige configuração em quatro componentes:

  1. PJe — apontar clients REST criminais para a URL local
  2. Serviço Criminal Local — filtrar mensagens AMQP apenas do tribunal
  3. pje2-web — usar URL local no frontend Angular através de parâmetro do PJe
  4. Criminal Nacional — ignorar mensagens do tribunal que foi migrado para local

Conceitos Necessários

appName

Cada instância do PJe possui um identificador único chamado appName, configurado via variável de ambiente ENV_PJE2_CLOUD_APP_NAME (ou pje2.cloud.appName no integracao.properties). Por convenção, o formato é pje-<sigla-tribunal-em-minúsculas>, por exemplo:

TribunalappName
TJMGpje-tjmg
TJSPpje-tjsp
TJBApje-tjba
cuidado

Confirme o appName da instância PJe do seu tribunal antes de prosseguir — ele é usado como filtro AMQP.

Routing Key AMQP

As mensagens publicadas pelo PJe no RabbitMQ seguem o padrão:

<JTR>.<GRAU>.<appName>.<MODELO>.<VERBO>

Exemplo para o TJMG (JTR 160, 2º grau):

160.2.pje-tjmg.ProcessoParte.POST

O Criminal Local usa esse padrão para filtrar somente as mensagens do próprio tribunal.

Etapa 1 — Configurar o PJe

O PJe precisa saber qual URL usar para as chamadas ao Serviço Criminal. Isso é feito via variável de ambiente ou propriedade de configuração.

Variável de ambiente (recomendado)

Adicione ao ambiente de execução do JBoss/WildFly:

ENV_PJE2_CLOUD_URL_CRIMINAL=https://<url-do-criminal-local-do-tribunal>

Exemplo:

ENV_PJE2_CLOUD_URL_CRIMINAL=https://criminal.tjxx.jus.br

Alternativa: integracao.properties

Se o tribunal preferir configurar via arquivo de propriedades em vez de variável de ambiente:

pje2.cloud.urlCriminal=https://criminal.tjmg.jus.br
info

Comportamento de fallback: Se ENV_PJE2_CLOUD_URL_CRIMINAL e pje2.cloud.urlCriminal não estiverem definidos, o PJe continuará usando o API Gateway nacional — o Criminal Local simplesmente não será acionado.

Convenção importante: sufixo /criminal/

O CriminalRestClient acrescenta automaticamente o sufixo /criminal/ ao path das requisições. A URL configurada não deve incluir esse sufixo. Exemplos:

CorretoIncorreto
https://criminal.tjxx.jus.brhttps://criminal.tjxx.jus.br/criminal/

Reinicialização

Após definir a variável, reinicie o servidor de aplicações do PJe para que a configuração seja lida.

Etapa 2 — Configurar o Serviço Criminal Local

O Serviço Criminal Local é uma aplicação Spring Boot. Toda a configuração é feita por variáveis de ambiente que sobrescrevem os valores padrão do application.yml.

2.1 Configurações obrigatórias

Banco de dados

VariávelDescrição
CRIMINAL_DB_URLURL JDBC do banco PostgreSQL
CRIMINAL_DB_USERUsuário do banco
CRIMINAL_DB_PASSWORDSenha do banco

RabbitMQ

VariávelDescrição
CRIMINAL_RABBITMQ_HOSTHost do broker RabbitMQ
CRIMINAL_RABBIT_USERNAMEUsuário do RabbitMQ
CRIMINAL_RABBIT_PASSWORDSenha do RabbitMQ
CRIMINAL_RABBIT_VHOSTVirtual host

Keycloak / SSO

VariávelDescrição
SSO_AUTH_SERVERURL do servidor Keycloak
SSO_REALMRealm
SSO_RESOURCEClient ID

Eureka (Service Discovery)

VariávelDescrição
EUREKA_CLIENT_ENABLEDDesabilitar o registro no Eureka

2.2 Configuração do filtro AMQP — crítico

Esta é a configuração que distingue o Criminal Local do Nacional.

O Criminal Local deve consumir apenas as mensagens do próprio tribunal.

Defina as seguintes variáveis com o appName do PJe do tribunal:

CRIMINAL_AMQP_ROUTING_KEY_PROCESSO_PARTE=*.*.pje-tjmg.ProcessoParte.*
CRIMINAL_AMQP_ROUTING_KEY_PROCESSO_EVENTO=*.*.pje-tjmg.ProcessoEvento.*

Substitua pje-tjmg pelo appName real do tribunal (ver conceito de appName).

atenção

Comportamento de fallback: Se essas variáveis não forem definidas, os padrões *.*.*.ProcessoParte.* e *.*.*.ProcessoEvento.* serão usados — o serviço consumirá mensagens de todos os tribunais, o que é o comportamento do Criminal Nacional.

Variáveis AMQP completas (com valores padrão)

VariávelPadrãoValor para local
CRIMINAL_AMQP_QUEUEpje.criminalPode usar um nome distinto, ex.: pje.criminal.tjxx
CRIMINAL_AMQP_EXCHANGEpje.exchangeManter pje.exchange
CRIMINAL_AMQP_ROUTING_KEY_PROCESSO_PARTE*.*.*.ProcessoParte.**.*.pje-tjxx.ProcessoParte.*
CRIMINAL_AMQP_ROUTING_KEY_PROCESSO_EVENTO*.*.*.ProcessoEvento.**.*.pje-tjxx.ProcessoEvento.*
dica

Use um nome de fila distinto (ex.: pje.criminal.tjxx) para evitar conflito com a fila do Criminal Nacional caso ambos estejam conectados ao mesmo broker.

2.3 Configurações opcionais

VariávelPadrãoDescrição
CRIMINAL_PORT8480Porta HTTP do serviço
CRIMINAL_MANAGEMENT_PORT8480Porta de gerenciamento (Actuator)
CRIMINAL_APP_NAMEcriminalNome da aplicação no Eureka
SEEU_WSDLURL nacionalWSDL de integração com o SEEU
ASSINADOR_URLURL nacionalURL do serviço de assinatura A1

Etapa 3 — Configurar o pje2-web (Frontend Angular)

O frontend Angular do PJe2 precisa saber a URL do Criminal Local para montar as requisições corretamente.

3.1 Cadastrar o parâmetro no banco do PJe

O parâmetro ENV_PJE2_CLOUD_URL_CRIMINAL deverá ser criado pelo Flyway ou outro script de migração do PJe.

O valor do parâmetro deve ser ajustado de acordo com a URL do criminal local.

cuidado

O nome do parâmetro deve ser exatamente ENV_PJE2_CLOUD_URL_CRIMINAL (sensível a maiúsculas/minúsculas).

3.2 Verificar via interface administrativa

Alternativamente, o parâmetro pode ser cadastrado ou atualizado pela interface administrativa do PJe2, no menu de configuração de parâmetros do sistema.

3.3 Comportamento de fallback

Se o parâmetro ENV_PJE2_CLOUD_URL_CRIMINAL não existir ou estiver vazio, o frontend continuará usando AppConfig.getUrlApiGateway() — ou seja, o Gateway nacional.

Etapa 4 — Atualizar o Criminal Nacional

Após habilitar o Criminal Local, o Criminal Nacional continuará recebendo as mensagens do mesmo tribunal (pois o padrão *.*.*.ProcessoParte.* abrange qualquer appName). Para evitar processamento duplicado:

4.1 Adicionar o tribunal à lista de exclusão

No Criminal Nacional, adicione o appName do tribunal à variável de ambiente:

CRIMINAL_AMQP_APPNAMES_IGNORADOS=pje-tjmg

Para múltiplos tribunais com Criminal Local, separe por vírgula:

CRIMINAL_AMQP_APPNAMES_IGNORADOS=pje-tjmg,pje-tjsp,pje-tjba

4.2 Reinicialização

Reinicie o Criminal Nacional para que o filtro seja aplicado.

perigo

Se esta etapa for omitida, o Criminal Nacional processará as mensagens do tribunal em paralelo com o Criminal Local, resultando em duplicidade de dados.

Resumo das Variáveis por Componente

PJe (JBoss/WildFly)

VariávelObrigatóriaDescrição
ENV_PJE2_CLOUD_URL_CRIMINALSimURL base do Criminal Local (sem sufixo /criminal/)

Serviço Criminal Local (Spring Boot)

VariávelObrigatóriaDescrição
CRIMINAL_DB_URLSimJDBC URL do PostgreSQL
CRIMINAL_DB_USERSimUsuário do banco
CRIMINAL_DB_PASSWORDSimSenha do banco
CRIMINAL_RABBITMQ_HOSTSimHost do RabbitMQ
CRIMINAL_RABBIT_USERNAMESimUsuário do RabbitMQ
CRIMINAL_RABBIT_PASSWORDSimSenha do RabbitMQ
CRIMINAL_RABBIT_VHOSTSimVirtual host do RabbitMQ
SSO_AUTH_SERVERSimURL do Keycloak
SSO_REALMSimRealm do Keycloak
CRIMINAL_AMQP_ROUTING_KEY_PROCESSO_PARTESimFiltro AMQP — *.*.pje-<tribunal>.ProcessoParte.*
CRIMINAL_AMQP_ROUTING_KEY_PROCESSO_EVENTORecomendadoFiltro AMQP — *.*.pje-<tribunal>.ProcessoEvento.*
CRIMINAL_AMQP_QUEUERecomendadoNome de fila distinto, ex.: pje.criminal.tjxx

Criminal Nacional (Spring Boot)

VariávelObrigatóriaDescrição
CRIMINAL_AMQP_APPNAMES_IGNORADOSSimLista de appNames dos tribunais com criminal local

Ordem de Execução Recomendada

  1. Implantar o Serviço Criminal Local e configurar banco de dados, SSO e Eureka
  2. Configurar as variáveis AMQP com o routing key específico do tribunal
  3. Iniciar o Criminal Local e verificar os logs de conexão com RabbitMQ
  4. Cadastrar o parâmetro URL_CRIMINAL_LOCAL no banco do PJe2
  5. Definir ENV_PJE2_CLOUD_URL_CRIMINAL no PJe e reiniciar o servidor de aplicações
  6. Atualizar CRIMINAL_AMQP_APPNAMES_IGNORADOS no Criminal Nacional e reiniciá-lo
  7. Executar testes de validação (ver seção abaixo)

Validação

Verificar conectividade PJe → Criminal Local

Acesse um processo criminal no PJe2. Se os dados criminais carregarem sem erros de rede, a configuração do PJe e do pje2-web está correta.

Para confirmar qual URL está sendo usada, verifique os logs do servidor de aplicações PJe — as chamadas criminais devem mostrar a URL local configurada, não o gateway nacional.

Verificar consumo AMQP no Criminal Local

Nos logs do Criminal Local, ao tramitar um processo criminal, deve aparecer:

[PJE-CLOUD-EVENT] ... appName: pje-tjmg ...

Se aparecer Não foi possível identificar o tribunal, verifique se o appName configurado no RabbitMQ routing key corresponde exatamente ao ENV_PJE2_CLOUD_APP_NAME definido no PJe.

Verificar que o Criminal Nacional não está duplicando

Nos logs do Criminal Nacional, mensagens do tribunal migrado devem aparecer com:

Tribunal pje-tjmg possui criminal local. Descartando mensagem.

Troubleshooting

SintomaCausa provávelSolução
Frontend continua usando o gateway nacionalParâmetro ENV_PJE2_CLOUD_URL_CRIMINAL ausente ou vazioCadastrar o parâmetro no banco (Etapa 3)
PJe envia requisições para o gateway nacionalENV_PJE2_CLOUD_URL_CRIMINAL não definidoDefinir a variável e reiniciar o JBoss
Criminal Local recebe mensagens de outros tribunaisCRIMINAL_AMQP_ROUTING_KEY_PROCESSO_PARTE usa padrão global *.*.*Configurar routing key específico do tribunal
Criminal Nacional continua processando o tribunalCRIMINAL_AMQP_APPNAMES_IGNORADOS não atualizadoAdicionar appName e reiniciar o Nacional
Dados criminais duplicadosEtapa 4 omitida antes da Etapa 5Atualizar Nacional antes de ativar o Local
Erro 404 nas chamadas REST criminaisURL configurada inclui /criminal/Remover o sufixo da URL (ver Etapa 1)