Para Desenvolvedores

NullPointerException nas classes Lumis em serviço custamizado

Resolvido

Estou utilizando um serviço customizado que faz o import de um CSV e tenta salvar na tabela. Segue o log abaixo e serviço e csv em anexo. Versão do Lumis 11.2.0.

2019-06-07 09:56:48,051 INFO  0:0:0:0:0:0:0:1 admin   Rentabilidade Acumulada [Thread-131] br.com.b3.tesourodireto.service.rentabilidadeacumulada.ImportTask - Iniciando o processo de importação de deliveries.
2019-06-07 09:56:48,052 WARN  0:0:0:0:0:0:0:1 admin   Rentabilidade Acumulada [Thread-131] br.com.b3.tesourodireto.service.rentabilidadeacumulada.ImportTask - Preparando o arquivo rentabilidades.csv para importação...
2019-06-07 09:56:48,052 WARN  0:0:0:0:0:0:0:1 admin   Rentabilidade Acumulada [Thread-131] br.com.b3.tesourodireto.service.rentabilidadeacumulada.ImportTask - Importando estabelecimentos, endereços e deliveries, aguarde...
2019-06-07 09:56:48,075 INFO  0:0:0:0:0:0:0:1 admin   Rentabilidade Acumulada [LumisRequest - http-nio-9080-exec-2; url: [http://localhost:9080/main.jsp?lumPageId=00000000E00000000000000000000001&lumA=1&lumRTI=br.com.b3.tesourodireto.service.rentabilidadeacumulada.import&lumRTSI=8A80CB816B2EA5EC016B31DBB36C2EB3&lumII=8A80CB816B2EA5EC016B31E0F1F52EE4]; login: [admin]] org.hibernate.cache.StandardQueryCache - starting query cache at region: lumis.portal.audit.IAuditManager#query
2019-06-07 09:56:48,213 WARN  0:0:0:0:0:0:0:1 admin   Rentabilidade Acumulada [Thread-131] br.com.b3.tesourodireto.service.rentabilidadeacumulada.ImportTask - Finalizando a importação...
2019-06-07 09:56:48,413 DEBUG 0:0:0:0:0:0:0:1 admin   Rentabilidade Acumulada [LumisRequest - http-nio-9080-exec-2; url: [http://localhost:9080/main.jsp?lumPageId=00000000E00000000000000000000001&lumA=1&lumRTI=br.com.b3.tesourodireto.service.rentabilidadeacumulada.import&lumRTSI=8A80CB816B2EA5EC016B31DBB36C2EB3&lumII=8A80CB816B2EA5EC016B31E0F1F52EE4]; login: [admin]] lumis.portal.audit.AuditManager - Category: DOUI - Type: Execute Process Action - User: 00000000D00000000000000000000001 admin - Title: 'Process action executed: commit' - Description: 'Process action executed: 
  process action id: commit
  process action name: null
  service instance id: 8A80CB816B2EA5EC016B31DBB36C2EB3
  service instance name: Rentabilidade Acumulada
  interface id: br.com.b3.tesourodireto.service.rentabilidadeacumulada.import
  interface name: Upload CSV
  service id: br.com.b3.tesourodireto.service.rentabilidadeacumulada
  service name: Rentabilidade Acumulada
'
2019-06-07 09:56:48,573 ERROR 0:0:0:0:0:0:0:1 admin   Rentabilidade Acumulada [Thread-131] br.com.b3.tesourodireto.service.rentabilidadeacumulada.ImportTask - O processo de importação está sendo interrompido devido a um erro inesperado. Verifieque o log para maiores informações.
lumis.portal.PortalException: Não foi possível concluir o processo de importação devido a um erro. Verifique o log para maiores informações
	at br.com.b3.tesourodireto.service.rentabilidadeacumulada.ImportTask.run(ImportTask.java:277)
	at java.lang.Thread.run(Unknown Source)
Caused by: lumis.portal.PortalException: Ocoreu um erro inesperado ao salvar as informações no banco.
	at br.com.b3.tesourodireto.service.rentabilidadeacumulada.ImportTask.run(ImportTask.java:240)
	... 1 more
Caused by: java.lang.NullPointerException
	at lumis.portal.audit.AuditManager.audit(AuditManager.java:94)
	at lumis.content.core.ContentVersion.doPostPersist(ContentVersion.java:622)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.hibernate.ejb.event.BeanCallback.invoke$impl(BeanCallback.java:23)
	at org.hibernate.ejb.event.BeanCallback.invoke(BeanCallback.java)
	at org.hibernate.ejb.event.EntityCallbackHandler.callback(EntityCallbackHandler.java:80)
	at org.hibernate.ejb.event.EntityCallbackHandler.postCreate(EntityCallbackHandler.java:53)
	at org.hibernate.ejb.event.EJB3PostInsertEventListener.onPostInsert(EJB3PostInsertEventListener.java:33)
	at org.hibernate.action.EntityInsertAction.postInsert(EntityInsertAction.java:149)
	at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:128)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
	at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:304)
	at lumis.portal.dao.hibernate.HibernateUtil$EntityManagerWrapper.flush(HibernateUtil.java:731)
	at lumis.portal.dao.hibernate.TransactionHibernate.commit(TransactionHibernate.java:408)
	at br.com.b3.tesourodireto.service.rentabilidadeacumulada.ImportTask.run(ImportTask.java:236)
	... 1 more
2019-06-07 09:56:48,573 WARN  0:0:0:0:0:0:0:1 admin   Rentabilidade Acumulada [Thread-131] br.com.b3.tesourodireto.service.rentabilidadeacumulada.ImportTask - O processo de importação está sendo interrompido devido a um erro inesperado. Verifieque o log para maiores informações.
2019-06-07 09:56:48,573 WARN  0:0:0:0:0:0:0:1 admin   Rentabilidade Acumulada [Thread-131] br.com.b3.tesourodireto.service.rentabilidadeacumulada.ImportTask - Processo de importação finalizado

Por Bruno de Oliveira Jesus

Em 07/06/19 10:18

Acompanhar pergunta

5 resposta(s):

Ordenar por:

Bruno,
Estou supondo que seu processo de importação rode em segundo plano. Provavelmente o seu processo de importação ou não está fazendo um impersonate.
Daí, quando o framework de auditoria tenta obter o usuário que está realizando as operações, ele não consegue e dá o erro.
Tente alterar o processo pra fazer um impersonate ao redor da importação.

Att.

Por Thiago Berne

Em 07/06/19 10:27

Vendo o código fonte aqui agora, vi que você está fazendo:
No process action handler:

// Start importing
ImportTask.importThread = new Thread(new ImportTask(Paths.get(((FileDataType.Data) parameters.get("importFile")).getFullPath())));
ImportTask.importThread.start();

E na Thread de importação:

private SessionConfig sessionConfig = SessionConfig.getCurrentSessionConfig();	
 

É importante saber que a session config atual (obtida com SessionConfig.getCurrentSessionConfig()) não é herdada entre threads.

Então, na thread de importação, deveria estar sendo feito um impersonate em um usuário (aí tem que entender um pouco da solução pra decidir qual usuário --- ou SYSTEM ou o usuário que disparou o process action, provavelmente).

Att.

 

Por Thiago Berne

Em 07/06/19 10:40
Editado em 07/06/19 10:45

Fiz o ajuste para 'impersonate' conforme você falou Thiago e o conteúdo está sendo importado. Só fiz esse ajuste:

sessionConfig = ManagerFactory.getAuthenticationManager().impersonate(UserConfig.USER_ADMINISTRATOR_ID);

Vou fazer mais alguns testes para ver se está funcionando tudo certinho e retorno aqui em seguida.

Por Bruno de Oliveira Jesus

Em 07/06/19 11:32

Bruno,
Só se atente que sempre que fizer impersonate, você deve limpar esse impersonation, assim:

SessionConfig sysSession = ManagerFactoryInternal.getAuthenticationManager()
        .impersonate(UserConfig.USER_SYSTEM_ID);
try
{
    ...
}
finally
{
    ManagerFactoryInternal.getAuthenticationManager().endImpersonation(sysSession);
}


Att.

Por Thiago Berne

Em 07/06/19 15:47

Entrar

Interaja com a comunidade e tenha acesso a conteúdos exclusivos.

Houve algum erro ao acessar o banco de dados. Tente novamente mais tarde.