Skip to content

Commit

Permalink
Fix for DROOLS-975. Retrieving TransactionManager from TransactionMan…
Browse files Browse the repository at this point in the history
…agerFactory instead of directly instantiating JtaTransactionManager.
  • Loading branch information
Luke McDougall authored and mariofusco committed Nov 16, 2015
1 parent 67385e2 commit a758913
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 39 deletions.
Expand Up @@ -23,8 +23,8 @@
import org.drools.core.command.impl.AbstractInterceptor; import org.drools.core.command.impl.AbstractInterceptor;
import org.drools.persistence.OrderedTransactionSynchronization; import org.drools.persistence.OrderedTransactionSynchronization;
import org.drools.persistence.TransactionManager; import org.drools.persistence.TransactionManager;
import org.drools.persistence.TransactionManagerFactory;
import org.drools.persistence.TransactionManagerHelper; import org.drools.persistence.TransactionManagerHelper;
import org.drools.persistence.jta.JtaTransactionManager;
import org.kie.api.command.Command; import org.kie.api.command.Command;
import org.kie.api.runtime.Environment; import org.kie.api.runtime.Environment;
import org.kie.api.runtime.EnvironmentName; import org.kie.api.runtime.EnvironmentName;
Expand Down Expand Up @@ -180,9 +180,7 @@ public void initTransactionManager(Environment env) {
} }
} else { } else {
logger.debug( "Instantiating JtaTransactionManager" ); logger.debug( "Instantiating JtaTransactionManager" );
this.txm = new JtaTransactionManager( env.get( EnvironmentName.TRANSACTION ), this.txm = TransactionManagerFactory.get().newTransactionManager(env);
env.get( EnvironmentName.TRANSACTION_SYNCHRONIZATION_REGISTRY ),
tm );
env.set( EnvironmentName.TRANSACTION_MANAGER, this.txm ); env.set( EnvironmentName.TRANSACTION_MANAGER, this.txm );
try { try {
this.tpm = new JPATaskPersistenceContextManager( env ); this.tpm = new JPATaskPersistenceContextManager( env );
Expand Down
Expand Up @@ -23,9 +23,9 @@
import org.drools.core.time.Trigger; import org.drools.core.time.Trigger;
import org.drools.core.time.impl.DefaultJobHandle; import org.drools.core.time.impl.DefaultJobHandle;
import org.drools.persistence.TransactionManager; import org.drools.persistence.TransactionManager;
import org.drools.persistence.TransactionManagerFactory;
import org.drools.persistence.jpa.JDKCallableJobCommand; import org.drools.persistence.jpa.JDKCallableJobCommand;
import org.drools.persistence.jpa.JpaTimerJobInstance; import org.drools.persistence.jpa.JpaTimerJobInstance;
import org.drools.persistence.jta.JtaTransactionManager;
import org.jbpm.persistence.jta.ContainerManagedTransactionManager; import org.jbpm.persistence.jta.ContainerManagedTransactionManager;
import org.jbpm.process.core.timer.TimerServiceRegistry; import org.jbpm.process.core.timer.TimerServiceRegistry;
import org.jbpm.process.core.timer.impl.GlobalTimerService; import org.jbpm.process.core.timer.impl.GlobalTimerService;
Expand Down Expand Up @@ -60,7 +60,7 @@ public GlobalJpaTimerJobInstance(Job job, JobContext ctx, Trigger trigger,
@Override @Override
public Void call() throws Exception { public Void call() throws Exception {
CommandService commandService = null; CommandService commandService = null;
JtaTransactionManager jtaTm = null; TransactionManager jtaTm = null;
boolean success = false; boolean success = false;
try { try {
JDKCallableJobCommand command = new JDKCallableJobCommand( this ); JDKCallableJobCommand command = new JDKCallableJobCommand( this );
Expand Down Expand Up @@ -109,13 +109,13 @@ protected boolean allowedToDispose(Environment environment) {
if (txm != null && txm instanceof TransactionManager) { if (txm != null && txm instanceof TransactionManager) {
transactionManager = (TransactionManager) txm; transactionManager = (TransactionManager) txm;
} else { } else {
transactionManager = new JtaTransactionManager(null, null, null); transactionManager = TransactionManagerFactory.get().newTransactionManager();
} }
int status = transactionManager.getStatus(); int status = transactionManager.getStatus();


if (status != JtaTransactionManager.STATUS_NO_TRANSACTION if (status != TransactionManager.STATUS_NO_TRANSACTION
&& status != JtaTransactionManager.STATUS_ROLLEDBACK && status != TransactionManager.STATUS_ROLLEDBACK
&& status != JtaTransactionManager.STATUS_COMMITTED) { && status != TransactionManager.STATUS_COMMITTED) {
return false; return false;
} }


Expand All @@ -130,17 +130,17 @@ protected boolean hasEnvironmentEntry(Environment environment, String name, Obje
return value.equals(envEntry); return value.equals(envEntry);
} }


protected JtaTransactionManager startTxIfNeeded(Environment environment) { protected TransactionManager startTxIfNeeded(Environment environment) {


try { try {
if (hasEnvironmentEntry(environment, "IS_TIMER_CMT", true)) { if (hasEnvironmentEntry(environment, "IS_TIMER_CMT", true)) {
return null; return null;
} }
if (environment.get(EnvironmentName.TRANSACTION_MANAGER) instanceof ContainerManagedTransactionManager) { if (environment.get(EnvironmentName.TRANSACTION_MANAGER) instanceof ContainerManagedTransactionManager) {
JtaTransactionManager jtaTm = new JtaTransactionManager(null, null, null); TransactionManager tm = TransactionManagerFactory.get().newTransactionManager();


if (jtaTm.begin()) { if (tm.begin()) {
return jtaTm; return tm;
} }
} }


Expand All @@ -151,7 +151,7 @@ protected JtaTransactionManager startTxIfNeeded(Environment environment) {
return null; return null;
} }


protected void closeTansactionIfNeeded(JtaTransactionManager jtaTm, boolean commit) { protected void closeTansactionIfNeeded(TransactionManager jtaTm, boolean commit) {
if (jtaTm != null) { if (jtaTm != null) {
if (commit) { if (commit) {
jtaTm.commit(true); jtaTm.commit(true);
Expand Down
Expand Up @@ -22,6 +22,7 @@
import org.drools.core.time.TimerService; import org.drools.core.time.TimerService;
import org.drools.persistence.OrderedTransactionSynchronization; import org.drools.persistence.OrderedTransactionSynchronization;
import org.drools.persistence.TransactionManager; import org.drools.persistence.TransactionManager;
import org.drools.persistence.TransactionManagerFactory;
import org.drools.persistence.TransactionManagerHelper; import org.drools.persistence.TransactionManagerHelper;
import org.drools.persistence.TransactionSynchronization; import org.drools.persistence.TransactionSynchronization;
import org.drools.persistence.jta.JtaTransactionManager; import org.drools.persistence.jta.JtaTransactionManager;
Expand Down Expand Up @@ -151,9 +152,9 @@ protected void registerDisposeCallback(RuntimeEngine runtime, TransactionSynchro
} }
// register it if there is an active transaction as we assume then to be running in a managed environment e.g CMT // register it if there is an active transaction as we assume then to be running in a managed environment e.g CMT
TransactionManager tm = getTransactionManager(runtime.getKieSession().getEnvironment()); TransactionManager tm = getTransactionManager(runtime.getKieSession().getEnvironment());
if (tm.getStatus() != JtaTransactionManager.STATUS_NO_TRANSACTION if (tm.getStatus() != TransactionManager.STATUS_NO_TRANSACTION
&& tm.getStatus() != JtaTransactionManager.STATUS_ROLLEDBACK && tm.getStatus() != TransactionManager.STATUS_ROLLEDBACK
&& tm.getStatus() != JtaTransactionManager.STATUS_COMMITTED) { && tm.getStatus() != TransactionManager.STATUS_COMMITTED) {
TransactionManagerHelper.registerTransactionSyncInContainer(tm, (OrderedTransactionSynchronization) sync); TransactionManagerHelper.registerTransactionSyncInContainer(tm, (OrderedTransactionSynchronization) sync);
} }
} }
Expand All @@ -164,9 +165,9 @@ protected boolean canDispose(RuntimeEngine runtime) {
} }
// register it if there is an active transaction as we assume then to be running in a managed environment e.g CMT // register it if there is an active transaction as we assume then to be running in a managed environment e.g CMT
TransactionManager tm = getTransactionManager(runtime.getKieSession().getEnvironment()); TransactionManager tm = getTransactionManager(runtime.getKieSession().getEnvironment());
if (tm.getStatus() != JtaTransactionManager.STATUS_NO_TRANSACTION if (tm.getStatus() != TransactionManager.STATUS_NO_TRANSACTION
&& tm.getStatus() != JtaTransactionManager.STATUS_ROLLEDBACK && tm.getStatus() != TransactionManager.STATUS_ROLLEDBACK
&& tm.getStatus() != JtaTransactionManager.STATUS_COMMITTED) { && tm.getStatus() != TransactionManager.STATUS_COMMITTED) {
return false; return false;
} }


Expand Down Expand Up @@ -262,8 +263,8 @@ protected boolean canDestroy(RuntimeEngine runtime) {
return false; return false;
} }
TransactionManager tm = getTransactionManager(runtime.getKieSession().getEnvironment()); TransactionManager tm = getTransactionManager(runtime.getKieSession().getEnvironment());
if (tm.getStatus() == JtaTransactionManager.STATUS_NO_TRANSACTION || if (tm.getStatus() == TransactionManager.STATUS_NO_TRANSACTION ||
tm.getStatus() == JtaTransactionManager.STATUS_ACTIVE) { tm.getStatus() == TransactionManager.STATUS_ACTIVE) {
return true; return true;
} }
return false; return false;
Expand All @@ -286,7 +287,7 @@ protected TransactionManager getTransactionManager(Environment env) {
return (TransactionManager) txm; return (TransactionManager) txm;
} }


return new JtaTransactionManager(null, null, null); return TransactionManagerFactory.get().newTransactionManager();
} }


@Override @Override
Expand Down
Expand Up @@ -27,7 +27,6 @@
import org.drools.persistence.OrderedTransactionSynchronization; import org.drools.persistence.OrderedTransactionSynchronization;
import org.drools.persistence.TransactionManager; import org.drools.persistence.TransactionManager;
import org.drools.persistence.TransactionManagerHelper; import org.drools.persistence.TransactionManagerHelper;
import org.drools.persistence.jta.JtaTransactionManager;
import org.jbpm.runtime.manager.impl.factory.LocalTaskServiceFactory; import org.jbpm.runtime.manager.impl.factory.LocalTaskServiceFactory;
import org.jbpm.runtime.manager.impl.mapper.EnvironmentAwareProcessInstanceContext; import org.jbpm.runtime.manager.impl.mapper.EnvironmentAwareProcessInstanceContext;
import org.jbpm.runtime.manager.impl.mapper.InMemoryMapper; import org.jbpm.runtime.manager.impl.mapper.InMemoryMapper;
Expand Down Expand Up @@ -403,9 +402,9 @@ public Void execute(org.kie.internal.command.Context context) {
return null; return null;
} }


if (tm != null && tm.getStatus() != JtaTransactionManager.STATUS_NO_TRANSACTION if (tm != null && tm.getStatus() != TransactionManager.STATUS_NO_TRANSACTION
&& tm.getStatus() != JtaTransactionManager.STATUS_ROLLEDBACK && tm.getStatus() != TransactionManager.STATUS_ROLLEDBACK
&& tm.getStatus() != JtaTransactionManager.STATUS_COMMITTED) { && tm.getStatus() != TransactionManager.STATUS_COMMITTED) {
TransactionManagerHelper.registerTransactionSyncInContainer(tm, new OrderedTransactionSynchronization(5, "PPIRM-"+initialKsession.getIdentifier()) { TransactionManagerHelper.registerTransactionSyncInContainer(tm, new OrderedTransactionSynchronization(5, "PPIRM-"+initialKsession.getIdentifier()) {


@Override @Override
Expand Down Expand Up @@ -448,9 +447,9 @@ public Void execute(org.kie.internal.command.Context context) {
return null; return null;
} }
TransactionManager tm = (TransactionManager) initialKsession.getEnvironment().get(EnvironmentName.TRANSACTION_MANAGER); TransactionManager tm = (TransactionManager) initialKsession.getEnvironment().get(EnvironmentName.TRANSACTION_MANAGER);
if (tm != null && tm.getStatus() != JtaTransactionManager.STATUS_NO_TRANSACTION if (tm != null && tm.getStatus() != TransactionManager.STATUS_NO_TRANSACTION
&& tm.getStatus() != JtaTransactionManager.STATUS_ROLLEDBACK && tm.getStatus() != TransactionManager.STATUS_ROLLEDBACK
&& tm.getStatus() != JtaTransactionManager.STATUS_COMMITTED) { && tm.getStatus() != TransactionManager.STATUS_COMMITTED) {
TransactionManagerHelper.registerTransactionSyncInContainer(tm, new OrderedTransactionSynchronization(5, "PPIRM-"+initialKsession.getIdentifier()) { TransactionManagerHelper.registerTransactionSyncInContainer(tm, new OrderedTransactionSynchronization(5, "PPIRM-"+initialKsession.getIdentifier()) {


@Override @Override
Expand Down
Expand Up @@ -21,6 +21,7 @@
import org.drools.core.time.impl.TimerJobInstance; import org.drools.core.time.impl.TimerJobInstance;
import org.drools.persistence.OrderedTransactionSynchronization; import org.drools.persistence.OrderedTransactionSynchronization;
import org.drools.persistence.TransactionManager; import org.drools.persistence.TransactionManager;
import org.drools.persistence.TransactionManagerFactory;
import org.drools.persistence.TransactionManagerHelper; import org.drools.persistence.TransactionManagerHelper;
import org.drools.persistence.jta.JtaTransactionManager; import org.drools.persistence.jta.JtaTransactionManager;
import org.jbpm.process.core.timer.GlobalSchedulerService; import org.jbpm.process.core.timer.GlobalSchedulerService;
Expand Down Expand Up @@ -63,9 +64,9 @@ public final void internalSchedule(final TimerJobInstance timerJobInstance) {
} }


TransactionManager tm = getTransactionManager(timerJobInstance.getJobContext()); TransactionManager tm = getTransactionManager(timerJobInstance.getJobContext());
if (tm.getStatus() != JtaTransactionManager.STATUS_NO_TRANSACTION if (tm.getStatus() != TransactionManager.STATUS_NO_TRANSACTION
&& tm.getStatus() != JtaTransactionManager.STATUS_ROLLEDBACK && tm.getStatus() != TransactionManager.STATUS_ROLLEDBACK
&& tm.getStatus() != JtaTransactionManager.STATUS_COMMITTED) { && tm.getStatus() != TransactionManager.STATUS_COMMITTED) {
TransactionManagerHelper.registerTransactionSyncInContainer(tm, TransactionManagerHelper.registerTransactionSyncInContainer(tm,
new ScheduleTimerTransactionSynchronization(timerJobInstance, delegate)); new ScheduleTimerTransactionSynchronization(timerJobInstance, delegate));


Expand Down Expand Up @@ -126,7 +127,7 @@ protected TransactionManager getTransactionManager(JobContext jobContext) {
return (TransactionManager) txm; return (TransactionManager) txm;
} }


return new JtaTransactionManager(null, null, null); return TransactionManagerFactory.get().newTransactionManager();
} }


protected Environment getEnvironment(JobContext jobContext) { protected Environment getEnvironment(JobContext jobContext) {
Expand Down
Expand Up @@ -19,7 +19,8 @@


import org.drools.core.command.CommandService; import org.drools.core.command.CommandService;
import org.drools.core.command.impl.GenericCommand; import org.drools.core.command.impl.GenericCommand;
import org.drools.persistence.jta.JtaTransactionManager; import org.drools.persistence.TransactionManager;
import org.drools.persistence.TransactionManagerFactory;
import org.kie.api.command.Command; import org.kie.api.command.Command;
import org.kie.internal.command.Context; import org.kie.internal.command.Context;
import org.slf4j.Logger; import org.slf4j.Logger;
Expand All @@ -31,11 +32,15 @@ public class TransactionalCommandService implements CommandService {


private EntityManagerFactory emf; private EntityManagerFactory emf;
private Context context; private Context context;
private JtaTransactionManager txm; private TransactionManager txm;


public TransactionalCommandService(EntityManagerFactory emf, TransactionManager txm) {
this.emf = emf;
this.txm = txm;
}

public TransactionalCommandService(EntityManagerFactory emf) { public TransactionalCommandService(EntityManagerFactory emf) {
this.emf = emf; this(emf, TransactionManagerFactory.get().newTransactionManager());
this.txm = new JtaTransactionManager(null, null, null);
} }


public Context getContext() { public Context getContext() {
Expand Down

0 comments on commit a758913

Please sign in to comment.