From 8b8a73ec582bc97e65790c51cf3b475bb5d4b166 Mon Sep 17 00:00:00 2001 From: Francisco Javier Tirado Sarti Date: Thu, 24 Aug 2023 20:41:30 +0200 Subject: [PATCH] [JBPM-10187] Trying to avoid nullPointerException in interceptor --- .../java/org/drools/persistence/PersistableRunner.java | 10 ++++++---- .../drools/persistence/jpa/JpaPersistenceContext.java | 2 +- .../jpa/marshaller/JPAPlaceholderResolverStrategy.java | 8 ++++---- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistableRunner.java b/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistableRunner.java index 39337d2fd69..73be05b2c72 100644 --- a/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistableRunner.java +++ b/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/PersistableRunner.java @@ -151,7 +151,7 @@ protected void initNewKnowledgeSession(KieBase kbase, KieSessionConfiguration co ((InternalKnowledgeRuntime) this.ksession).setEndOperationListener( new EndOperationListenerImpl(this.txm, this.sessionInfo ) ); - this.runner = new TransactionInterceptor(); + this.runner = new TransactionInterceptor(sessionInfo); TimerJobFactoryManager timerJobFactoryManager = ((InternalKnowledgeRuntime) ksession ).getTimerService().getTimerJobFactoryManager(); if (timerJobFactoryManager instanceof CommandServiceTimerJobFactoryManager) { @@ -258,7 +258,7 @@ protected void initExistingKnowledgeSession(Long sessionId, kruntime.setIdentifier( this.sessionInfo.getId() ); kruntime.setEndOperationListener( new EndOperationListenerImpl( this.txm, this.sessionInfo ) ); - this.runner = new TransactionInterceptor(); + this.runner = new TransactionInterceptor(sessionInfo); // apply interceptors Iterator iterator = this.interceptors.descendingIterator(); while (iterator.hasNext()) { @@ -571,14 +571,16 @@ private void registerUpdateSync() { private class TransactionInterceptor extends AbstractInterceptor { + private SessionInfo sessionInfo; - - public TransactionInterceptor() { + public TransactionInterceptor(SessionInfo sessionInfo) { + this.sessionInfo = sessionInfo; setNext(new PseudoClockRunner()); } @Override public RequestContext execute( Executable executable, RequestContext context ) { + if ( !( (InternalExecutable) executable ).canRunInTransaction() ) { executeNext(executable, context); if (((InternalExecutable) executable ).requiresDispose()) { diff --git a/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaPersistenceContext.java b/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaPersistenceContext.java index 6dfe74be74d..db70da750d2 100644 --- a/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaPersistenceContext.java +++ b/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/JpaPersistenceContext.java @@ -68,7 +68,7 @@ public PersistentSession persist(PersistentSession entity) { } public PersistentSession findSession(Long id) { - logger.trace("Reading session info {}, id"); + logger.trace("Reading session info {}",id); SessionInfo sessionInfo = null; if( this.pessimisticLocking ) { sessionInfo = this.em.find( SessionInfo.class, id, lockMode ); diff --git a/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/marshaller/JPAPlaceholderResolverStrategy.java b/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/marshaller/JPAPlaceholderResolverStrategy.java index 06769c5bad8..16840840da4 100644 --- a/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/marshaller/JPAPlaceholderResolverStrategy.java +++ b/drools-persistence/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/marshaller/JPAPlaceholderResolverStrategy.java @@ -203,7 +203,7 @@ private boolean isEntity(Object o){ public void onStart(TransactionManager txm) { if (persister.get() == null) { EntityManager em = emf.createEntityManager(); - log.trace ("Created EM {} for name {}",em, name); + log.trace ("Created EM {} for JPAPlaceHolder {}:{}",em, this, name); persister.set(new EntityPersister(em)); } } @@ -212,10 +212,10 @@ public void onStart(TransactionManager txm) { public void onEnd(TransactionManager txm) { EntityPersister em = persister.get(); if (em == null) { - log.warn ("EM is null for {} and status {}", name, txm.getStatus()); + log.warn ("EM is null for {}:{} and status {}", this, name, txm.getStatus()); return; } - log.trace ("Executing onEnd for {} with status {}", name, txm.getStatus()); + log.trace ("Executing onEnd for {}:{} with status {}", this, name, txm.getStatus()); if(txm.getStatus() == TransactionManager.STATUS_ROLLEDBACK) { // this is pretty much of a hack but for avoiding issues when rolling back we need to set to null // the primary key of the entities (simple types) @@ -245,7 +245,7 @@ public void onEnd(TransactionManager txm) { }); } if (em != null) { - log.trace ("Closing EM {} for name {}",em, name); + log.trace ("Closing EM {} for JPAPlaceHolder {}:{}",em.getEntityManager(), this, name); em.close(); persister.set(null); }