[jboss-svn-commits] JBL Code SVN: r25330 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/testframework and 20 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Feb 18 21:05:40 EST 2009
Author: KrisVerlaenen
Date: 2009-02-18 21:05:36 -0500 (Wed, 18 Feb 2009)
New Revision: 25330
Added:
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMarshallingHelper.java
labs/jbossrules/trunk/drools-process/drools-workitems/src/main/resources/icons/email.gif
Removed:
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMashallingHelper.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/process/enterprise/
labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/icons/
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessTimerTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalAgenda.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/WorkingMemoryAction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Marshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterHelper.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManagerFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/SignalManager.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/timer/TimerManager.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/TimerTest.java
labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/.project
labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/pom.xml
labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamFactTest.java
labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamGlobalTest.java
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/osworkflow/test/persistence/ComplexProcessPersistenceTestCase.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/jpa/JPAPersisterTest.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/EmailWorkItemHandler.java
Log:
JBRULES-1915: Improve process persistence usability
- fixed persistence / transactions solution
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -15,8 +15,10 @@
import org.drools.Person;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
+import org.drools.SessionConfiguration;
import org.drools.StatefulSession;
import org.drools.compiler.PackageBuilder;
+import org.drools.impl.EnvironmentFactory;
import org.drools.marshalling.DefaultMarshaller;
import org.drools.marshalling.Marshaller;
import org.drools.process.core.context.variable.VariableScope;
@@ -469,15 +471,32 @@
final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage(pkg);
- StatefulSession session = ruleBase.newStatefulSession();
+ final StatefulSession session = ruleBase.newStatefulSession();
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ }).start();
+
session.startProcess("com.sample.ruleflow", null);
assertEquals(1, session.getProcessInstances().size());
+ session.halt();
- session = getSerialisedStatefulSession( session );
+ final StatefulSession session2 = getSerialisedStatefulSession( session );
+
+ new Thread(new Runnable() {
+ public void run() {
+ session2.fireUntilHalt();
+ }
+ }).start();
+
Thread.sleep(400);
- assertEquals(0, session.getProcessInstances().size());
+ assertEquals(0, session2.getProcessInstances().size());
+
+ session2.halt();
}
public void test6() throws Exception {
@@ -509,7 +528,14 @@
final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage(pkg);
- StatefulSession session = ruleBase.newStatefulSession();
+ final StatefulSession session = ruleBase.newStatefulSession();
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ }).start();
+
session.startProcess("com.sample.ruleflow", null);
assertEquals(1, session.getProcessInstances().size());
@@ -518,14 +544,23 @@
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ruleBase.writeStatefulSession(session, baos, marshaller);
byte[] b1 = baos.toByteArray();
+ session.halt();
session.dispose();
Thread.sleep(400);
ByteArrayInputStream bais = new ByteArrayInputStream( b1 );
- session = ruleBase.readStatefulSession(bais, true, marshaller);
+ final StatefulSession session2 = ruleBase.readStatefulSession(bais, true, marshaller, new SessionConfiguration(), EnvironmentFactory.newEnvironment());
+
+ new Thread(new Runnable() {
+ public void run() {
+ session2.fireUntilHalt();
+ }
+ }).start();
+
Thread.sleep(100);
- assertEquals(0, session.getProcessInstances().size());
+ assertEquals(0, session2.getProcessInstances().size());
+ session2.halt();
}
private static class TestWorkItemHandler implements WorkItemHandler {
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessTimerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessTimerTest.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessTimerTest.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -73,20 +73,33 @@
Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
- StatefulSession session = ruleBase.newStatefulSession();
+ final StatefulSession session = ruleBase.newStatefulSession();
List<Message> myList = new ArrayList<Message>();
session.setGlobal("myList", myList);
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ }).start();
+
ProcessInstance processInstance = ( ProcessInstance )
session.startProcess("org.drools.timer");
assertEquals(0, myList.size());
assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
assertEquals(1, session.getTimerManager().getTimers().size());
+ session.halt();
- session = getSerialisedStatefulSession( session );
- myList = (List<Message>) session.getGlobal( "myList" );
- processInstance = ( ProcessInstance ) session.getProcessInstance( processInstance.getId() );
+ final StatefulSession session2 = getSerialisedStatefulSession( session );
+ myList = (List<Message>) session2.getGlobal( "myList" );
+ new Thread(new Runnable() {
+ public void run() {
+ session2.fireUntilHalt();
+ }
+ }).start();
+ processInstance = ( ProcessInstance ) session2.getProcessInstance( processInstance.getId() );
- assertEquals(1, session.getTimerManager().getTimers().size());
+ assertEquals(1, session2.getTimerManager().getTimers().size());
// test that the delay works
try {
@@ -102,9 +115,10 @@
} catch (InterruptedException e) {
// do nothing
}
- session.fireAllRules();
assertEquals(5, myList.size());
assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+
+ session2.halt();
}
@SuppressWarnings("unchecked")
@@ -147,20 +161,36 @@
Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
- StatefulSession session = ruleBase.newStatefulSession();
+ final StatefulSession session = ruleBase.newStatefulSession();
List<String> myList = new ArrayList<String>();
session.setGlobal("myList", myList);
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ }).start();
+
ProcessInstance processInstance = ( ProcessInstance )
session.startProcess("org.drools.timer");
assertEquals(0, myList.size());
assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
assertEquals(1, session.getTimerManager().getTimers().size());
- session = getSerialisedStatefulSession( session );
- myList = (List<String>) session.getGlobal( "myList" );
- processInstance = ( ProcessInstance ) session.getProcessInstance( processInstance.getId() );
+ session.halt();
- assertEquals(1, session.getTimerManager().getTimers().size());
+ final StatefulSession session2 = getSerialisedStatefulSession( session );
+ myList = (List<String>) session2.getGlobal( "myList" );
+
+ new Thread(new Runnable() {
+ public void run() {
+ session2.fireUntilHalt();
+ }
+ }).start();
+
+ processInstance = ( ProcessInstance ) session2.getProcessInstance( processInstance.getId() );
+
+ assertEquals(1, session2.getTimerManager().getTimers().size());
try {
Thread.sleep(400);
@@ -168,6 +198,8 @@
// do nothing
}
assertEquals(1, myList.size());
+
+ session2.halt();
}
@SuppressWarnings("unchecked")
@@ -210,27 +242,44 @@
Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
- StatefulSession session = ruleBase.newStatefulSession();
+ final StatefulSession session = ruleBase.newStatefulSession();
List<String> myList = new ArrayList<String>();
session.setGlobal("myList", myList);
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ }).start();
+
ProcessInstance processInstance = ( ProcessInstance )
session.startProcess("org.drools.timer");
assertEquals(0, myList.size());
assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
assertEquals(1, session.getTimerManager().getTimers().size());
+ session.halt();
- session = getSerialisedStatefulSession( session );
- myList = (List<String>) session.getGlobal( "myList" );
- processInstance = ( ProcessInstance ) session.getProcessInstance( processInstance.getId() );
+ final StatefulSession session2 = getSerialisedStatefulSession( session );
+ myList = (List<String>) session2.getGlobal( "myList" );
- assertEquals(1, session.getTimerManager().getTimers().size());
+ new Thread(new Runnable() {
+ public void run() {
+ session2.fireUntilHalt();
+ }
+ }).start();
+ processInstance = ( ProcessInstance ) session2.getProcessInstance( processInstance.getId() );
+
+ assertEquals(1, session2.getTimerManager().getTimers().size());
+
try {
Thread.sleep(600);
} catch (InterruptedException e) {
// do nothing
}
assertEquals(2, myList.size());
+
+ session2.halt();
}
@SuppressWarnings("unchecked")
@@ -276,18 +325,32 @@
Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
- StatefulSession session = ruleBase.newStatefulSession();
+ final StatefulSession session = ruleBase.newStatefulSession();
List<String> myList = new ArrayList<String>();
session.setGlobal("myList", myList);
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ }).start();
+
ProcessInstance processInstance = ( ProcessInstance )
session.startProcess("org.drools.timer");
assertEquals(0, myList.size());
assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
assertEquals(2, session.getTimerManager().getTimers().size());
- session = getSerialisedStatefulSession( session );
- myList = (List<String>) session.getGlobal( "myList" );
- assertEquals(2, session.getTimerManager().getTimers().size());
+ final StatefulSession session2 = getSerialisedStatefulSession( session );
+ myList = (List<String>) session2.getGlobal( "myList" );
+
+ new Thread(new Runnable() {
+ public void run() {
+ session2.fireUntilHalt();
+ }
+ }).start();
+
+ assertEquals(2, session2.getTimerManager().getTimers().size());
try {
Thread.sleep(300);
@@ -296,16 +359,25 @@
}
assertEquals(1, myList.size());
assertEquals("Executing timer2", myList.get(0));
+ session2.halt();
- session = getSerialisedStatefulSession( session );
+ final StatefulSession session3 = getSerialisedStatefulSession( session2 );
myList = (List<String>) session.getGlobal( "myList" );
+ new Thread(new Runnable() {
+ public void run() {
+ session3.fireUntilHalt();
+ }
+ }).start();
+
try {
Thread.sleep(400);
} catch (InterruptedException e) {
// do nothing
}
assertEquals(2, myList.size());
+
+ session3.halt();
}
@SuppressWarnings("unchecked")
@@ -348,20 +420,37 @@
Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
- StatefulSession session = ruleBase.newStatefulSession();
+ final StatefulSession session = ruleBase.newStatefulSession();
List<String> myList = new ArrayList<String>();
session.setGlobal("myList", myList);
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ }).start();
+
ProcessInstance processInstance = ( ProcessInstance )
session.startProcess("org.drools.timer");
assertEquals(0, myList.size());
assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
assertEquals(1, session.getTimerManager().getTimers().size());
+ session.halt();
- session = getSerialisedStatefulSession( session );
- myList = (List<String>) session.getGlobal( "myList" );
- session.insert(new Message());
+ final StatefulSession session2 = getSerialisedStatefulSession( session );
+ myList = (List<String>) session2.getGlobal( "myList" );
+
+ new Thread(new Runnable() {
+ public void run() {
+ session2.fireUntilHalt();
+ }
+ }).start();
+
+ session2.insert(new Message());
assertEquals(0, myList.size());
- assertEquals(0, session.getTimerManager().getTimers().size());
+ assertEquals(0, session2.getTimerManager().getTimers().size());
+
+ session2.halt();
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -6,6 +6,7 @@
import org.drools.RuleBase;
import org.drools.StatefulSession;
+import org.drools.common.InternalWorkingMemory;
import org.drools.marshalling.DefaultMarshaller;
import org.drools.marshalling.Marshaller;
import org.drools.util.DroolsStreamUtils;
@@ -60,7 +61,9 @@
ByteArrayInputStream bais = new ByteArrayInputStream( b1 );
StatefulSession session2 = ruleBase.readStatefulSession( bais,
true,
- marshaller );
+ marshaller,
+ ((InternalWorkingMemory) session).getSessionConfiguration(),
+ session.getEnvironment());
// write methods allways needs a new marshaller for Identity strategies
marshaller = new DefaultMarshaller();
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -144,7 +144,9 @@
public StatefulSession readStatefulSession(InputStream stream,
boolean keepReference,
- Marshaller marshaller) throws IOException,
+ Marshaller marshaller,
+ SessionConfiguration config,
+ Environment environment) throws IOException,
ClassNotFoundException {
// TODO Auto-generated method stub
return null;
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -16,6 +16,7 @@
import org.drools.FactHandle;
import org.drools.QueryResults;
import org.drools.RuleBase;
+import org.drools.SessionConfiguration;
import org.drools.WorkingMemoryEntryPoint;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalRuleBase;
@@ -513,5 +514,10 @@
// TODO Auto-generated method stub
return null;
}
+
+ public SessionConfiguration getSessionConfiguration() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -104,7 +104,9 @@
*/
StatefulSession readStatefulSession(InputStream stream,
boolean keepReference,
- Marshaller marshaller) throws IOException,
+ Marshaller marshaller,
+ SessionConfiguration sessionConfig,
+ Environment environment) throws IOException,
ClassNotFoundException;
public void writeStatefulSession(StatefulSession session,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -349,7 +349,9 @@
ClassNotFoundException {
return readStatefulSession( stream,
true,
- marshaller );
+ marshaller,
+ new SessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
}
/**
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -381,6 +381,10 @@
this.entryPointNode = this.ruleBase.getRete().getEntryPointNode( this.entryPoint );
this.typeConfReg = new ObjectTypeConfigurationRegistry( this.ruleBase );
}
+
+ public SessionConfiguration getSessionConfiguration() {
+ return this.config;
+ }
public void reset(int handleId,
long handleCounter,
@@ -1421,6 +1425,7 @@
public void queueWorkingMemoryAction(final WorkingMemoryAction action) {
synchronized ( this.actionQueue ) {
this.actionQueue.add( action );
+ this.agenda.notifyHalt();
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -1050,7 +1050,8 @@
public void fireUntilHalt(final AgendaFilter agendaFilter) {
this.halt.set( false );
while ( continueFiring( -1 ) ) {
- boolean fired = fireNextItem( agendaFilter );
+ boolean fired = fireNextItem( agendaFilter );
+ this.workingMemory.executeQueuedActions();
if ( !fired ) {
try {
synchronized ( this.halt ) {
@@ -1088,14 +1089,18 @@
private final int updateFireLimit(final int fireLimit) {
return fireLimit > 0 ? fireLimit - 1 : fireLimit;
}
-
- public void halt() {
- this.halt.set( true );
+
+ public void notifyHalt() {
synchronized ( this.halt ) {
this.halt.notifyAll();
}
}
+ public void halt() {
+ this.halt.set( true );
+ notifyHalt();
+ }
+
public ConsequenceExceptionHandler getConsequenceExceptionHandler() {
return this.legacyConsequenceExceptionHandler;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalAgenda.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalAgenda.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -100,6 +100,8 @@
* execution though.
*/
public void halt();
+
+ public void notifyHalt();
/**
* Keeps firing activations until a halt is called. If in a given moment, there is
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -5,6 +5,7 @@
import org.drools.FactException;
import org.drools.FactHandle;
+import org.drools.SessionConfiguration;
import org.drools.WorkingMemory;
import org.drools.concurrent.ExecutorService;
import org.drools.event.AgendaEventSupport;
@@ -123,4 +124,6 @@
public KnowledgeRuntime getKnowledgeRuntime();
public Map<String, ExitPoint> getExitPoints();
+
+ public SessionConfiguration getSessionConfiguration();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/WorkingMemoryAction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/WorkingMemoryAction.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/WorkingMemoryAction.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -14,6 +14,7 @@
public static final int PropagateAction = 3;
public static final int LogicalRetractCallback = 4;
public static final int WorkingMemoryReteExpireAction = 5;
+ public static final int SignalProcessInstanceAction = 6;
public void execute(InternalWorkingMemory workingMemory);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -5,11 +5,13 @@
import java.io.OutputStream;
import org.drools.RuleBaseConfiguration;
+import org.drools.SessionConfiguration;
import org.drools.StatefulSession;
import org.drools.common.InternalRuleBase;
import org.drools.common.InternalWorkingMemory;
import org.drools.concurrent.ExecutorService;
import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.runtime.Environment;
import org.drools.spi.GlobalResolver;
public class DefaultMarshaller
@@ -51,19 +53,22 @@
public ReteooStatefulSession read(final InputStream stream,
final InternalRuleBase ruleBase,
final int id,
- final ExecutorService executor) throws IOException,
+ final ExecutorService executor,
+ final SessionConfiguration config,
+ final Environment environment) throws IOException,
ClassNotFoundException {
MarshallerReaderContext context = new MarshallerReaderContext( stream,
ruleBase,
RuleBaseNodes.getNodeMap( ruleBase ),
factory,
marshallingConfig.isMarshallProcessInstances(),
- marshallingConfig.isMarshallWorkItems(),
- marshallingConfig.isMarshallTimers() );
+ marshallingConfig.isMarshallWorkItems() );
ReteooStatefulSession session = InputMarshaller.readSession( context,
id,
- executor );
+ executor,
+ environment,
+ config );
context.close();
return session;
@@ -78,8 +83,7 @@
RuleBaseNodes.getNodeMap( ruleBase ),
factory,
marshallingConfig.isMarshallProcessInstances(),
- marshallingConfig.isMarshallWorkItems(),
- marshallingConfig.isMarshallTimers());
+ marshallingConfig.isMarshallWorkItems());
session = InputMarshaller.readSession( (ReteooStatefulSession) session,
context );
@@ -100,8 +104,7 @@
RuleBaseNodes.getNodeMap( ruleBase ),
this.factory,
marshallingConfig.isMarshallProcessInstances(),
- marshallingConfig.isMarshallWorkItems(),
- marshallingConfig.isMarshallTimers() );
+ marshallingConfig.isMarshallWorkItems() );
OutputMarshaller.writeSession( context );
context.close();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -138,9 +138,7 @@
readWorkItems( context );
}
- if ( context.marshalTimers ) {
- readTimers( context );
- }
+ readTimers( context );
if( multithread ) {
session.startPartitionManagers();
@@ -162,13 +160,14 @@
int id,
ExecutorService executor) throws IOException,
ClassNotFoundException {
- return readSession( context, id, executor, EnvironmentFactory.newEnvironment() );
+ return readSession( context, id, executor, EnvironmentFactory.newEnvironment(), new SessionConfiguration() );
}
public static ReteooStatefulSession readSession(MarshallerReaderContext context,
int id,
ExecutorService executor,
- Environment environment) throws IOException,
+ Environment environment,
+ SessionConfiguration config) throws IOException,
ClassNotFoundException {
boolean multithread = context.readBoolean();
@@ -194,7 +193,7 @@
handleFactory,
initialFactHandle,
propagationCounter,
- new SessionConfiguration(), // FIXME: must deserialize configuration
+ config,
agenda,
environment );
@@ -220,9 +219,7 @@
readWorkItems( context );
}
- if ( context.marshalTimers ) {
- readTimers( context );
- }
+ readTimers( context );
if( multithread ) {
session.startPartitionManagers();
@@ -260,7 +257,7 @@
}
- public static void readActionQueue(MarshallerReaderContext context) throws IOException {
+ public static void readActionQueue(MarshallerReaderContext context) throws IOException, ClassNotFoundException {
ReteooWorkingMemory wm = (ReteooWorkingMemory) context.wm;
Queue actionQueue = wm.getActionQueue();
while ( context.readShort() == PersisterEnums.WORKING_MEMORY_ACTION ) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Marshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Marshaller.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Marshaller.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -4,16 +4,20 @@
import java.io.InputStream;
import java.io.OutputStream;
+import org.drools.SessionConfiguration;
import org.drools.StatefulSession;
import org.drools.common.InternalRuleBase;
import org.drools.concurrent.ExecutorService;
+import org.drools.runtime.Environment;
public interface Marshaller {
public StatefulSession read(final InputStream stream,
final InternalRuleBase ruleBase,
final int id,
- final ExecutorService executor) throws IOException,
+ final ExecutorService executor,
+ final SessionConfiguration config,
+ final Environment environment) throws IOException,
ClassNotFoundException;
public StatefulSession read(final InputStream stream,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -36,7 +36,6 @@
public final boolean marshalProcessInstances;
public final boolean marshalWorkItems;
- public final boolean marshalTimers;
public MarshallerReaderContext(InputStream stream,
InternalRuleBase ruleBase,
@@ -47,7 +46,6 @@
sinks,
resolverStrategyFactory,
true,
- true,
true );
}
@@ -56,8 +54,7 @@
Map<Integer, BaseNode> sinks,
PlaceholderResolverStrategyFactory resolverStrategyFactory,
boolean marshalProcessInstances,
- boolean marshalWorkItems,
- boolean marshalTimers) throws IOException {
+ boolean marshalWorkItems) throws IOException {
super( stream );
this.stream = this;
this.ruleBase = ruleBase;
@@ -70,6 +67,5 @@
this.resolverStrategyFactory = resolverStrategyFactory;
this.marshalProcessInstances = marshalProcessInstances;
this.marshalWorkItems = marshalWorkItems;
- this.marshalTimers = marshalTimers;
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -29,14 +29,13 @@
public final boolean marshalProcessInstances;
public final boolean marshalWorkItems;
- public final boolean marshalTimers;
public MarshallerWriteContext(OutputStream stream,
InternalRuleBase ruleBase,
InternalWorkingMemory wm,
Map<Integer, BaseNode> sinks,
PlaceholderResolverStrategyFactory resolverStrategyFactory) throws IOException {
- this(stream, ruleBase, wm, sinks, resolverStrategyFactory, true, true, true);
+ this(stream, ruleBase, wm, sinks, resolverStrategyFactory, true, true);
}
public MarshallerWriteContext(OutputStream stream,
@@ -45,8 +44,7 @@
Map<Integer, BaseNode> sinks,
PlaceholderResolverStrategyFactory resolverStrategyFactory,
boolean marshalProcessInstances,
- boolean marshalWorkItems,
- boolean marshalTimers) throws IOException {
+ boolean marshalWorkItems) throws IOException {
super( stream );
this.stream = this;
this.ruleBase = ruleBase;
@@ -59,6 +57,5 @@
this.marshalProcessInstances = marshalProcessInstances;
this.marshalWorkItems = marshalWorkItems;
- this.marshalTimers = marshalTimers;
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -4,5 +4,4 @@
PlaceholderResolverStrategyFactory getPlaceholderResolverStrategyFactory();
boolean isMarshallProcessInstances();
boolean isMarshallWorkItems();
- boolean isMarshallTimers();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -6,23 +6,19 @@
private PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory;
private boolean marshallProcessInstances;
private boolean marshallWorkItems;
- private boolean marshallTimers;
public MarshallingConfigurationImpl() {
this( null,
true,
- true,
true );
}
public MarshallingConfigurationImpl(PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory,
boolean marshallProcessInstances,
- boolean marshallWorkItems,
- boolean marshallTimers) {
+ boolean marshallWorkItems) {
this.placeholderResolverStrategyFactory = placeholderResolverStrategyFactory;
this.marshallProcessInstances = marshallProcessInstances;
this.marshallWorkItems = marshallWorkItems;
- this.marshallTimers = marshallTimers;
}
public boolean isMarshallProcessInstances() {
@@ -41,14 +37,6 @@
this.marshallWorkItems = marshallWorkItems;
}
- public boolean isMarshallTimers() {
- return this.marshallTimers;
- }
-
- public void setMarshallTimers(boolean marshallTimers) {
- this.marshallTimers = marshallTimers;
- }
-
public PlaceholderResolverStrategyFactory getPlaceholderResolverStrategyFactory() {
return this.placeholderResolverStrategyFactory;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -113,9 +113,7 @@
writeWorkItems( context );
}
- if ( context.marshalTimers ) {
- writeTimers( context );
- }
+ writeTimers( context );
if( multithread ) {
wm.startPartitionManagers();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterHelper.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterHelper.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -5,11 +5,12 @@
import org.drools.common.WorkingMemoryAction;
import org.drools.common.RuleFlowGroupImpl.DeactivateCallback;
import org.drools.common.TruthMaintenanceSystem.LogicalRetractCallback;
+import org.drools.process.instance.event.DefaultSignalManager.SignalProcessInstanceAction;
import org.drools.reteoo.PropagationQueuingNode.PropagateAction;
import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
public class PersisterHelper {
- public static WorkingMemoryAction readWorkingMemoryAction(MarshallerReaderContext context) throws IOException {
+ public static WorkingMemoryAction readWorkingMemoryAction(MarshallerReaderContext context) throws IOException, ClassNotFoundException {
int type = context.readInt();
switch(type) {
case WorkingMemoryAction.WorkingMemoryReteAssertAction : {
@@ -24,6 +25,10 @@
case WorkingMemoryAction.LogicalRetractCallback : {
return new LogicalRetractCallback(context);
}
+
+ case WorkingMemoryAction.SignalProcessInstanceAction : {
+ return new SignalProcessInstanceAction(context);
+ }
}
return null;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -39,7 +39,7 @@
} else {
ProcessInstance processInstance = session.getProcessInstance(processInstanceId);
if (processInstance != null) {
- processInstance.signalEvent(eventType, processInstance);
+ processInstance.signalEvent(eventType, event);
}
}
return null;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -44,7 +44,6 @@
}
}
ProcessInstance processInstance = (ProcessInstance) session.startProcess(processId, parameters);
- session.fireAllRules();
return processInstance;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -1,16 +1,33 @@
package org.drools.process.instance.event;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
+import org.drools.WorkingMemory;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.common.WorkingMemoryAction;
+import org.drools.marshalling.MarshallerReaderContext;
+import org.drools.marshalling.MarshallerWriteContext;
import org.drools.runtime.process.EventListener;
import org.drools.runtime.process.ProcessInstance;
public class DefaultSignalManager implements SignalManager {
private Map<String, List<EventListener>> processEventListeners;
+ private WorkingMemory workingMemory;
+
+ public DefaultSignalManager(WorkingMemory workingMemory) {
+ this.workingMemory = workingMemory;
+ }
+
+ public WorkingMemory getWorkingMemory() {
+ return workingMemory;
+ }
public void addEventListener(String type, EventListener eventListener) {
if (processEventListeners == null) {
@@ -44,8 +61,65 @@
}
}
- public void signalEvent(ProcessInstance processInstance, String type, Object event) {
- processInstance.signalEvent(type, event);
+ public void signalEvent(long processInstanceId, String type, Object event) {
+ ProcessInstance processInstance = workingMemory.getProcessInstance(processInstanceId);
+ if (processInstance != null) {
+ ((InternalWorkingMemory) workingMemory).queueWorkingMemoryAction(new SignalProcessInstanceAction(processInstanceId, type, event));
+ }
}
+ public static class SignalProcessInstanceAction implements WorkingMemoryAction {
+
+ private long processInstanceId;
+ private String type;
+ private Object event;
+
+ public SignalProcessInstanceAction(long processInstanceId, String type, Object event) {
+ this.processInstanceId = processInstanceId;
+ this.type = type;
+ this.event = event;
+
+ }
+
+ public SignalProcessInstanceAction(MarshallerReaderContext context) throws IOException, ClassNotFoundException {
+ processInstanceId = context.readLong();
+ type = context.readUTF();
+ if (context.readBoolean()) {
+ event = context.readObject();
+ }
+ }
+
+ public void execute(InternalWorkingMemory workingMemory) {
+ workingMemory.getProcessInstance(processInstanceId).signalEvent(type, event);
+ }
+
+ public void write(MarshallerWriteContext context) throws IOException {
+ context.writeInt( WorkingMemoryAction.SignalProcessInstanceAction );
+ context.writeLong(processInstanceId);
+ context.writeUTF(type);
+ context.writeBoolean(event != null);
+ if (event != null) {
+ context.writeObject(event);
+ }
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ processInstanceId = in.readLong();
+ type = in.readUTF();
+ if (in.readBoolean()) {
+ event = in.readObject();
+ }
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeLong(processInstanceId);
+ out.writeUTF(type);
+ out.writeBoolean(event != null);
+ if (event != null) {
+ out.writeObject(event);
+ }
+ }
+
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManagerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManagerFactory.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManagerFactory.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -5,7 +5,7 @@
public class DefaultSignalManagerFactory implements SignalManagerFactory {
public SignalManager createSignalManager(WorkingMemory workingMemory) {
- return new DefaultSignalManager();
+ return new DefaultSignalManager(workingMemory);
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/SignalManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/SignalManager.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/SignalManager.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -7,7 +7,7 @@
void signalEvent(String type, Object event);
- void signalEvent(ProcessInstance processInstance, String type, Object event);
+ void signalEvent(long processInstanceId, String type, Object event);
void addEventListener(String type, EventListener eventListener);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/timer/TimerManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/timer/TimerManager.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/timer/TimerManager.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -129,11 +129,7 @@
ctx.getTimer().setLastTriggered(new Date());
- ProcessInstance processInstance = ( ProcessInstance ) workingMemory.getProcessInstance( processInstanceId );
- // process instance may have finished already
- if ( processInstance != null ) {
- workingMemory.getSignalManager().signalEvent(processInstance, "timerTriggered", ctx.getTimer());
- }
+ workingMemory.getSignalManager().signalEvent(processInstanceId, "timerTriggered", ctx.getTimer());
if (ctx.getTimer().getPeriod() == 0) {
TimerManager.this.timers.remove(ctx.getTimer().getId());
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -284,7 +284,9 @@
public StatefulSession readStatefulSession(final InputStream stream,
final boolean keepReference,
- Marshaller marshaller) throws IOException,
+ final Marshaller marshaller,
+ final SessionConfiguration sessionConfig,
+ Environment environment ) throws IOException,
ClassNotFoundException {
if ( this.config.isSequential() ) {
@@ -298,7 +300,7 @@
synchronized ( this.pkgs ) {
ExecutorService executor = ExecutorServiceFactory.createExecutorService( this.config.getExecutorService() );
- session = marshaller.read( stream, this, nextWorkingMemoryCounter(), executor );
+ session = marshaller.read( stream, this, nextWorkingMemoryCounter(), executor, sessionConfig, environment );
// WMSerialisationInContext context = new WMSerialisationInContext( stream,
// this,
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/TimerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/TimerTest.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/process/TimerTest.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -3,11 +3,15 @@
import junit.framework.TestCase;
import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
import org.drools.common.AbstractRuleBase;
import org.drools.common.InternalWorkingMemory;
+import org.drools.concurrent.CommandExecutor;
+import org.drools.concurrent.DefaultExecutorService;
+import org.drools.concurrent.ExecutorService;
import org.drools.process.instance.timer.TimerInstance;
import org.drools.process.instance.timer.TimerManager;
-import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.reteoo.ReteooStatefulSession;
import org.drools.ruleflow.instance.RuleFlowProcessInstance;
public class TimerTest extends TestCase {
@@ -16,7 +20,10 @@
public void testTimer() {
AbstractRuleBase ruleBase = (AbstractRuleBase) RuleBaseFactory.newRuleBase();
- InternalWorkingMemory workingMemory = new ReteooWorkingMemory(1, ruleBase);
+ ExecutorService executorService = new DefaultExecutorService();
+ final StatefulSession workingMemory = new ReteooStatefulSession(1, ruleBase, executorService);
+ executorService.setCommandExecutor( new CommandExecutor( workingMemory ) );
+
RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance() {
private static final long serialVersionUID = 4L;
public void signalEvent(String type, Object event) {
@@ -27,8 +34,17 @@
}
}
};
+ processInstance.setWorkingMemory((InternalWorkingMemory) workingMemory);
processInstance.setId(1234);
- workingMemory.getProcessInstanceManager().internalAddProcessInstance(processInstance);
+ ((InternalWorkingMemory) workingMemory).getProcessInstanceManager()
+ .internalAddProcessInstance(processInstance);
+
+ new Thread(new Runnable() {
+ public void run() {
+ workingMemory.fireUntilHalt();
+ }
+ }).start();
+
TimerManager timerManager = workingMemory.getTimerManager();
TimerInstance timer = new TimerInstance();
timerManager.registerTimer(timer, processInstance);
Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/.project
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/.project 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/.project 2009-02-19 02:05:36 UTC (rev 25330)
@@ -1,17 +1,13 @@
-<projectDescription>
- <name>drools-transformer-xstream</name>
- <comment>A rule production system</comment>
- <projects>
- <project>drools-api</project>
- <project>drools-compiler</project>
- <project>drools-core</project>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
+<projectDescription>
+ <name>drools-transformer-xstream</name>
+ <comment>A rule production system</comment>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
</projectDescription>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/pom.xml 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/pom.xml 2009-02-19 02:05:36 UTC (rev 25330)
@@ -30,6 +30,13 @@
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>xmlunit</groupId>
+ <artifactId>xmlunit</artifactId>
+ <version>1.2</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<repositories>
Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamFactTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamFactTest.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamFactTest.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -1,9 +1,10 @@
package org.drools.runtime.pipeline.impl;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Map;
+import junit.framework.TestCase;
+
+import org.custommonkey.xmlunit.Diff;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
@@ -21,18 +22,16 @@
import com.thoughtworks.xstream.XStream;
-import junit.framework.TestCase;
-
public class XStreamFactTest extends TestCase {
public void testFact() throws Exception {
String xml = "";
- xml += "<list>";
- xml += "<example.OrderItem>";
- xml += " <price>8.9</price>";
- xml += " <productId>111</productId>";
- xml += " <quantity>2</quantity>";
- xml += "</example.OrderItem>";
- xml += "</list>";
+ xml += "<list>\n";
+ xml += " <example.OrderItem>\n";
+ xml += " <price>8.9</price>\n";
+ xml += " <productId>111</productId>\n";
+ xml += " <quantity>2</quantity>\n";
+ xml += " </example.OrderItem>\n";
+ xml += "</list>\n";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
@@ -86,7 +85,7 @@
resultHandler = new ResultHandlerImpl();
pipeline.insert( factHandle, resultHandler );
- assertEqualsIgnoreWhitespace( xml, (String) resultHandler.getObject() );
+ assertTrue( new Diff( xml, (String) resultHandler.getObject() ).similar() );
}
private static void assertEqualsIgnoreWhitespace(final String expected,
Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamGlobalTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamGlobalTest.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamGlobalTest.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -1,9 +1,8 @@
package org.drools.runtime.pipeline.impl;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import junit.framework.TestCase;
+import org.custommonkey.xmlunit.Diff;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
@@ -17,21 +16,18 @@
import org.drools.runtime.pipeline.PipelineFactory;
import org.drools.runtime.pipeline.Transformer;
import org.drools.runtime.pipeline.impl.XStreamStatefulSessionTest.ResultHandlerImpl;
-import org.drools.runtime.rule.FactHandle;
import com.thoughtworks.xstream.XStream;
-import junit.framework.TestCase;
-
public class XStreamGlobalTest extends TestCase {
public void testGlobal() throws Exception {
String xml = "";
- xml += "<list>";
- xml += "<example.OrderItem>";
- xml += " <price>8.9</price>";
- xml += " <productId>111</productId>";
- xml += " <quantity>2</quantity>";
- xml += "</example.OrderItem>";
+ xml += "<list>\n";
+ xml += " <example.OrderItem>\n";
+ xml += " <price>8.9</price>\n";
+ xml += " <productId>111</productId>\n";
+ xml += " <quantity>2</quantity>\n";
+ xml += " </example.OrderItem>\n";
xml += "</list>";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
@@ -81,7 +77,10 @@
resultHandler = new ResultHandlerImpl();
pipeline.insert( "list", resultHandler );
- assertEqualsIgnoreWhitespace( xml, (String) resultHandler.getObject() );
+ System.out.println(xml);
+ System.out.println(resultHandler.getObject());
+ System.out.println(new Diff( xml, (String) resultHandler.getObject() ));
+ assertTrue( new Diff( xml, (String) resultHandler.getObject() ).similar() );
}
private static void assertEqualsIgnoreWhitespace(final String expected,
Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/osworkflow/test/persistence/ComplexProcessPersistenceTestCase.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/osworkflow/test/persistence/ComplexProcessPersistenceTestCase.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/osworkflow/test/persistence/ComplexProcessPersistenceTestCase.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -5,10 +5,12 @@
import org.drools.RuleBase;
import org.drools.RuleBaseConfiguration;
import org.drools.SessionConfiguration;
+import org.drools.impl.EnvironmentFactory;
import org.drools.osworkflow.core.command.DoActionCommand;
import org.drools.persistence.session.SingleSessionCommandService;
import org.drools.process.command.GetProcessInstanceCommand;
import org.drools.process.command.StartProcessCommand;
+import org.drools.runtime.Environment;
import org.drools.runtime.process.ProcessInstance;
public class ComplexProcessPersistenceTestCase extends AbstractJPAPersistenceTestCase {
@@ -20,27 +22,29 @@
RuleBase ruleBase = createKnowledgeBase(conf,"/entrevistarf.rf");
SessionConfiguration config = new SessionConfiguration(properties);
+ Environment environment = EnvironmentFactory.newEnvironment();
- SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config);
+ SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, environment);
+ int sessionId = service.getSessionId();
StartProcessCommand startProcessCommand = new StartProcessCommand();
startProcessCommand.setProcessId("entrevista");
ProcessInstance processInstance = (ProcessInstance) service.execute(startProcessCommand);
System.out.println("Started process instance " + processInstance.getId());
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, environment, sessionId);
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
System.out.println("Now working with processInstance " + processInstance.getId());
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, environment, sessionId);
DoActionCommand doActionCmd = new DoActionCommand();
doActionCmd.setProcessInstanceId(processInstance.getId());
doActionCmd.setActionId(2); //Action to be executed at current step
service.execute(doActionCmd);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, environment, sessionId);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
@@ -48,13 +52,13 @@
System.out.println("Now working with processInstance " + processInstance.getId());
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, environment, sessionId);
doActionCmd = new DoActionCommand();
doActionCmd.setProcessInstanceId(processInstance.getId());
doActionCmd.setActionId(4); //Action to be executed at current step
service.execute(doActionCmd);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, environment, sessionId);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -6,49 +6,46 @@
import javax.persistence.Query;
import org.drools.WorkingMemory;
+import org.drools.process.command.CommandService;
+import org.drools.process.command.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 WorkingMemory workingMemory;
+ private CommandService commandService;
public JPASignalManager(WorkingMemory workingMemory) {
- this.workingMemory = workingMemory;
+ super(workingMemory);
}
+ public void setCommandService(CommandService commandService) {
+ this.commandService = commandService;
+ }
+
public void signalEvent(String type,
Object event) {
for ( long id : getProcessInstancesForEvent( type ) ) {
- workingMemory.getProcessInstance( id );
+ getWorkingMemory().getProcessInstance( id );
}
super.signalEvent( type,
event );
}
- public void signalEvent(ProcessInstance processInstance,
+ public void signalEvent(long processInstanceId,
String type,
Object event) {
- // Transaction transaction = persister.getTransaction();
- // try {
- // transaction.start();
- // super.signalEvent(processInstance, type, event);
- // transaction.commit();
- // } catch (Throwable t) {
- // t.printStackTrace();
- // try {
- // transaction.rollback();
- // throw new RuntimeException("Could not execute command", t);
- // } catch (XAException e) {
- // throw new RuntimeException("Could not rollback transaction", e);
- // }
- // }
+ 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) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
+ EntityManager em = (EntityManager) getWorkingMemory().getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
Query processInstancesForEvent = em.createNamedQuery( "ProcessInstancesWaitingForEvent" );
processInstancesForEvent.setParameter( "type",
Copied: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMarshallingHelper.java (from rev 25289, labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMashallingHelper.java)
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMarshallingHelper.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMarshallingHelper.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -0,0 +1,112 @@
+package org.drools.persistence.session;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import org.drools.RuleBase;
+import org.drools.SessionConfiguration;
+import org.drools.StatefulSession;
+import org.drools.common.InternalRuleBase;
+import org.drools.marshalling.DefaultMarshaller;
+import org.drools.marshalling.Marshaller;
+import org.drools.marshalling.MarshallingConfiguration;
+import org.drools.runtime.Environment;
+
+public class JPASessionMarshallingHelper {
+
+ private RuleBase ruleBase;
+ private SessionConfiguration conf;
+ private StatefulSession session;
+ private Marshaller marshaller;
+ private Environment environment;
+
+ /**
+ * Exist Info, so load session from here
+ * @param info
+ * @param ruleBase
+ * @param conf
+ * @param marshallingConfiguration
+ */
+ public JPASessionMarshallingHelper(SessionInfo info,
+ RuleBase ruleBase,
+ SessionConfiguration conf,
+ MarshallingConfiguration marshallingConfiguration,
+ Environment environment) {
+ this.ruleBase = ruleBase;
+ this.conf = conf;
+ this.environment = environment;
+ this.marshaller = new DefaultMarshaller( ((InternalRuleBase) ruleBase).getConfiguration(),
+ marshallingConfiguration );
+ loadSnapshot( info.getData() );
+ info.setJPASessionMashallingHelper( this );
+ }
+
+ /**
+ * new session, don't write now as info will request it on update callback
+ * @param info
+ * @param session
+ * @param conf
+ * @param marshallingConfiguration
+ */
+ public JPASessionMarshallingHelper(StatefulSession session,
+ SessionConfiguration conf,
+ MarshallingConfiguration marshallingConfiguration) {
+ this.session = session;
+ this.ruleBase = session.getRuleBase();
+ this.environment = session.getEnvironment();
+ this.conf = conf;
+ this.marshaller = new DefaultMarshaller( ((InternalRuleBase) ruleBase).getConfiguration(),
+ marshallingConfiguration );
+ }
+
+ public byte[] getSnapshot() {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try {
+ marshaller.write( baos,
+ (InternalRuleBase) ruleBase,
+ session );
+ } catch ( IOException e ) {
+ throw new RuntimeException( "Unable to get session snapshot",
+ e );
+ }
+
+ return baos.toByteArray();
+ }
+
+ public StatefulSession loadSnapshot(byte[] bytes,
+ StatefulSession session) {
+ this.session = session;
+ ByteArrayInputStream bais = new ByteArrayInputStream( bytes );
+ try {
+ marshaller.read( bais,
+ (InternalRuleBase) ruleBase,
+ session );
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to load session snapshot",
+ e );
+ }
+ return this.session;
+ }
+
+ public StatefulSession loadSnapshot(byte[] bytes) {
+ try {
+ ByteArrayInputStream bais = new ByteArrayInputStream( bytes );
+ if ( this.session == null ) {
+ this.session = this.ruleBase.readStatefulSession( bais, true, marshaller, conf, environment );
+ } else {
+ loadSnapshot( bytes,
+ this.session );
+ }
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to load session snapshot",
+ e );
+ }
+ return this.session;
+ }
+
+ public StatefulSession getObject() {
+ return session;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMashallingHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMashallingHelper.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMashallingHelper.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -1,108 +0,0 @@
-package org.drools.persistence.session;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-import org.drools.RuleBase;
-import org.drools.SessionConfiguration;
-import org.drools.StatefulSession;
-import org.drools.common.InternalRuleBase;
-import org.drools.marshalling.DefaultMarshaller;
-import org.drools.marshalling.Marshaller;
-import org.drools.marshalling.MarshallingConfiguration;
-
-public class JPASessionMashallingHelper {
-
- private RuleBase ruleBase;
- private SessionConfiguration conf;
- private StatefulSession session;
- private Marshaller marshaller;
-
- /**
- * Exist Info, so load session from here
- * @param info
- * @param ruleBase
- * @param conf
- * @param marshallingConfiguration
- */
- public JPASessionMashallingHelper(SessionInfo info,
- RuleBase ruleBase,
- SessionConfiguration conf,
- MarshallingConfiguration marshallingConfiguration) {
- this.ruleBase = session.getRuleBase();
- this.conf = conf;
- this.marshaller = new DefaultMarshaller( ((InternalRuleBase) ruleBase).getConfiguration(),
- marshallingConfiguration );
- loadSnapshot( info.getData() );
- info.setJPASessionMashallingHelper( this );
- }
-
- /**
- * new session, don't write now as info will request it on update callback
- * @param info
- * @param session
- * @param conf
- * @param marshallingConfiguration
- */
- public JPASessionMashallingHelper(StatefulSession session,
- SessionConfiguration conf,
- MarshallingConfiguration marshallingConfiguration) {
- this.session = session;
- this.ruleBase = session.getRuleBase();
- this.conf = conf;
- this.marshaller = new DefaultMarshaller( ((InternalRuleBase) ruleBase).getConfiguration(),
- marshallingConfiguration );
- }
-
- public byte[] getSnapshot() {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try {
- marshaller.write( baos,
- (InternalRuleBase) ruleBase,
- session );
- } catch ( IOException e ) {
- throw new RuntimeException( "Unable to get session snapshot",
- e );
- }
-
- return baos.toByteArray();
- }
-
- public StatefulSession loadSnapshot(byte[] bytes,
- StatefulSession session) {
- this.session = session;
- ByteArrayInputStream bais = new ByteArrayInputStream( bytes );
- try {
- marshaller.read( bais,
- (InternalRuleBase) ruleBase,
- session );
- } catch ( Exception e ) {
- throw new RuntimeException( "Unable to load session snapshot",
- e );
- }
- return this.session;
- }
-
- public StatefulSession loadSnapshot(byte[] bytes) {
- try {
- ByteArrayInputStream bais = new ByteArrayInputStream( bytes );
- if ( this.session == null ) {
- this.session = this.ruleBase.readStatefulSession( bais,
- marshaller );
- } else {
- loadSnapshot( bytes,
- this.session );
- }
- } catch ( Exception e ) {
- throw new RuntimeException( "Unable to load session snapshot",
- e );
- }
- return this.session;
- }
-
- public StatefulSession getObject() {
- return session;
- }
-
-}
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -44,7 +44,7 @@
MarshallingConfiguration marshallingConfiguration;
@Transient
- JPASessionMashallingHelper helper;
+ JPASessionMarshallingHelper helper;
public SessionInfo() {
this.startDate = new Date();
@@ -58,7 +58,7 @@
// return this.version;
// }
- public void setJPASessionMashallingHelper(JPASessionMashallingHelper helper) {
+ public void setJPASessionMashallingHelper(JPASessionMarshallingHelper helper) {
this.helper = helper;
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -9,7 +9,6 @@
import javax.transaction.Status;
import javax.transaction.Synchronization;
import javax.transaction.SystemException;
-import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction;
@@ -22,6 +21,7 @@
import org.drools.marshalling.MarshallingConfiguration;
import org.drools.marshalling.MarshallingConfigurationImpl;
import org.drools.marshalling.PlaceholderResolverStrategyFactory;
+import org.drools.persistence.processinstance.JPASignalManager;
import org.drools.process.command.Command;
import org.drools.process.command.CommandService;
import org.drools.reteoo.ReteooRuleBase;
@@ -37,7 +37,7 @@
private EntityManagerFactory emf;
private EntityManager em;
private SessionInfo sessionInfo;
- private JPASessionMashallingHelper marshallingHelper;
+ private JPASessionMarshallingHelper marshallingHelper;
private StatefulSession session;
private Environment env;
@@ -52,32 +52,22 @@
public SingleSessionCommandService(RuleBase ruleBase,
SessionConfiguration conf,
Environment env) {
- if ( conf == null ) {
+ if (conf == null) {
conf = new SessionConfiguration();
}
-
this.env = env;
-
this.sessionInfo = new SessionInfo();
+ this.session = ((ReteooRuleBase) ruleBase).newStatefulSession(this.sessionInfo.getId(), conf, env);
+ ((JPASignalManager) this.session.getSignalManager()).setCommandService(this);
+ MarshallingConfiguration marshallingConf = new MarshallingConfigurationImpl(
+ (PlaceholderResolverStrategyFactory) env.get(EnvironmentName.PLACEHOLDER_RESOLVER_STRATEGY_FACTORY),
+ false, false);
+ this.marshallingHelper = new JPASessionMarshallingHelper(this.session, conf, marshallingConf);
+ this.sessionInfo.setJPASessionMashallingHelper(this.marshallingHelper);
- this.session = ((ReteooRuleBase) ruleBase).newStatefulSession( this.sessionInfo.getId(),
- conf,
- env );
-
- MarshallingConfiguration marshallingConf = new MarshallingConfigurationImpl( (PlaceholderResolverStrategyFactory) env.get( EnvironmentName.PLACEHOLDER_RESOLVER_STRATEGY_FACTORY ),
- false,
- false,
- false );
-
- this.marshallingHelper = new JPASessionMashallingHelper( this.session,
- conf,
- marshallingConf );
-
- this.sessionInfo.setJPASessionMashallingHelper( this.marshallingHelper );
-
this.emf = (EntityManagerFactory) env.get( EnvironmentName.ENTITY_MANAGER_FACTORY );
this.em = emf.createEntityManager(); // how can I ensure this is an extended entity?
- System.out.println( ((EntityManagerImpl) this.em).getFlushMode() );
+// System.out.println( ((EntityManagerImpl) this.em).getFlushMode() );
UserTransaction ut = null;
try {
InitialContext ctx = new InitialContext();
@@ -88,15 +78,15 @@
this.em.persist( this.sessionInfo );
- System.out.println( "committing" );
+// System.out.println( "committing" );
ut.commit();
- System.out.println( "commit complete" );
+// System.out.println( "commit complete" );
} catch ( Throwable t1 ) {
- try {
+ try {
if ( ut != null ) {
ut.rollback();
}
- throw new RuntimeException( "Could insert session data",
+ throw new RuntimeException( "Could not insert session data",
t1 );
} catch ( Throwable t2 ) {
throw new RuntimeException( "Could not rollback transaction",
@@ -104,21 +94,70 @@
}
}
- EntityManager localEm = this.emf.createEntityManager();
- // System.out.println( "1) version " + localEm.find( SessionInfo.class, sessionInfo.getId() ).getVersion() );
- localEm.close();
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ });
}
+ public SingleSessionCommandService(RuleBase ruleBase, SessionConfiguration conf, Environment env, int sessionId) {
+ if (conf == null) {
+ conf = new SessionConfiguration();
+ }
+
+ this.env = env;
+
+ this.emf = (EntityManagerFactory) env.get(EnvironmentName.ENTITY_MANAGER_FACTORY);
+ this.em = emf.createEntityManager(); // how can I ensure this is an extended entity?
+ //System.out.println(((EntityManagerImpl) this.em).getFlushMode());
+ UserTransaction ut = null;
+ try {
+ InitialContext ctx = new InitialContext();
+ ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
+ ut.begin();
+ registerRollbackSync();
+ this.em.joinTransaction();
+
+ sessionInfo = this.em.find(SessionInfo.class, sessionId);
+
+ // System.out.println("committing");
+ ut.commit();
+ // System.out.println("commit complete");
+ } catch (Throwable t1) {
+ try {
+ if (ut != null) {
+ ut.rollback();
+ }
+ throw new RuntimeException("Could insert session data", t1);
+ } catch (Throwable t2) {
+ throw new RuntimeException("Could not rollback transaction", t2);
+ }
+ }
+
+ MarshallingConfiguration marshallingConf = new MarshallingConfigurationImpl(
+ (PlaceholderResolverStrategyFactory) env.get(EnvironmentName.PLACEHOLDER_RESOLVER_STRATEGY_FACTORY),
+ false, false);
+ this.marshallingHelper = new JPASessionMarshallingHelper(sessionInfo, ruleBase, conf, marshallingConf, env);
+ this.sessionInfo.setJPASessionMashallingHelper(this.marshallingHelper);
+ this.session = this.marshallingHelper.getObject();
+ ((JPASignalManager) this.session.getSignalManager()).setCommandService(this);
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ });
+ }
+
- public void init() {
-
- }
-
public StatefulSession getSession() {
return this.session;
}
- public <T> T execute(Command<T> command) {
+ public synchronized <T> T execute(Command<T> command) {
+ session.halt();
+
boolean localTransaction = false;
UserTransaction ut = null;
try {
@@ -128,11 +167,11 @@
// If there is no transaction then start one, we will commit within the same Command
ut.begin();
localTransaction = true;
-
- EntityManager localEm = this.emf.createEntityManager(); // no need to call joinTransaction as it will do so if one already exists
- this.env.set( EnvironmentName.ENTITY_MANAGER, localEm );
}
+ EntityManager localEm = this.emf.createEntityManager(); // no need to call joinTransaction as it will do so if one already exists
+ this.env.set( EnvironmentName.ENTITY_MANAGER, localEm );
+
this.em.joinTransaction();
//System.out.println( "1) exec ver : " + this.sessionInfo.getVersion() );
this.sessionInfo.setDirty();
@@ -148,17 +187,11 @@
ut.commit();
}
- EntityManager localEm = this.emf.createEntityManager();
- //System.out.println( "2) version " + localEm.find( SessionInfo.class, sessionInfo.getId() ).getVersion() );
- localEm.close();
-
- //System.out.println( "4) exec ver : " + this.sessionInfo.getVersion() );
- // System.out.println( "exec" + this.sessionInfo.getVersion() );
-
return result;
} catch ( Throwable t1 ) {
- if ( localTransaction ) {
+ t1.printStackTrace();
+ if ( localTransaction ) {
try {
if ( ut != null ) {
ut.rollback();
@@ -173,6 +206,12 @@
throw new RuntimeException( "Could not execute command",
t1 );
}
+ } finally {
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ });
}
}
@@ -182,7 +221,7 @@
}
}
- public long getSessionId() {
+ public int getSessionId() {
return sessionInfo.getId();
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/jpa/JPAPersisterTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/jpa/JPAPersisterTest.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/jpa/JPAPersisterTest.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -9,7 +9,7 @@
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
import org.drools.WorkingMemory;
-import org.drools.persistence.session.JPASessionMashallingHelper;
+import org.drools.persistence.session.JPASessionMarshallingHelper;
import org.drools.process.core.Work;
import org.drools.process.core.impl.WorkImpl;
import org.drools.rule.Package;
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -3,14 +3,16 @@
import java.util.Collection;
import java.util.Properties;
+import javax.naming.InitialContext;
+import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
+import javax.transaction.UserTransaction;
import junit.framework.TestCase;
import org.drools.KnowledgeBaseFactory;
import org.drools.RuleBase;
-import org.drools.RuleBaseConfiguration;
import org.drools.RuleBaseFactory;
import org.drools.SessionConfiguration;
import org.drools.compiler.PackageBuilder;
@@ -26,7 +28,6 @@
import org.drools.ruleflow.instance.RuleFlowProcessInstance;
import org.drools.runtime.Environment;
import org.drools.runtime.EnvironmentName;
-import org.drools.runtime.KnowledgeSessionConfiguration;
import org.drools.runtime.process.NodeInstance;
import org.drools.runtime.process.ProcessInstance;
import org.drools.runtime.process.WorkItem;
@@ -72,7 +73,7 @@
}
- public void testPersistenceWorkItems() {
+ public void testPersistenceWorkItems() throws Exception {
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
emf );
@@ -91,7 +92,9 @@
SessionConfiguration config = new SessionConfiguration(properties);
SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
- StartProcessCommand startProcessCommand = new StartProcessCommand();
+ int sessionId = service.getSessionId();
+
+ StartProcessCommand startProcessCommand = new StartProcessCommand();
startProcessCommand.setProcessId("org.drools.test.TestProcess");
ProcessInstance processInstance = (ProcessInstance) service.execute(startProcessCommand);
System.out.println("Started process instance " + processInstance.getId());
@@ -99,56 +102,168 @@
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
assertNotNull(workItem);
+ service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env);
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
+ service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env);
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
completeWorkItemCommand.setWorkItemId(workItem.getId());
service.execute(completeWorkItemCommand);
workItem = handler.getWorkItem();
assertNotNull(workItem);
+ service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env);
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
+ service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env);
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
completeWorkItemCommand = new CompleteWorkItemCommand();
completeWorkItemCommand.setWorkItemId(workItem.getId());
service.execute(completeWorkItemCommand);
workItem = handler.getWorkItem();
assertNotNull(workItem);
+ service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env);
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
+ service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env);
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
completeWorkItemCommand = new CompleteWorkItemCommand();
completeWorkItemCommand.setWorkItemId(workItem.getId());
service.execute(completeWorkItemCommand);
workItem = handler.getWorkItem();
assertNull(workItem);
+ service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env);
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNull(processInstance);
+ service.dispose();
}
+
+ public void testPersistenceWorkItemsUserTransaction() throws Exception {
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+ env.set( "drools.TransactionManager",
+ TransactionManagerServices.getTransactionManager() );
+
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ Package pkg = getProcessWorkItems();
+ ruleBase.addPackage(pkg);
+ Properties properties = new Properties();
+ properties.setProperty("drools.commandService", "org.drools.persistence.session.SingleSessionCommandService");
+ properties.setProperty("drools.processInstanceManagerFactory", "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory");
+ properties.setProperty("drools.workItemManagerFactory", "org.drools.persistence.processinstance.JPAWorkItemManagerFactory");
+ properties.setProperty("drools.processSignalManagerFactory", "org.drools.persistence.processinstance.JPASignalManagerFactory");
+ SessionConfiguration config = new SessionConfiguration(properties);
+
+ SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
+ int sessionId = service.getSessionId();
+
+ UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ StartProcessCommand startProcessCommand = new StartProcessCommand();
+ startProcessCommand.setProcessId("org.drools.test.TestProcess");
+ ProcessInstance processInstance = (ProcessInstance) service.execute(startProcessCommand);
+ System.out.println("Started process instance " + processInstance.getId());
+ ut.commit();
+
+ TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+ WorkItem workItem = handler.getWorkItem();
+ assertNotNull(workItem);
+ service.dispose();
+
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+ ut.begin();
+ GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
+ getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
+ processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+ assertNotNull(processInstance);
+ ut.commit();
+ service.dispose();
+
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+ ut.begin();
+ CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
+ completeWorkItemCommand.setWorkItemId(workItem.getId());
+ service.execute(completeWorkItemCommand);
+ ut.commit();
+
+ workItem = handler.getWorkItem();
+ assertNotNull(workItem);
+ service.dispose();
+
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+ ut.begin();
+ getProcessInstanceCommand = new GetProcessInstanceCommand();
+ getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
+ processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+ ut.commit();
+ assertNotNull(processInstance);
+ service.dispose();
+
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+ ut.begin();
+ completeWorkItemCommand = new CompleteWorkItemCommand();
+ completeWorkItemCommand.setWorkItemId(workItem.getId());
+ service.execute(completeWorkItemCommand);
+ ut.commit();
+
+ workItem = handler.getWorkItem();
+ assertNotNull(workItem);
+ service.dispose();
+
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+ ut.begin();
+ getProcessInstanceCommand = new GetProcessInstanceCommand();
+ getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
+ processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+ ut.commit();
+ assertNotNull(processInstance);
+ service.dispose();
+
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+ ut.begin();
+ completeWorkItemCommand = new CompleteWorkItemCommand();
+ completeWorkItemCommand.setWorkItemId(workItem.getId());
+ service.execute(completeWorkItemCommand);
+ ut.commit();
+
+ workItem = handler.getWorkItem();
+ assertNull(workItem);
+ service.dispose();
+
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+ ut.begin();
+ getProcessInstanceCommand = new GetProcessInstanceCommand();
+ getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
+ processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+ ut.commit();
+ assertNull(processInstance);
+ service.dispose();
+ }
+
private Package getProcessWorkItems() {
RuleFlowProcess process = new RuleFlowProcess();
process.setId("org.drools.test.TestProcess");
@@ -231,6 +346,7 @@
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
assertNotNull(workItem);
+ service.dispose();
service = new SingleSessionCommandService(ruleBase, config, env);
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
@@ -246,11 +362,13 @@
getProcessInstanceCommand.setProcessInstanceId(subProcessInstanceId);
RuleFlowProcessInstance subProcessInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(subProcessInstance);
+ service.dispose();
service = new SingleSessionCommandService(ruleBase, config, env);
CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
completeWorkItemCommand.setWorkItemId(workItem.getId());
service.execute(completeWorkItemCommand);
+ service.dispose();
service = new SingleSessionCommandService(ruleBase, config, env);
getProcessInstanceCommand = new GetProcessInstanceCommand();
@@ -262,6 +380,7 @@
getProcessInstanceCommand.setProcessInstanceId(processInstanceId);
processInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
assertNull(processInstance);
+ service.dispose();
}
private Package getProcessSubProcess() {
@@ -333,7 +452,7 @@
return packageBuilder.getPackage();
}
- public void FIXMEtestPersistenceTimer() throws Exception {
+ public void testPersistenceTimer() throws Exception {
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
emf );
@@ -352,19 +471,22 @@
ruleBase.addPackage(pkg);
SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
+ int sessionId = service.getSessionId();
StartProcessCommand startProcessCommand = new StartProcessCommand();
startProcessCommand.setProcessId("org.drools.test.TestProcess");
ProcessInstance processInstance = (ProcessInstance) service.execute(startProcessCommand);
System.out.println("Started process instance " + processInstance.getId());
+ service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env);
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
+ service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env);
- Thread.sleep(2000);
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+ Thread.sleep(3000);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
@@ -384,7 +506,7 @@
timerNode.setId(2);
timerNode.setName("Timer");
Timer timer = new Timer();
- timer.setDelay(1000);
+ timer.setDelay(2000);
timerNode.setTimer(timer);
process.addNode(timerNode);
new ConnectionImpl(start, Node.CONNECTION_DEFAULT_TYPE, timerNode, Node.CONNECTION_DEFAULT_TYPE);
@@ -409,8 +531,7 @@
return packageBuilder.getPackage();
}
- // @FIXME krisv this fails due to nested transactions
- public void FIXMEtestPersistenceTimer2() throws Exception {
+ public void testPersistenceTimer2() throws Exception {
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
emf );
@@ -429,22 +550,18 @@
ruleBase.addPackage(pkg);
SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
+ int sessionId = service.getSessionId();
StartProcessCommand startProcessCommand = new StartProcessCommand();
startProcessCommand.setProcessId("org.drools.test.TestProcess");
ProcessInstance processInstance = (ProcessInstance) service.execute(startProcessCommand);
System.out.println("Started process instance " + processInstance.getId());
- service = new SingleSessionCommandService(ruleBase, config, env);
+ Thread.sleep(2000);
+
+ service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
- assertNotNull(processInstance);
-
- service = new SingleSessionCommandService(ruleBase, config, env);
- Thread.sleep(2000);
- getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNull(processInstance);
}
Modified: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/EmailWorkItemHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/EmailWorkItemHandler.java 2009-02-19 01:22:57 UTC (rev 25329)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/EmailWorkItemHandler.java 2009-02-19 02:05:36 UTC (rev 25330)
@@ -31,6 +31,10 @@
connection.setPassword(password);
}
+ public Connection getConnection() {
+ return connection;
+ }
+
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
if (connection == null) {
throw new IllegalArgumentException(
Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/resources/icons/email.gif
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/resources/icons/email.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
More information about the jboss-svn-commits
mailing list