Ir para conteúdo
  • Cadastre-se

dev botao

Erro ACbrLib Boleto .so Multi Thread


Ver Solução Respondido por Daniel InfoCotidiano,

Recommended Posts

  • Membros Pro
Postado

Boa tarde Srs.

Estou utilizando o boleto em um ambiente Linux (arquivo .so).
Até então venho utilizando o .so que se encontra na pasta Cdecl ou StdCall.
Funcionando tudo normal desta forma.
Só pelo fato de eu alterar o .so, utilizando a mesma versão, para o que se encontra na pasta MT/Linux ocorre o erro abaixo.
Como deu o erro e já estou em ambiente de produção, voltei com o .so que funciona para dar continuidade. Já viram algo parecido?

 

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f236ec4c37b, pid=1489, tid=1514
#
# JRE version: OpenJDK Runtime Environment (11.0.24+8) (build 11.0.24+8-post-Ubuntu-1ubuntu322.04)
# Java VM: OpenJDK 64-Bit Server VM (11.0.24+8-post-Ubuntu-1ubuntu322.04, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# C  [libacbrboleto64.so+0x24c37b]
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /home/ubuntu/core.1489)
#
# An error report file with more information is saved as:
# /home/ubuntu/hs_err_pid1489.log
#
# If you would like to submit a bug report, please visit:
#   https://bugs.launchpad.net/ubuntu/+source/openjdk-lts
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

Att

  • Consultores
Postado

Boa tarde!

Não basta apenas alterar o .so.

Também existe uma diferença na forma como você faz o bind e a chamada dos métodos, pois na Lib MT, você precisa passar um ponteiro como Handle.

Mais detalhes em ACBrLib e MultiThread

  • Curtir 2
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 !!

  • Consultores
  • Solution
Postado

@Messias Bittencourt
Apenas complementando o que o @Diego Foliene citou, existe exemplos em java (MT) é multithread.
https://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/Java/Boleto/Demo/ACBrLibBoletoMT.Demo/
cada requisição recebida na sua api, vc vai criar um "ponteiro" como o diego citou e todos os metodos vc vai usar o mesmo ponteiro. assim vc vai identificar para qual requisição é a resposta (ponteiro)
Exemplo: (estou mostrando o CEP, mas é só para vc abstrair a ideia)

acbr_lib.CEP_Inicializar(ponteiro,"/00111222000195/acbrlib.ini","")
acbr_lib.CEP_ConfigGravarValor(ponteiro,"Principal", "TipoResposta", "2")
acbr_lib.CEP_BuscarPorCEP(ponteiro, "13930000", sResposta, ctypes.byref(esTamanho))
acbr_lib.CEP_Finalizar(ponteiro)

  • Curtir 1
Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Membros Pro
Postado
23 horas atrás, Diego Foliene disse:

Boa tarde!

Não basta apenas alterar o .so.

Também existe uma diferença na forma como você faz o bind e a chamada dos métodos, pois na Lib MT, você precisa passar um ponteiro como Handle.

Mais detalhes em ACBrLib e MultiThread

Muito obrigado pelo esclarecimento Diego.
Eu não sabia desta implementação com uso de ponteiros.

Já o estou implementando aqui.

Muito obrigado.

9 horas atrás, Daniel InfoCotidiano disse:

@Messias Bittencourt
Apenas complementando o que o @Diego Foliene citou, existe exemplos em java (MT) é multithread.
https://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/Java/Boleto/Demo/ACBrLibBoletoMT.Demo/
cada requisição recebida na sua api, vc vai criar um "ponteiro" como o diego citou e todos os metodos vc vai usar o mesmo ponteiro. assim vc vai identificar para qual requisição é a resposta (ponteiro)
Exemplo: (estou mostrando o CEP, mas é só para vc abstrair a ideia)

acbr_lib.CEP_Inicializar(ponteiro,"/00111222000195/acbrlib.ini","")
acbr_lib.CEP_ConfigGravarValor(ponteiro,"Principal", "TipoResposta", "2")
acbr_lib.CEP_BuscarPorCEP(ponteiro, "13930000", sResposta, ctypes.byref(esTamanho))
acbr_lib.CEP_Finalizar(ponteiro)

Muito obrigado pelas orientações Daniel.

 

  • Curtir 3
  • 2 meses depois ...
  • Membros Pro
Postado
Em 29/08/2024 at 17:26, Messias Bittencourt disse:

Muito obrigado pelo esclarecimento Diego.
Eu não sabia desta implementação com uso de ponteiros.

Já o estou implementando aqui.

Muito obrigado.

Muito obrigado pelas orientações Daniel.

 

Bom dia.

Gostaria de saber se existe algum outro procedimento que pode ser adotado.

Mesmo seguinte à risca as orientações, o problema persiste.

Na realidade é intermitente. Ele começa funcionando normalmente mas de uma hora para outra surge o erro. E após o erro apenas reiniciando a aplicação.

  • Consultores
Postado

consegue gerar um exemplo basico para que possamos executar aqui em nosso ambiente?
Qual a linguagem q vc utiliza ?
pois nao temos relatos por enq de probemas na lib MT para linux.
 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...