Ir para conteúdo
  • Cadastre-se

dev botao

Fatal Error - Utilizando Boleto + Pix + CEP no mesmo server


Ver Solução Respondido por Diego Foliene,

Recommended Posts

  • Membros Pro
Postado

Bom dia.

Gostaria de solicitar uma análise no erro citado abaixo.

Instalei no mesmo server linux (VERSION="22.04.4 LTS (Jammy Jellyfish)") e no mesmo tomcat (apache-tomcat-10.1.24) os três wars (java 11) consumindo os .so de boleto, pix e cep.

Quando utilizo as versões dos wars que consomem os arquivos .so comuns (sem ser Multi Thread) tudo funciona normalmente. Mas quando coloco os 3 wars, ou pelo menos um deles, como sendo Multi Thread acontece a situação abaixo (exemplos):

* Executo a chamada de um serviço do BOLETO MT, por exemplo, o gerar cobrança. Este funciona normalmente e gera com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio BOLETO também funciona. Mas se eu executar qualquer serviço do PIX ou do CEP é gerado um Fatal error na dll do BOLETO.

* Executo a chamada de um serviço do PIX MT, por exemplo, o gerar cobrança. Este funciona normalmente e gera com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio PIX também funciona. Mas se eu executar qualquer serviço do BOLETO ou do CEP é gerado um Fatal error na dll do PIX.

* Executo a chamada de um serviço do CEP MT, por exemplo, o consultar por cep. Este funciona normalmente e retorna com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio CEP também funciona. Mas se eu executar qualquer serviço do BOLETO ou do PIX é gerado um Fatal error na dll do CEP.

RESUMO: O primeiro .so MT instanciado funciona normalmente. Quando executo de um segundo .so MT (ou não) ele gera Fatal error no .so do primeiro que funcionou corretamente. Isto acontece apenas quando utilizo mais de um war e que pelo menos um esteja consumindo a versão MT. Não sei se está ocorrendo um conflito entre a primeira e segunda instância...
Observação 01: Se eu colocar todos sem consumir o MT todos funcionam normalmente;
Observação 02: Quando utilizo mais de 1 war e pelo menos 1 MT, obrigatoriamente tive de copiar os .so para a pasta default de libs do Linux. Se eu usar o comum (sem ser MT), é respeitado o endereço do .so que se encontra no .ini;
Observação 03: Ao ser gerado o primeiro Fatal error nenhum mais é possível instanciar;
Observação 04: Nada é gerado no log da biblioteca. Apenas no log do tomcat. Seguem os erros separados e que ocorrem de forma alternada.

Fatal_libacbrboleto64.logFatal_libacbrpixcd64.logFatal_liblibacbrcep64.log

Poderiam me auxiliar nesta?

Att

  • Consultores
Postado
47 minutos atrás, Messias Bittencourt disse:

Bom dia.

Gostaria de solicitar uma análise no erro citado abaixo.

Instalei no mesmo server linux (VERSION="22.04.4 LTS (Jammy Jellyfish)") e no mesmo tomcat (apache-tomcat-10.1.24) os três wars (java 11) consumindo os .so de boleto, pix e cep.

Quando utilizo as versões dos wars que consomem os arquivos .so comuns (sem ser Multi Thread) tudo funciona normalmente. Mas quando coloco os 3 wars, ou pelo menos um deles, como sendo Multi Thread acontece a situação abaixo (exemplos):

* Executo a chamada de um serviço do BOLETO MT, por exemplo, o gerar cobrança. Este funciona normalmente e gera com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio BOLETO também funciona. Mas se eu executar qualquer serviço do PIX ou do CEP é gerado um Fatal error na dll do BOLETO.

* Executo a chamada de um serviço do PIX MT, por exemplo, o gerar cobrança. Este funciona normalmente e gera com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio PIX também funciona. Mas se eu executar qualquer serviço do BOLETO ou do CEP é gerado um Fatal error na dll do PIX.

* Executo a chamada de um serviço do CEP MT, por exemplo, o consultar por cep. Este funciona normalmente e retorna com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio CEP também funciona. Mas se eu executar qualquer serviço do BOLETO ou do PIX é gerado um Fatal error na dll do CEP.

RESUMO: O primeiro .so MT instanciado funciona normalmente. Quando executo de um segundo .so MT (ou não) ele gera Fatal error no .so do primeiro que funcionou corretamente. Isto acontece apenas quando utilizo mais de um war e que pelo menos um esteja consumindo a versão MT. Não sei se está ocorrendo um conflito entre a primeira e segunda instância...
Observação 01: Se eu colocar todos sem consumir o MT todos funcionam normalmente;
Observação 02: Quando utilizo mais de 1 war e pelo menos 1 MT, obrigatoriamente tive de copiar os .so para a pasta default de libs do Linux. Se eu usar o comum (sem ser MT), é respeitado o endereço do .so que se encontra no .ini;
Observação 03: Ao ser gerado o primeiro Fatal error nenhum mais é possível instanciar;
Observação 04: Nada é gerado no log da biblioteca. Apenas no log do tomcat. Seguem os erros separados e que ocorrem de forma alternada.

Fatal_libacbrboleto64.log 974 B · 1 download Fatal_libacbrpixcd64.log 973 B · 0 downloads Fatal_liblibacbrcep64.log 974 B · 0 downloads

Poderiam me auxiliar nesta?

Att

Verifique se no ACBrLib.ini (https://acbr.sourceforge.io/ACBrLib/Geral.html)
LogNivel = 4 (Paranoico)
LogPath = (path válido)

O erro me parece ser falha de segmentação. Uma possível solução é usar um depurador para identificar a linha que está causando a falha.

Verifique:

  • Ajuste a Configuração de Memória do Tomcat. Como você está rodando três aplicações no mesmo Tomcat, verifique se a configuração de memória (heap size, permgen/metaspace) está adequada para suportar todas as aplicações.
  • Certifique-se de que o código não tenta ler ou escrever em locais de memória que não estão alocados ou estão fora dos limites.
  • O seu programa é multi-threaded, verifique se há condições de corrida ou falta de sincronização adequada, que podem levar a falhas de segmentação.
  • Verifique as permissões de leitura e escrita para as pastas.
  • Certifique-se de que os ponteiros estão devidamente inicializados e que não são desreferenciados quando estão nulos (NULL).
  • Ajustes no CATALINA_OPTS ou JAVA_OPTS podem ser necessários. Valores de exemplo: export CATALINA_OPTS="-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m" 

 O que você pode fazer é testar o programa Exemplo MT em Java que está disponível no SVN, apenas para referência. 

  • Curtir 1
  • Membros Pro
Postado
2 horas atrás, Júlio Cavalcanti disse:

Verifique se no ACBrLib.ini (https://acbr.sourceforge.io/ACBrLib/Geral.html)
LogNivel = 4 (Paranoico)
LogPath = (path válido)

O erro me parece ser falha de segmentação. Uma possível solução é usar um depurador para identificar a linha que está causando a falha.

Verifique:

  • Ajuste a Configuração de Memória do Tomcat. Como você está rodando três aplicações no mesmo Tomcat, verifique se a configuração de memória (heap size, permgen/metaspace) está adequada para suportar todas as aplicações.
  • Certifique-se de que o código não tenta ler ou escrever em locais de memória que não estão alocados ou estão fora dos limites.
  • O seu programa é multi-threaded, verifique se há condições de corrida ou falta de sincronização adequada, que podem levar a falhas de segmentação.
  • Verifique as permissões de leitura e escrita para as pastas.
  • Certifique-se de que os ponteiros estão devidamente inicializados e que não são desreferenciados quando estão nulos (NULL).
  • Ajustes no CATALINA_OPTS ou JAVA_OPTS podem ser necessários. Valores de exemplo: export CATALINA_OPTS="-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m" 

 O que você pode fazer é testar o programa Exemplo MT em Java que está disponível no SVN, apenas para referência. 

Bom dia Júlio.

Obrigado pelas informações e irei testar com estas alterações no tomcat. Em relação ao inicializar observe como está meu método:
image.thumb.png.9e575f0e4c06081c1066fb2d22a65e74.png

 

Agora, Messias Bittencourt disse:

Bom dia Júlio.

Obrigado pelas informações e irei testar com estas alterações no tomcat. Em relação ao inicializar observe como está meu método:
image.thumb.png.9e575f0e4c06081c1066fb2d22a65e74.png

Este inicializar eu chamo ele a cada serviço executado: No inicio do método que gera um boleto eu chamo este inicializar. Assim como o chamo também no início do método de consultar boleto. Está correto?

2 minutos atrás, Messias Bittencourt disse:

Bom dia Júlio.

Obrigado pelas informações e irei testar com estas alterações no tomcat. Em relação ao inicializar observe como está meu método:
image.thumb.png.9e575f0e4c06081c1066fb2d22a65e74.png

 

Este inicializar eu chamo ele a cada serviço executado: No inicio do método que gera um boleto eu chamo este inicializar. Assim como o chamo também no início do método de consultar boleto. Está correto?

ou seja, eu inicializo a biblioteca passando um ponteiro a cada serviço chamado certo?

  • Consultores
Postado
1 hour ago, Messias Bittencourt said:

No inicio do método que gera um boleto eu chamo este inicializar. Assim como o chamo também no início do método de consultar boleto. Está correto?

Boa tarde.

A lógica é:

Inicializa a biblioteca > Executa o que precisa fazer > Finaliza a biblioteca.

Você pode inicializar ela só uma vez quando inicia sua aplicação e finalizar ela quando encerra a aplicação.

Se preferir esta abordagem em que você precisa finalizar ela também.

Mas você não precisa fazer a cada chamada, por exemplo:

Boleto_Inicializar
Boleto_ConfigurarDados
Boleto_Inicializar
Boleto_Imprimir

Você pode fazer:

Boleto_Inicializar
Boleto_ConfigurarDados
Boleto_Imprimir
Boleto_Finalizar

 

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado
1 hora atrás, Diego Foliene disse:

Boa tarde.

A lógica é:

Inicializa a biblioteca > Executa o que precisa fazer > Finaliza a biblioteca.

Você pode inicializar ela só uma vez quando inicia sua aplicação e finalizar ela quando encerra a aplicação.

Se preferir esta abordagem em que você precisa finalizar ela também.

Mas você não precisa fazer a cada chamada, por exemplo:

Boleto_Inicializar
Boleto_ConfigurarDados
Boleto_Inicializar
Boleto_Imprimir

Você pode fazer:

Boleto_Inicializar
Boleto_ConfigurarDados
Boleto_Imprimir
Boleto_Finalizar

 

Boa tarde e obrigado!

Quando vc diz que "Você pode inicializar ela só uma vez quando inicia sua aplicação e finalizar ela quando encerra a aplicação." quer dizer da aplicação mesmo?
Por exemplo: ao subir o .war no tomcat eu inicializo apenas no start e depois basta usar? Pq meu tomcat ficará meses sem restart por exemplo. Então neste tempo todas as consultas, gerações de boleto, cancelamentos utilizaram aqele obj inicializado no start do server?

Ou vc quis dizer chamadas à minha aplicação?

  • Consultores
  • Solution
Postado

Boa tarde.

On 9/4/2024 at 2:03 PM, Messias Bittencourt said:

quer dizer da aplicação mesmo?

Sim, no exemplos que temos disponíveis em nosso SVN, por exemplo, é assim. 

On 9/4/2024 at 2:03 PM, Messias Bittencourt said:

ao subir o .war no tomcat eu inicializo apenas no start e depois basta usar? Pq meu tomcat ficará meses sem restart por exemplo. Então neste tempo todas as consultas, gerações de boleto, cancelamentos utilizaram aqele obj inicializado no start do server?

Se não ocorrer nenhum problema sim, ele vai usar essa mesma instância.

Se você preferir, você também pode criar uma instância a cada ação, mas precisa lembrar de finalizar ela.

Vamos supor que eu quero seguir a abordagem em que crio um instância para cada ação e eu vou adicionar em minha aplicação um botão que vai carregar as informações de um boleto que ao clicar vai carregar um ini na lib e imprimir.

O código do botão vai ser os métodos em ordem:

BOLETO_Inicializar;

BOLETO_IncluirTitulos;

BOLETO_Imprimir;

BOLETO_Finalizar;

Veja que eu inicializei a biblioteca, fiz o que queria e finalizei ela.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.