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...