Menu

quinta-feira, 15 de abril de 2021

Como resolver o erro br.gov.sp.fazenda.dsge.model.dao.util.DSGEDAOHelper.currentSession(DSGEDAOHelper.java:103) no Emissor de NF-e do Sebrae no Linux

Ontem precisei instalar o emissor de nota fiscal eletrônica do Sebrae no computador do meu pai. Ele faz vendas pelo Mercado Livre há muito tempo e recentemente passou a ser necessário que todo vendedor faça a emissão de NF-e. Há mais de 5 anos meus pais usam a distribuição Linux Ubuntu sem nenhum problema nesse período.

Eu tenho usado a distribuição Fedora nos últimos anos e testei a instalação no meu computador para identificar se ela seria possível. O próprio manual de instalação indica o suporte a Linux, então não imaginei ter problemas.

De fato, segui as instruções do manual e a instalação no Fedora funcionou sem problemas. Passei as mesmas instruções ao meu pai, mas surpreendentemente ocorreu um erro:

java.lang.NullPointerException
	at br.gov.sp.fazenda.dsge.model.dao.util.DSGEDAOHelper.currentSession(DSGEDAOHelper.java:103)
	at br.gov.sp.fazenda.dsge.model.dao.util.DSGEDAOHelper.beginTransaction(DSGEDAOHelper.java:130)
	at br.gov.sp.fazenda.dsge.model.dao.util.DSGEDAOInterceptorHelper.intercept(DSGEDAOInterceptorHelper.java:54)
	at br.gov.sp.fazenda.dsen.model.business.ParametroBusiness$$EnhancerByCGLIB$$4f0e102.carregaParametrosAppContext()
	at br.gov.sp.fazenda.dsen.model.facade.ParametroFacade.carregaParametrosAppContext(ParametroFacade.java:40)
	at br.gov.sp.fazenda.dsen.controller.DSENSystemController.c(DSENSystemController.java:104)
	at br.gov.sp.fazenda.dsen.controller.DSENSystemController.execAfterStartApp(DSENSystemController.java:67)
	at br.gov.sp.fazenda.dsge.controller.DSGESystemController.startApp(DSGESystemController.java:151)
	at br.gov.sp.fazenda.dsen.view.DSENDesktop$1.run(DSENDesktop.java:138)

A principio achei que fosse algo trivial, talvez a versão do Java ou algo assim, mas o erro se mostrou bem mais complicado para resolver.

Pesquisando no Google encontrei várias pessoas com o mesmo erro como [1], [2] e [3]. Alguns relatos são tem quase 13 anos e sugerem os mesmos passos do manual para criação do diretório /database e definição de permissão de acesso com o chmod ou então recomendam que seja utilizada outra versão do Java. Experimentei todas as soluções indicadas, mas nada resolveu o erro.

Após várias experiências para entender a razão do emissor funcionar apenas no Fedora, minha última suspeita estava na versão do icedtea-web. O Fedora é a única distribuição que já empacota a versão 2.0 alpha, enquanto praticamente todas as outras distribuições linux incluem apenas a versão 1.8 em seus repositórios.

Acessei o repositório do projeto no Github e constatei que não existiam pacotes deb para instalação da versão 2.0, estando disponível apenas o código fonte. As instruções para build do projeto também estavam desatualizadas e não funcionavam mais.

Essa tarefa, que concentra discussões sobre build da versão 2.0 que me ajudou a entender como fazer o build do icedtea. Para auxiliar quem se deparar com o mesmo problema e considerando que essa solução não está documentada em nenhum lugar, deixo as instruções abaixo.

Primeiro passo, instale as dependências para o build:

sudo apt install mvn git cargo openjdk-8-jdk

É importante destacar que o build funcionou apenas com a JDK8, não consegui fazer funcionar com a JDK11.

Por alguma razão, o build não utiliza a variável JAVA_HOME definida no ambiente, então é necessário definir a variável JRE:

export JRE=/usr/lib/jvm/java-8-openjdk-amd64

Execute o build do projeto utilizando o Maven:

mvn clean install -DskipTests -P launchers

Se o build ocorrer sem erros o executável javaws estará no diretório launchers/target/bin/ e poderá ser utilizado para executar o arquivo JNLP do emissor de NF-e.

Nenhum comentário :