[jboss-svn-commits] JBL Code SVN: r34713 - in labs/jbossrules/branches/5.1.x: drools-core/src/main/java/org/drools/common and 8 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Aug 13 18:49:15 EDT 2010
Author: tirelli
Date: 2010-08-13 18:49:14 -0400 (Fri, 13 Aug 2010)
New Revision: 34713
Added:
labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/session/JpaJDKTimerService.java
Removed:
labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/grid/JPAKnowledgeProviderLocalClient.java
Modified:
labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/SessionConfiguration.java
labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/time/TimerServiceFactory.java
labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/time/impl/JDKTimerService.java
labs/jbossrules/branches/5.1.x/drools-core/src/test/java/org/drools/time/impl/CronJobTest.java
labs/jbossrules/branches/5.1.x/drools-core/src/test/java/org/drools/time/impl/JDKTimerServiceTest.java
labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/impl/KnowledgeStoreServiceImpl.java
labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java
labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
Log:
JBRULES-2659: Rule timers are not executed as part of a transaction when using persistence
Modified: labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/SessionConfiguration.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/SessionConfiguration.java 2010-08-13 15:33:49 UTC (rev 34712)
+++ labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/SessionConfiguration.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -40,6 +40,7 @@
import org.drools.runtime.conf.SingleValueKnowledgeSessionOption;
import org.drools.runtime.conf.WorkItemHandlerOption;
import org.drools.runtime.process.WorkItemHandler;
+import org.drools.time.TimerService;
import org.drools.util.ChainedProperties;
import org.drools.util.ClassLoaderUtil;
import org.mvel2.MVEL;
@@ -83,6 +84,7 @@
private SignalManagerFactory processSignalManagerFactory;
private WorkItemManagerFactory workItemManagerFactory;
private CommandService commandService;
+ private TimerService timerService;
private transient ClassLoader classLoader;
@@ -437,6 +439,43 @@
}
}
+ public TimerService newTimerService() {
+ String className = this.chainedProperties.getProperty(
+ "drools.timerService",
+ "org.drools.time.impl.JDKTimerService");
+ if (className == null) {
+ return null;
+ }
+
+ Class<TimerService> clazz = null;
+ try {
+ clazz = (Class<TimerService>) Thread.currentThread()
+ .getContextClassLoader().loadClass(className);
+ } catch (ClassNotFoundException e) {
+ }
+
+ if (clazz == null) {
+ try {
+ clazz = (Class<TimerService>) SessionConfiguration.class
+ .getClassLoader().loadClass(className);
+ } catch (ClassNotFoundException e) {
+ }
+ }
+
+ if (clazz != null) {
+ try {
+ return clazz.newInstance();
+ } catch (Exception e) {
+ throw new IllegalArgumentException(
+ "Unable to instantiate timer service '" + className
+ + "'", e);
+ }
+ } else {
+ throw new IllegalArgumentException("Timer service '" + className
+ + "' not found");
+ }
+ }
+
@SuppressWarnings("unchecked")
public <T extends SingleValueKnowledgeSessionOption> T getOption(Class<T> option) {
if ( ClockTypeOption.class.equals( option ) ) {
Modified: labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2010-08-13 15:33:49 UTC (rev 34712)
+++ labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -367,7 +367,7 @@
this.processInstanceManager = config.getProcessInstanceManagerFactory().createProcessInstanceManager( this );
this.timeMachine = new TimeMachine();
- TimerService timerService = TimerServiceFactory.getTimerService( this.config.getClockType() );
+ TimerService timerService = TimerServiceFactory.getTimerService( this.config );
this.timerManager = new TimerManager( this,
timerService );
this.signalManager = config.getSignalManagerFactory().createSignalManager( this );
Modified: labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/time/TimerServiceFactory.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/time/TimerServiceFactory.java 2010-08-13 15:33:49 UTC (rev 34712)
+++ labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/time/TimerServiceFactory.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -16,16 +16,15 @@
package org.drools.time;
-import org.drools.ClockType;
-import org.drools.time.impl.JDKTimerService;
+import org.drools.SessionConfiguration;
import org.drools.time.impl.PseudoClockScheduler;
public class TimerServiceFactory {
- public static TimerService getTimerService( ClockType type ) {
- switch( type ) {
+ public static TimerService getTimerService( SessionConfiguration config ) {
+ switch( config.getClockType() ) {
case REALTIME_CLOCK:
- return new JDKTimerService();
+ return config.newTimerService();
case PSEUDO_CLOCK:
return new PseudoClockScheduler();
}
Modified: labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/time/impl/JDKTimerService.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/time/impl/JDKTimerService.java 2010-08-13 15:33:49 UTC (rev 34712)
+++ labs/jbossrules/branches/5.1.x/drools-core/src/main/java/org/drools/time/impl/JDKTimerService.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -40,7 +40,7 @@
TimerService,
SessionClock {
- private ScheduledThreadPoolExecutor scheduler;
+ protected ScheduledThreadPoolExecutor scheduler;
public JDKTimerService() {
this( 1 );
@@ -72,11 +72,11 @@
Date date = trigger.nextFireTime();
if ( date != null ) {
- JDKCallableJob callableJob = new JDKCallableJob( job,
- ctx,
- trigger,
- jobHandle,
- this.scheduler );
+ Callable<Void> callableJob = createCallableJob( job,
+ ctx,
+ trigger,
+ jobHandle,
+ this.scheduler );
ScheduledFuture future = schedule( date,
callableJob,
this.scheduler );
@@ -87,13 +87,25 @@
return null;
}
}
+
+ protected Callable<Void> createCallableJob(Job job,
+ JobContext ctx,
+ Trigger trigger,
+ JDKJobHandle handle,
+ ScheduledThreadPoolExecutor scheduler) {
+ return new JDKCallableJob( job,
+ ctx,
+ trigger,
+ handle,
+ this.scheduler );
+ }
public boolean removeJob(JobHandle jobHandle) {
return this.scheduler.remove( (Runnable) ((JDKJobHandle) jobHandle).getFuture() );
}
private static ScheduledFuture schedule(Date date,
- JDKCallableJob callableJob,
+ Callable<Void> callableJob,
ScheduledThreadPoolExecutor scheduler) {
long then = date.getTime();
long now = System.currentTimeMillis();
Modified: labs/jbossrules/branches/5.1.x/drools-core/src/test/java/org/drools/time/impl/CronJobTest.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-core/src/test/java/org/drools/time/impl/CronJobTest.java 2010-08-13 15:33:49 UTC (rev 34712)
+++ labs/jbossrules/branches/5.1.x/drools-core/src/test/java/org/drools/time/impl/CronJobTest.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -24,6 +24,7 @@
import junit.framework.TestCase;
import org.drools.ClockType;
+import org.drools.SessionConfiguration;
import org.drools.time.TimerServiceFactory;
import org.drools.time.impl.JDKTimerServiceTest.HelloWorldJob;
import org.drools.time.impl.JDKTimerServiceTest.HelloWorldJobContext;
@@ -31,7 +32,9 @@
public class CronJobTest extends TestCase {
public void testCronTriggerJob() throws Exception {
- PseudoClockScheduler timeService = ( PseudoClockScheduler ) TimerServiceFactory.getTimerService( ClockType.PSEUDO_CLOCK );
+ SessionConfiguration config = new SessionConfiguration();
+ config.setClockType(ClockType.PSEUDO_CLOCK);
+ PseudoClockScheduler timeService = ( PseudoClockScheduler ) TimerServiceFactory.getTimerService( config );
DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
Modified: labs/jbossrules/branches/5.1.x/drools-core/src/test/java/org/drools/time/impl/JDKTimerServiceTest.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-core/src/test/java/org/drools/time/impl/JDKTimerServiceTest.java 2010-08-13 15:33:49 UTC (rev 34712)
+++ labs/jbossrules/branches/5.1.x/drools-core/src/test/java/org/drools/time/impl/JDKTimerServiceTest.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -19,18 +19,15 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Stack;
-import java.util.concurrent.TimeUnit;
import junit.framework.TestCase;
import org.drools.ClockType;
+import org.drools.SessionConfiguration;
import org.drools.time.Job;
import org.drools.time.JobContext;
import org.drools.time.JobHandle;
@@ -41,7 +38,9 @@
public class JDKTimerServiceTest extends TestCase {
public void testSingleExecutionJob() throws Exception {
- TimerService timeService = TimerServiceFactory.getTimerService( ClockType.REALTIME_CLOCK );
+ SessionConfiguration config = new SessionConfiguration();
+ config.setClockType(ClockType.REALTIME_CLOCK);
+ TimerService timeService = TimerServiceFactory.getTimerService( config );
Trigger trigger = new DelayedTrigger( 100 );
HelloWorldJobContext ctx = new HelloWorldJobContext( "hello world", timeService);
timeService.scheduleJob( new HelloWorldJob(), ctx, trigger);
@@ -51,7 +50,9 @@
}
public void testRepeatedExecutionJob() throws Exception {
- TimerService timeService = TimerServiceFactory.getTimerService( ClockType.REALTIME_CLOCK );
+ SessionConfiguration config = new SessionConfiguration();
+ config.setClockType(ClockType.REALTIME_CLOCK);
+ TimerService timeService = TimerServiceFactory.getTimerService( config );
Trigger trigger = new DelayedTrigger( new long[] { 100, 100, 100} );
HelloWorldJobContext ctx = new HelloWorldJobContext( "hello world", timeService);
timeService.scheduleJob( new HelloWorldJob(), ctx, trigger);
@@ -62,7 +63,9 @@
public void testRepeatedExecutionJobWithRemove() throws Exception {
- TimerService timeService = TimerServiceFactory.getTimerService( ClockType.REALTIME_CLOCK );
+ SessionConfiguration config = new SessionConfiguration();
+ config.setClockType(ClockType.REALTIME_CLOCK);
+ TimerService timeService = TimerServiceFactory.getTimerService( config );
Trigger trigger = new DelayedTrigger( new long[] { 100, 100, 100, 100, 100 } );
HelloWorldJobContext ctx = new HelloWorldJobContext( "hello world", timeService);
ctx.setLimit( 3 );
Deleted: labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/grid/JPAKnowledgeProviderLocalClient.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/grid/JPAKnowledgeProviderLocalClient.java 2010-08-13 15:33:49 UTC (rev 34712)
+++ labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/grid/JPAKnowledgeProviderLocalClient.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -1,203 +0,0 @@
-/*
- * Copyright 2010 salaboy.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * under the License.
- */
-
-package org.drools.persistence.jpa.grid;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Properties;
-import org.drools.KnowledgeBase;
-import org.drools.SessionConfiguration;
-import org.drools.builder.JPAKnowledgeFactoryService;
-import org.drools.command.CommandService;
-import org.drools.command.impl.CommandBasedStatefulKnowledgeSession;
-import org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory;
-import org.drools.persistence.processinstance.JPASignalManagerFactory;
-import org.drools.persistence.processinstance.JPAWorkItemManagerFactory;
-import org.drools.persistence.session.SingleSessionCommandService;
-import org.drools.process.instance.ProcessInstanceManagerFactory;
-import org.drools.process.instance.WorkItemManagerFactory;
-import org.drools.process.instance.event.SignalManagerFactory;
-import org.drools.runtime.Environment;
-import org.drools.runtime.KnowledgeSessionConfiguration;
-import org.drools.runtime.StatefulKnowledgeSession;
-
-/**
- *
- * @author salaboy
- */
-public class JPAKnowledgeProviderLocalClient implements JPAKnowledgeFactoryService {
- private Class<? extends CommandService> commandServiceClass;
- private Class<? extends ProcessInstanceManagerFactory> processInstanceManagerFactoryClass;
- private Class<? extends WorkItemManagerFactory> workItemManagerFactoryClass;
- private Class<? extends SignalManagerFactory> processSignalManagerFactoryClass;
-
- private Properties configProps = new Properties();
-
- public JPAKnowledgeProviderLocalClient() {
- setDefaultImplementations();
- }
-
- protected void setDefaultImplementations() {
- setCommandServiceClass(SingleSessionCommandService.class);
- setProcessInstanceManagerFactoryClass(JPAProcessInstanceManagerFactory.class);
- setWorkItemManagerFactoryClass(JPAWorkItemManagerFactory.class);
- setProcessSignalManagerFactoryClass(JPASignalManagerFactory.class);
- }
-
- public StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeBase kbase,
- KnowledgeSessionConfiguration configuration,
- Environment environment) {
- if (configuration == null) {
- configuration = new SessionConfiguration();
- }
-
- if (environment == null) {
- throw new IllegalArgumentException("Environment cannot be null");
- }
-
- return new CommandBasedStatefulKnowledgeSession(
- buildCommanService(kbase, mergeConfig(configuration), environment));
- }
-
- public StatefulKnowledgeSession loadStatefulKnowledgeSession(int id,
- KnowledgeBase kbase,
- KnowledgeSessionConfiguration configuration,
- Environment environment) {
- if (configuration == null) {
- configuration = new SessionConfiguration();
- }
-
- if (environment == null) {
- throw new IllegalArgumentException("Environment cannot be null");
- }
-
- return new CommandBasedStatefulKnowledgeSession(
- buildCommanService(id, kbase, mergeConfig(configuration), environment));
- }
-
- private CommandService buildCommanService(int sessionId,
- KnowledgeBase kbase,
- KnowledgeSessionConfiguration conf,
- Environment env) {
-
- try {
- Class<? extends CommandService> serviceClass = getCommandServiceClass();
- Constructor<? extends CommandService> constructor = serviceClass.getConstructor(int.class,
- KnowledgeBase.class, KnowledgeSessionConfiguration.class, Environment.class);
- return constructor.newInstance(sessionId, kbase, conf, env);
- } catch (SecurityException e) {
- throw new IllegalStateException(e);
- } catch (NoSuchMethodException e) {
- throw new IllegalStateException(e);
- } catch (IllegalArgumentException e) {
- throw new IllegalStateException(e);
- } catch (InstantiationException e) {
- throw new IllegalStateException(e);
- } catch (IllegalAccessException e) {
- throw new IllegalStateException(e);
- } catch (InvocationTargetException e) {
- throw new IllegalStateException(e);
- }
- }
-
- private CommandService buildCommanService(KnowledgeBase kbase,
- KnowledgeSessionConfiguration conf,
- Environment env) {
-
- Class<? extends CommandService> serviceClass = getCommandServiceClass();
- try {
- Constructor<? extends CommandService> constructor = serviceClass.getConstructor(KnowledgeBase.class,
- KnowledgeSessionConfiguration.class, Environment.class);
- return constructor.newInstance(kbase, conf, env);
- } catch (SecurityException e) {
- throw new IllegalStateException(e);
- } catch (NoSuchMethodException e) {
- throw new IllegalStateException(e);
- } catch (IllegalArgumentException e) {
- throw new IllegalStateException(e);
- } catch (InstantiationException e) {
- throw new IllegalStateException(e);
- } catch (IllegalAccessException e) {
- throw new IllegalStateException(e);
- } catch (InvocationTargetException e) {
- throw new IllegalStateException(e);
- }
- }
-
- private KnowledgeSessionConfiguration mergeConfig(KnowledgeSessionConfiguration configuration) {
- ((SessionConfiguration) configuration).addProperties(configProps);
- return configuration;
- }
-
- public int getStatefulKnowledgeSessionId(StatefulKnowledgeSession ksession) {
- if (ksession instanceof CommandBasedStatefulKnowledgeSession) {
- SingleSessionCommandService commandService = (SingleSessionCommandService) ((CommandBasedStatefulKnowledgeSession) ksession)
- .getCommandService();
- return commandService.getSessionId();
- }
- throw new IllegalArgumentException("StatefulKnowledgeSession must be an a CommandBasedStatefulKnowledgeSession");
- }
-
- public void setCommandServiceClass(Class<? extends CommandService> commandServiceClass) {
- if (commandServiceClass != null) {
- this.commandServiceClass = commandServiceClass;
- configProps.put("drools.commandService", commandServiceClass.getName());
- }
- }
-
- public Class<? extends CommandService> getCommandServiceClass() {
- return commandServiceClass;
- }
-
- public void setProcessInstanceManagerFactoryClass(
- Class<? extends ProcessInstanceManagerFactory> processInstanceManagerFactoryClass) {
- if (processInstanceManagerFactoryClass != null) {
- this.processInstanceManagerFactoryClass = processInstanceManagerFactoryClass;
- configProps.put("drools.processInstanceManagerFactory", processInstanceManagerFactoryClass.getName());
- }
- }
-
- public Class<? extends ProcessInstanceManagerFactory> getProcessInstanceManagerFactoryClass() {
- return processInstanceManagerFactoryClass;
- }
-
- public void setWorkItemManagerFactoryClass(Class<? extends WorkItemManagerFactory> workItemManagerFactoryClass) {
- if (workItemManagerFactoryClass != null) {
- this.workItemManagerFactoryClass = workItemManagerFactoryClass;
- configProps.put("drools.workItemManagerFactory", workItemManagerFactoryClass.getName());
- }
- }
-
- public Class<? extends WorkItemManagerFactory> getWorkItemManagerFactoryClass() {
- return workItemManagerFactoryClass;
- }
-
- public void setProcessSignalManagerFactoryClass(
- Class<? extends SignalManagerFactory> processSignalManagerFactoryClass) {
- if (processSignalManagerFactoryClass != null) {
- this.processSignalManagerFactoryClass = processSignalManagerFactoryClass;
- configProps.put("drools.processSignalManagerFactory", processSignalManagerFactoryClass.getName());
- }
- }
-
- public Class<? extends SignalManagerFactory> getProcessSignalManagerFactoryClass() {
- return processSignalManagerFactoryClass;
- }
-
-
-}
Modified: labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/impl/KnowledgeStoreServiceImpl.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/impl/KnowledgeStoreServiceImpl.java 2010-08-13 15:33:49 UTC (rev 34712)
+++ labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/jpa/impl/KnowledgeStoreServiceImpl.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -12,6 +12,7 @@
import org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory;
import org.drools.persistence.processinstance.JPASignalManagerFactory;
import org.drools.persistence.processinstance.JPAWorkItemManagerFactory;
+import org.drools.persistence.session.JpaJDKTimerService;
import org.drools.persistence.session.SingleSessionCommandService;
import org.drools.process.instance.ProcessInstanceManagerFactory;
import org.drools.process.instance.WorkItemManagerFactory;
@@ -20,6 +21,7 @@
import org.drools.runtime.Environment;
import org.drools.runtime.KnowledgeSessionConfiguration;
import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.time.TimerService;
public class KnowledgeStoreServiceImpl
implements
@@ -29,6 +31,7 @@
private Class< ? extends ProcessInstanceManagerFactory> processInstanceManagerFactoryClass;
private Class< ? extends WorkItemManagerFactory> workItemManagerFactoryClass;
private Class< ? extends SignalManagerFactory> processSignalManagerFactoryClass;
+ private Class< ? extends TimerService> timerServiceClass;
private Properties configProps = new Properties();
@@ -41,6 +44,7 @@
setProcessInstanceManagerFactoryClass( JPAProcessInstanceManagerFactory.class );
setWorkItemManagerFactoryClass( JPAWorkItemManagerFactory.class );
setProcessSignalManagerFactoryClass( JPASignalManagerFactory.class );
+ setTimerServiceClass( JpaJDKTimerService.class );
}
public StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeBase kbase,
@@ -159,6 +163,18 @@
return commandServiceClass;
}
+ public void setTimerServiceClass(Class< ? extends TimerService> timerServiceClass) {
+ if ( timerServiceClass != null ) {
+ this.timerServiceClass = timerServiceClass;
+ configProps.put( "drools.timerService",
+ timerServiceClass.getName() );
+ }
+ }
+
+ public Class< ? extends TimerService> getTimerServiceClass() {
+ return timerServiceClass;
+ }
+
public void setProcessInstanceManagerFactoryClass(Class< ? extends ProcessInstanceManagerFactory> processInstanceManagerFactoryClass) {
if ( processInstanceManagerFactoryClass != null ) {
this.processInstanceManagerFactoryClass = processInstanceManagerFactoryClass;
Modified: labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java 2010-08-13 15:33:49 UTC (rev 34712)
+++ labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -7,24 +7,15 @@
import javax.persistence.Query;
import org.drools.WorkingMemory;
-import org.drools.command.CommandService;
-import org.drools.command.runtime.process.SignalEventCommand;
import org.drools.process.instance.event.DefaultSignalManager;
import org.drools.runtime.EnvironmentName;
-import org.drools.runtime.process.ProcessInstance;
public class JPASignalManager extends DefaultSignalManager {
- private CommandService commandService;
-
public JPASignalManager(WorkingMemory workingMemory) {
super(workingMemory);
}
- public void setCommandService(CommandService commandService) {
- this.commandService = commandService;
- }
-
public void signalEvent(String type,
Object event) {
for ( long id : getProcessInstancesForEvent( type ) ) {
@@ -34,16 +25,6 @@
event );
}
- public void signalEvent(long processInstanceId,
- String type,
- Object event) {
- SignalEventCommand command = new SignalEventCommand();
- command.setProcessInstanceId(processInstanceId);
- command.setEventType(type);
- command.setEvent(event);
- commandService.execute(command);
- }
-
@SuppressWarnings("unchecked")
private List<Long> getProcessInstancesForEvent(String type) {
EntityManager em = (EntityManager) getWorkingMemory().getEnvironment().get( EnvironmentName.CMD_SCOPED_ENTITY_MANAGER );
Copied: labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/session/JpaJDKTimerService.java (from rev 34636, labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/JpaJDKTimerService.java)
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/session/JpaJDKTimerService.java (rev 0)
+++ labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/session/JpaJDKTimerService.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -0,0 +1,106 @@
+/**
+ * Copyright 2010 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.persistence.session;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+
+import org.drools.command.CommandService;
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.time.Job;
+import org.drools.time.JobContext;
+import org.drools.time.Trigger;
+import org.drools.time.impl.JDKTimerService;
+
+/**
+ * A default Scheduler implementation that uses the
+ * JDK built-in ScheduledThreadPoolExecutor as the
+ * scheduler and the system clock as the clock.
+ *
+ */
+public class JpaJDKTimerService extends JDKTimerService {
+
+ private CommandService commandService;
+
+ public void setCommandService(CommandService commandService) {
+ this.commandService = commandService;
+ }
+
+ public JpaJDKTimerService() {
+ this(1);
+ }
+
+ public JpaJDKTimerService(int size) {
+ super(size);
+ }
+
+ protected Callable<Void> createCallableJob(Job job,
+ JobContext ctx,
+ Trigger trigger,
+ JDKJobHandle handle,
+ ScheduledThreadPoolExecutor scheduler) {
+ return new JpaJDKCallableJob( job,
+ ctx,
+ trigger,
+ handle,
+ this.scheduler );
+ }
+
+ public class JpaJDKCallableJob extends JDKCallableJob {
+
+ public JpaJDKCallableJob(Job job,
+ JobContext ctx,
+ Trigger trigger,
+ JDKJobHandle handle,
+ ScheduledThreadPoolExecutor scheduler) {
+ super(job, ctx, trigger, handle, scheduler);
+ }
+
+ public Void call() throws Exception {
+ JDKCallableJobCommand command = new JDKCallableJobCommand(this);
+ commandService.execute(command);
+ return null;
+ }
+
+ private Void internalCall() throws Exception {
+ return super.call();
+ }
+ }
+
+ public static class JDKCallableJobCommand implements GenericCommand<Void> {
+
+ private static final long serialVersionUID = 4L;
+
+ private JpaJDKCallableJob job;
+
+ public JDKCallableJobCommand(JpaJDKCallableJob job) {
+ this.job = job;
+ }
+
+ public Void execute(Context context) {
+ try {
+ return job.internalCall();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ }
+
+}
Modified: labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java 2010-08-13 15:33:49 UTC (rev 34712)
+++ labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -19,7 +19,6 @@
import org.drools.impl.KnowledgeBaseImpl;
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.persistence.processinstance.JPAProcessInstanceManager;
-import org.drools.persistence.processinstance.JPASignalManager;
import org.drools.persistence.processinstance.JPAWorkItemManager;
import org.drools.reteoo.ReteooStatefulSession;
import org.drools.reteoo.ReteooWorkingMemory;
@@ -107,7 +106,8 @@
this.ksession,
null );
- ((JPASignalManager) ((StatefulKnowledgeSessionImpl) ksession).session.getSignalManager()).setCommandService( this );
+ ((JpaJDKTimerService) ((StatefulKnowledgeSessionImpl) ksession).session.getTimerService()).setCommandService( this );
+
this.marshallingHelper = new JPASessionMarshallingHelper( this.ksession,
conf );
this.sessionInfo.setJPASessionMashallingHelper( this.marshallingHelper );
@@ -201,7 +201,7 @@
((StatefulKnowledgeSessionImpl) this.ksession).session.setEndOperationListener( new EndOperationListenerImpl( this.sessionInfo ) );
- ((JPASignalManager) ((StatefulKnowledgeSessionImpl) ksession).session.getSignalManager()).setCommandService( this );
+ ((JpaJDKTimerService) ((StatefulKnowledgeSessionImpl) ksession).session.getTimerService()).setCommandService( this );
if ( this.kContext == null ) {
// this should only happen when this class is first constructed
Modified: labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2010-08-13 15:33:49 UTC (rev 34712)
+++ labs/jbossrules/branches/5.1.x/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2010-08-13 22:49:14 UTC (rev 34713)
@@ -132,6 +132,8 @@
"org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
properties.setProperty( "drools.processSignalManagerFactory",
"org.drools.persistence.processinstance.JPASignalManagerFactory" );
+ properties.setProperty( "drools.timerService",
+ "org.drools.persistence.session.JpaJDKTimerService" );
SessionConfiguration config = new SessionConfiguration( properties );
SingleSessionCommandService service = new SingleSessionCommandService( kbase,
@@ -246,6 +248,8 @@
"org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
properties.setProperty( "drools.processSignalManagerFactory",
"org.drools.persistence.processinstance.JPASignalManagerFactory" );
+ properties.setProperty( "drools.timerService",
+ "org.drools.persistence.session.JpaJDKTimerService" );
SessionConfiguration config = new SessionConfiguration( properties );
SingleSessionCommandService service = new SingleSessionCommandService( kbase,
@@ -446,6 +450,8 @@
"org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
properties.setProperty( "drools.processSignalManagerFactory",
"org.drools.persistence.processinstance.JPASignalManagerFactory" );
+ properties.setProperty( "drools.timerService",
+ "org.drools.persistence.session.JpaJDKTimerService" );
SessionConfiguration config = new SessionConfiguration( properties );
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
@@ -618,6 +624,8 @@
"org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
properties.setProperty( "drools.processSignalManagerFactory",
"org.drools.persistence.processinstance.JPASignalManagerFactory" );
+ properties.setProperty( "drools.timerService",
+ "org.drools.persistence.session.JpaJDKTimerService" );
SessionConfiguration config = new SessionConfiguration( properties );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
@@ -722,6 +730,8 @@
"org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
properties.setProperty( "drools.processSignalManagerFactory",
"org.drools.persistence.processinstance.JPASignalManagerFactory" );
+ properties.setProperty( "drools.timerService",
+ "org.drools.persistence.session.JpaJDKTimerService" );
SessionConfiguration config = new SessionConfiguration( properties );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
More information about the jboss-svn-commits
mailing list