[jboss-svn-commits] JBL Code SVN: r25261 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/testframework and 24 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Feb 13 23:52:53 EST 2009
Author: mark.proctor at jboss.com
Date: 2009-02-13 23:52:53 -0500 (Fri, 13 Feb 2009)
New Revision: 25261
Added:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SetGlobalCommand.java
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/SessionInfo.java
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/ByteArraySnapshotter.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/DroolsXid.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Persister.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Transaction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/TransactionInterceptor.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/persistence/memory/
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/transaction/
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/jpa/
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPAPersisterManager.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/PersistenceConfig.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
labs/jbossrules/trunk/drools-core/.classpath
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SessionConfiguration.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.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/MarshallingConfigurationImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
labs/jbossrules/trunk/drools-decisiontables/.classpath
labs/jbossrules/trunk/drools-jsr94/.classpath
labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetImpl.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/.classpath
labs/jbossrules/trunk/drools-process/drools-process-enterprise/pom.xml
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.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/processinstance/JPAWorkItemManager.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/WorkItemInfo.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/main/resources/META-INF/persistence.xml
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/resources/jndi.properties
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/PersistentStatefulSessionTest.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
labs/jbossrules/trunk/drools-templates/.classpath
labs/jbossrules/trunk/drools-templates/src/test/java/org/drools/template/parser/ExternalSheetListenerTest.java
Log:
JBRULES-1971 JPA Cleanups and Corrections
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -0,0 +1,7 @@
+package org.drools.runtime;
+
+public class EnvironmentName {
+ public static final String ENTITY_MANAGER_FACTORY = "drools.emf";
+ public static final String ENTITY_MANAGER = "drools.em";
+ public static final String PLACEHOLDER_RESOLVER_STRATEGY_FACTORY = "drools.placeholderResolverStrategyFactory";
+}
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-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -43,6 +43,7 @@
import org.drools.reteoo.PartitionTaskManager;
import org.drools.rule.Rule;
import org.drools.rule.TimeMachine;
+import org.drools.runtime.Environment;
import org.drools.runtime.ExitPoint;
import org.drools.runtime.KnowledgeRuntime;
import org.drools.spi.Activation;
@@ -508,4 +509,9 @@
return null;
}
+ public Environment getEnvironment() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-core/.classpath 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/.classpath 2009-02-14 04:52:53 UTC (rev 25261)
@@ -13,7 +13,7 @@
<classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
<classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.6/mvel2-2.0.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
<classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
<classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar"/>
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SessionConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SessionConfiguration.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SessionConfiguration.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -28,6 +28,7 @@
import org.drools.process.instance.ProcessInstanceManagerFactory;
import org.drools.process.instance.WorkItemManagerFactory;
import org.drools.process.instance.event.SignalManagerFactory;
+import org.drools.runtime.Environment;
import org.drools.runtime.KnowledgeSessionConfiguration;
import org.drools.runtime.process.WorkItemHandler;
import org.drools.util.ChainedProperties;
@@ -339,15 +340,15 @@
}
}
- public CommandService getCommandService(RuleBase ruleBase) {
+ public CommandService getCommandService(RuleBase ruleBase, Environment environment) {
if ( this.commandService == null ) {
- initCommandService(ruleBase);
+ initCommandService(ruleBase, environment);
}
return this.commandService;
}
@SuppressWarnings("unchecked")
- private void initCommandService(RuleBase ruleBase) {
+ private void initCommandService(RuleBase ruleBase, Environment environment) {
String className = this.chainedProperties.getProperty( "drools.commandService", null );
if (className == null) {
return;
@@ -368,7 +369,7 @@
if ( clazz != null ) {
try {
- this.commandService = clazz.getConstructor(RuleBase.class, SessionConfiguration.class).newInstance(ruleBase, this);
+ this.commandService = clazz.getConstructor(RuleBase.class, SessionConfiguration.class, Environment.class).newInstance(ruleBase, this, environment);
} catch ( Exception e ) {
throw new IllegalArgumentException( "Unable to instantiate command service '" + className + "'",
e );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -24,6 +24,7 @@
import org.drools.process.instance.WorkItemManager;
import org.drools.process.instance.event.SignalManager;
import org.drools.process.instance.timer.TimerManager;
+import org.drools.runtime.Environment;
import org.drools.spi.AgendaFilter;
import org.drools.spi.AsyncExceptionHandler;
import org.drools.spi.GlobalResolver;
@@ -66,6 +67,7 @@
*/
Object getGlobal(String identifier);
+ Environment getEnvironment();
/**
* Sets the GlobalResolver instance to be used when resolving globals, replaces the current GlobalResolver.
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-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -534,6 +534,10 @@
this.lock.unlock();
}
}
+
+ public Environment getEnvironment() {
+ return this.environment;
+ }
public Agenda getAgenda() {
return this.agenda;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -144,7 +144,7 @@
environment = EnvironmentFactory.newEnvironment();
}
- CommandService commandService = ((SessionConfiguration) conf).getCommandService(this.ruleBase);
+ CommandService commandService = ((SessionConfiguration) conf).getCommandService(this.ruleBase, environment);
if (commandService != null) {
return new CommandBasedStatefulKnowledgeSession(commandService);
} else {
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-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -26,7 +26,7 @@
public DefaultMarshaller(RuleBaseConfiguration config) {
this( config,
- null );
+ new MarshallingConfigurationImpl() );
}
public DefaultMarshaller(RuleBaseConfiguration ruleBaseConfig,
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-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -130,11 +130,17 @@
readTruthMaintenanceSystem( context );
}
- readProcessInstances( context );
+ if ( context.marshalProcessInstances ) {
+ readProcessInstances( context );
+ }
- readWorkItems( context );
+ if ( context.marshalWorkItems ) {
+ readWorkItems( context );
+ }
- readTimers( context );
+ if ( context.marshalTimers ) {
+ readTimers( context );
+ }
if( multithread ) {
session.startPartitionManagers();
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-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,23 +1,28 @@
package org.drools.marshalling;
-public class MarshallingConfigurationImpl implements MarshallingConfiguration {
+public class MarshallingConfigurationImpl
+ implements
+ MarshallingConfiguration {
private PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory;
- private boolean marshallProcessInstances;
- private boolean marshallWorkItems;
- private boolean marshallTimers;
-
+ 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) {
+ this.placeholderResolverStrategyFactory = placeholderResolverStrategyFactory;
this.marshallProcessInstances = marshallProcessInstances;
this.marshallWorkItems = marshallWorkItems;
this.marshallTimers = marshallTimers;
- this.placeholderResolverStrategyFactory = placeholderResolverStrategyFactory;
}
public boolean isMarshallProcessInstances() {
@@ -51,5 +56,5 @@
public void setPlaceholderResolverStrategyFactory(PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory) {
this.placeholderResolverStrategyFactory = placeholderResolverStrategyFactory;
}
-
-}
+
+}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/ByteArraySnapshotter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/ByteArraySnapshotter.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/ByteArraySnapshotter.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,14 +0,0 @@
-/**
- *
- */
-package org.drools.persistence;
-
-public interface ByteArraySnapshotter<T> {
-
- byte[] getSnapshot();
-
- void loadSnapshot(byte[] bytes);
-
- T getObject();
-
-}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/DroolsXid.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/DroolsXid.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/DroolsXid.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,62 +0,0 @@
-package org.drools.persistence;
-
-import javax.transaction.xa.Xid;
-
-public class DroolsXid
- implements
- Xid {
- protected int formatId;
- protected byte gtrid[];
- protected byte bqual[];
-
- public DroolsXid() {
- }
-
- public DroolsXid(int formatId,
- byte gtrid[],
- byte bqual[]) {
- this.formatId = formatId;
- this.gtrid = gtrid;
- this.bqual = bqual;
- }
-
- public int getFormatId() {
- return formatId;
- }
-
- public byte[] getBranchQualifier() {
- return bqual;
- }
-
- public byte[] getGlobalTransactionId() {
- return gtrid;
- }
-
- public String toString() {
- int hexVal;
- StringBuffer sb = new StringBuffer( 512 );
- sb.append( "formatId=" + formatId );
- sb.append( " gtrid(" + gtrid.length + ")={0x" );
- for ( int i = 0; i < gtrid.length; i++ ) {
- hexVal = gtrid[i] & 0xFF;
- if ( hexVal < 0x10 ) {
- sb.append( "0" + Integer.toHexString( gtrid[i] & 0xFF ) );
- } else {
- sb.append( Integer.toHexString( gtrid[i] & 0xFF ) );
- }
- }
-
- sb.append( "} bqual(" + bqual.length + ")={0x" );
- for ( int i = 0; i < bqual.length; i++ ) {
- hexVal = bqual[i] & 0xFF;
- if ( hexVal < 0x10 ) {
- sb.append( "0" + Integer.toHexString( bqual[i] & 0xFF ) );
- } else {
- sb.append( Integer.toHexString( bqual[i] & 0xFF ) );
- }
- }
-
- sb.append( "}" );
- return sb.toString();
- }
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Persister.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Persister.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Persister.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,21 +0,0 @@
-package org.drools.persistence;
-
-import javax.transaction.xa.XAResource;
-
-public interface Persister<T> {
-
- XAResource getXAResource();
-
- Transaction getTransaction();
-
- void save();
-
- void load();
-
- String getUniqueId();
-
- void setUniqueId(String id);
-
- T getObject();
-
-}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Transaction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Transaction.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/Transaction.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,51 +0,0 @@
-package org.drools.persistence;
-
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-
-public class Transaction {
- private Xid xid;
-
- XAResource xaResource;
-
- public Transaction(Xid xid,
- XAResource xaResource) {
- this.xid = xid;
- this.xaResource = xaResource;
- }
-
- public Xid getXid() {
- return xid;
- }
-
- public void start() throws XAException {
- this.xaResource.start( xid,
- XAResource.TMNOFLAGS );
- }
-
- public void rollback() throws XAException {
- this.xaResource.rollback( xid );
- }
-
- public void commit() throws XAException {
- this.xaResource.commit( xid,
- true );
- }
-
- public int hashCode() {
- return xid.hashCode();
- }
-
- public boolean equals(Object obj) {
- if ( this == obj ) return true;
- if ( obj == null ) return false;
- if ( getClass() != obj.getClass() ) return false;
- Transaction other = (Transaction) obj;
- if ( xid == null ) {
- if ( other.xid != null ) return false;
- } else if ( !xid.equals( other.xid ) ) return false;
- return true;
- }
-
-}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -0,0 +1,20 @@
+package org.drools.process.command;
+
+import org.drools.StatefulSession;
+
+public class FireAllRulesCommand
+ implements
+ Command<Integer> {
+
+ public FireAllRulesCommand() {
+ }
+
+ public Integer execute(StatefulSession session) {
+ return session.fireAllRules();
+ }
+
+ public String toString() {
+ return "session.fireAllRules();";
+ }
+
+}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SetGlobalCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SetGlobalCommand.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SetGlobalCommand.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -0,0 +1,28 @@
+package org.drools.process.command;
+
+import org.drools.StatefulSession;
+
+public class SetGlobalCommand
+ implements
+ Command<Void> {
+
+ private String identifier;
+ private Object object;
+
+ public SetGlobalCommand(String identifier,
+ Object object) {
+ this.identifier = identifier;
+ this.object = object;
+ }
+
+ public Void execute(StatefulSession session) {
+ session.setGlobal( identifier,
+ object );
+ return null;
+ }
+
+ public String toString() {
+ return "session.setGlobal(" + identifier + ", " + object + ");";
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -12,10 +12,12 @@
import org.drools.process.command.AbortWorkItemCommand;
import org.drools.process.command.CommandService;
import org.drools.process.command.CompleteWorkItemCommand;
+import org.drools.process.command.FireAllRulesCommand;
import org.drools.process.command.GetObjectsCommand;
import org.drools.process.command.GetProcessInstanceCommand;
import org.drools.process.command.InsertObjectCommand;
import org.drools.process.command.RegisterWorkItemHandlerCommand;
+import org.drools.process.command.SetGlobalCommand;
import org.drools.process.command.SignalEventCommand;
import org.drools.process.command.StartProcessCommand;
import org.drools.runtime.Environment;
@@ -103,8 +105,8 @@
commandService.dispose();
}
- public int fireAllRules() {
- throw new UnsupportedOperationException();
+ public int fireAllRules() {
+ return this.commandService.execute( new FireAllRulesCommand() );
}
public int fireAllRules(int max) {
@@ -132,7 +134,7 @@
}
public void setGlobal(String identifier, Object object) {
- throw new UnsupportedOperationException();
+ this.commandService.execute( new SetGlobalCommand(identifier, object) );
}
public void setGlobalResolver(GlobalResolver globalResolver) {
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/TransactionInterceptor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/TransactionInterceptor.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/TransactionInterceptor.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,34 +0,0 @@
-package org.drools.process.command.impl;
-
-import javax.transaction.xa.XAException;
-
-import org.drools.StatefulSession;
-import org.drools.persistence.Persister;
-import org.drools.persistence.Transaction;
-import org.drools.persistence.memory.MemoryPersister;
-import org.drools.persistence.session.StatefulSessionSnapshotter;
-import org.drools.process.command.Command;
-
-public class TransactionInterceptor extends AbstractInterceptor {
-
- public <T> T execute(Command<T> command) {
- Persister<StatefulSession> persister =
- new MemoryPersister<StatefulSession>(new StatefulSessionSnapshotter(getSession()));
- persister.save();
- Transaction transaction = persister.getTransaction();
- try {
- transaction.start();
- T result = super.executeNext(command);
- transaction.commit();
- return result;
- } catch (Throwable t) {
- try {
- transaction.rollback();
- throw new RuntimeException("Could not execute command", t);
- } catch (XAException e) {
- throw new RuntimeException("Could not rollback transaction", e);
- }
- }
- }
-
-}
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-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -243,8 +243,11 @@
return newStatefulSession( config, EnvironmentFactory.newEnvironment() );
}
+ public synchronized StatefulSession newStatefulSession(final SessionConfiguration sessionConfig, final Environment environment) {
+ return newStatefulSession( nextWorkingMemoryCounter(), sessionConfig, environment );
+ }
- public synchronized StatefulSession newStatefulSession(final SessionConfiguration sessionConfig, final Environment environment) {
+ public synchronized StatefulSession newStatefulSession(int id, final SessionConfiguration sessionConfig, final Environment environment) {
if ( this.config.isSequential() ) {
throw new RuntimeException( "Cannot have a stateful rule session, with sequential configuration set to true" );
}
@@ -252,7 +255,7 @@
synchronized ( this.pkgs ) {
ExecutorService executor = ExecutorServiceFactory.createExecutorService( this.config.getExecutorService() );;
- session = new ReteooStatefulSession( nextWorkingMemoryCounter(),
+ session = new ReteooStatefulSession( id,
this,
executor,
sessionConfig,
Modified: labs/jbossrules/trunk/drools-decisiontables/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-decisiontables/.classpath 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-decisiontables/.classpath 2009-02-14 04:52:53 UTC (rev 25261)
@@ -20,6 +20,6 @@
<classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
<classpathentry kind="var" path="M2_REPO/jexcelapi/jxl/2.4.2/jxl-2.4.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.6/mvel2-2.0.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
<classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-jsr94/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-jsr94/.classpath 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-jsr94/.classpath 2009-02-14 04:52:53 UTC (rev 25261)
@@ -24,6 +24,6 @@
<classpathentry kind="var" path="M2_REPO/jsr94/jsr94-tck/1.0.3/jsr94-tck-1.0.3.jar"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
<classpathentry kind="var" path="M2_REPO/jexcelapi/jxl/2.4.2/jxl-2.4.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.6/mvel2-2.0.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
<classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetImpl.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetImpl.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -170,7 +170,7 @@
* @return A new WorkingMemory object.
*/
public StatefulSession newStatefulSession(SessionConfiguration conf) {
- return this.ruleBase.newStatefulSession(conf);
+ return this.ruleBase.newStatefulSession(conf, null);
}
/**
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/.classpath 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/.classpath 2009-02-14 04:52:53 UTC (rev 25261)
@@ -7,6 +7,7 @@
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
<classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/btm/btm/1.3.2/btm-1.3.2.jar"/>
<classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
<classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2.jar"/>
<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
@@ -15,6 +16,8 @@
<classpathentry kind="src" path="/drools-compiler"/>
<classpathentry kind="src" path="/drools-core"/>
<classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.0.1/geronimo-jms_1.1_spec-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jta_1.0.1B_spec/1.0.1/geronimo-jta_1.0.1B_spec-1.0.1.jar"/>
<classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.77/h2-1.0.77.jar"/>
<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
@@ -29,7 +32,7 @@
<classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.6/mvel2-2.0.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
<classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.5.2/slf4j-api-1.5.2.jar"/>
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/pom.xml 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/pom.xml 2009-02-14 04:52:53 UTC (rev 25261)
@@ -101,6 +101,13 @@
<artifactId>jta</artifactId>
<version>1.0.1B</version>
</dependency>
+
+ <dependency>
+ <groupId>org.codehaus.btm</groupId>
+ <artifactId>btm</artifactId>
+ <version>1.3.2</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -12,58 +12,60 @@
import org.drools.process.instance.ProcessInstance;
import org.drools.process.instance.ProcessInstanceManager;
import org.drools.process.instance.impl.ProcessInstanceImpl;
+import org.drools.runtime.EnvironmentName;
-public class JPAProcessInstanceManager implements ProcessInstanceManager {
+public class JPAProcessInstanceManager
+ implements
+ ProcessInstanceManager {
- private EntityManager manager;
private WorkingMemory workingMemory;
-
- public void setEntityManager(EntityManager manager) {
- this.manager = manager;
- }
-
+
public void setWorkingMemory(WorkingMemory workingMemory) {
this.workingMemory = workingMemory;
}
-
+
public void addProcessInstance(ProcessInstance processInstance) {
- ProcessInstanceInfo processInstanceInfo = new ProcessInstanceInfo(processInstance);
- manager.persist(processInstanceInfo);
- ((ProcessInstance) processInstance).setId(processInstanceInfo.getId());
+ ProcessInstanceInfo processInstanceInfo = new ProcessInstanceInfo( processInstance );
+ EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
+ em.persist( processInstanceInfo );
+ ((ProcessInstance) processInstance).setId( processInstanceInfo.getId() );
processInstanceInfo.updateLastReadDate();
}
-
+
public void internalAddProcessInstance(ProcessInstance processInstance) {
}
public ProcessInstance getProcessInstance(long id) {
- ProcessInstanceInfo processInstanceInfo = manager.find(ProcessInstanceInfo.class, id);
- if (processInstanceInfo == null) {
+ EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
+ ProcessInstanceInfo processInstanceInfo = em.find( ProcessInstanceInfo.class,
+ id );
+ if ( processInstanceInfo == null ) {
return null;
}
processInstanceInfo.updateLastReadDate();
ProcessInstance processInstance = (ProcessInstance) processInstanceInfo.getProcessInstance();
- Process process = ((InternalRuleBase) workingMemory.getRuleBase()).getProcess(processInstance.getProcessId());
- if (process == null) {
- throw new IllegalArgumentException(
- "Could not find process " + processInstance.getProcessId());
+ Process process = ((InternalRuleBase) workingMemory.getRuleBase()).getProcess( processInstance.getProcessId() );
+ if ( process == null ) {
+ throw new IllegalArgumentException( "Could not find process " + processInstance.getProcessId() );
}
- processInstance.setProcess(process);
- if (processInstance.getWorkingMemory() == null) {
- processInstance.setWorkingMemory((InternalWorkingMemory) workingMemory);
+ processInstance.setProcess( process );
+ if ( processInstance.getWorkingMemory() == null ) {
+ processInstance.setWorkingMemory( (InternalWorkingMemory) workingMemory );
((ProcessInstanceImpl) processInstance).reconnect();
}
return processInstance;
}
- public Collection<ProcessInstance> getProcessInstances() {
+ public Collection<ProcessInstance> getProcessInstances() {
return new ArrayList<ProcessInstance>();
}
public void removeProcessInstance(ProcessInstance processInstance) {
- ProcessInstanceInfo processInstanceInfo = manager.find(ProcessInstanceInfo.class, processInstance.getId());
- if (processInstanceInfo != null) {
- manager.remove(processInstanceInfo);
+ EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
+ ProcessInstanceInfo processInstanceInfo = em.find( ProcessInstanceInfo.class,
+ processInstance.getId() );
+ if ( processInstanceInfo != null ) {
+ em.remove( processInstanceInfo );
}
}
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-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -4,63 +4,57 @@
import javax.persistence.EntityManager;
import javax.persistence.Query;
-import javax.transaction.xa.XAException;
-import org.drools.StatefulSession;
import org.drools.WorkingMemory;
-import org.drools.persistence.Persister;
-import org.drools.persistence.Transaction;
import org.drools.process.instance.event.DefaultSignalManager;
+import org.drools.runtime.EnvironmentName;
import org.drools.runtime.process.ProcessInstance;
public class JPASignalManager extends DefaultSignalManager {
- private EntityManager manager;
- private Persister<StatefulSession> persister;
private WorkingMemory workingMemory;
-
+
public JPASignalManager(WorkingMemory workingMemory) {
- this.workingMemory = workingMemory;
+ this.workingMemory = workingMemory;
}
- public void setEntityManager(EntityManager manager) {
- this.manager = manager;
+ public void signalEvent(String type,
+ Object event) {
+ for ( long id : getProcessInstancesForEvent( type ) ) {
+ workingMemory.getProcessInstance( id );
+ }
+ super.signalEvent( type,
+ event );
}
-
- public void setPersister(Persister<StatefulSession> persister) {
- this.persister = persister;
+
+ public void signalEvent(ProcessInstance processInstance,
+ 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);
+ // }
+ // }
}
-
- public void signalEvent(String type, Object event) {
- for (long id: getProcessInstancesForEvent(type)) {
- workingMemory.getProcessInstance(id);
- }
- super.signalEvent(type, event);
- }
-
- public void signalEvent(ProcessInstance processInstance, 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);
- }
- }
- }
-
+
@SuppressWarnings("unchecked")
- private List<Long> getProcessInstancesForEvent(String type) {
- Query processInstancesForEvent = manager.createNamedQuery("ProcessInstancesWaitingForEvent");
- processInstancesForEvent.setParameter("type", type);
- List<Long> list = (List<Long>) processInstancesForEvent.getResultList();
- return list;
+ private List<Long> getProcessInstancesForEvent(String type) {
+ EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
+
+ Query processInstancesForEvent = em.createNamedQuery( "ProcessInstancesWaitingForEvent" );
+ processInstancesForEvent.setParameter( "type",
+ type );
+ List<Long> list = (List<Long>) processInstancesForEvent.getResultList();
+ return list;
}
-
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAWorkItemManager.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAWorkItemManager.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAWorkItemManager.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -12,11 +12,11 @@
import org.drools.process.instance.WorkItem;
import org.drools.process.instance.WorkItemManager;
import org.drools.process.instance.impl.WorkItemImpl;
+import org.drools.runtime.EnvironmentName;
import org.drools.runtime.process.WorkItemHandler;
public class JPAWorkItemManager implements WorkItemManager {
- private EntityManager manager;
private WorkingMemory workingMemory;
private Map<String, WorkItemHandler> workItemHandlers = new HashMap<String, WorkItemHandler>();
@@ -24,13 +24,12 @@
this.workingMemory = workingMemory;
}
- public void setEntityManager(EntityManager manager) {
- this.manager = manager;
- }
public void internalExecuteWorkItem(WorkItem workItem) {
+ EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
+
WorkItemInfo workItemInfo = new WorkItemInfo(workItem);
- manager.persist(workItemInfo);
+ em.persist(workItemInfo);
((WorkItemImpl) workItem).setId(workItemInfo.getId());
workItemInfo.update();
WorkItemHandler handler = (WorkItemHandler) this.workItemHandlers.get(workItem.getName());
@@ -42,7 +41,9 @@
}
public void internalAbortWorkItem(long id) {
- WorkItemInfo workItemInfo = manager.find(WorkItemInfo.class, id);
+ EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
+
+ WorkItemInfo workItemInfo = em.find(WorkItemInfo.class, id);
// work item may have been aborted
if (workItemInfo != null) {
WorkItemImpl workItem = (WorkItemImpl) workItemInfo.getWorkItem();
@@ -52,7 +53,7 @@
} else {
System.err.println("Could not find work item handler for " + workItem.getName());
}
- manager.remove(workItemInfo);
+ em.remove(workItemInfo);
}
}
@@ -60,7 +61,9 @@
}
public void completeWorkItem(long id, Map<String, Object> results) {
- WorkItemInfo workItemInfo = manager.find(WorkItemInfo.class, id);
+ EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
+
+ WorkItemInfo workItemInfo = em.find(WorkItemInfo.class, id);
// work item may have been aborted
if (workItemInfo != null) {
WorkItemImpl workItem = (WorkItemImpl) workItemInfo.getWorkItem();
@@ -71,13 +74,15 @@
if (processInstance != null) {
processInstance.signalEvent("workItemCompleted", workItem);
}
- manager.remove(workItemInfo);
+ em.remove(workItemInfo);
workingMemory.fireAllRules();
}
}
public void abortWorkItem(long id) {
- WorkItemInfo workItemInfo = manager.find(WorkItemInfo.class, id);
+ EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
+
+ WorkItemInfo workItemInfo = em.find(WorkItemInfo.class, id);
// work item may have been aborted
if (workItemInfo != null) {
WorkItemImpl workItem = (WorkItemImpl) workItemInfo.getWorkItem();
@@ -87,13 +92,15 @@
if (processInstance != null) {
processInstance.signalEvent("workItemAborted", workItem);
}
- manager.remove(workItemInfo);
+ em.remove(workItemInfo);
workingMemory.fireAllRules();
}
}
public WorkItem getWorkItem(long id) {
- WorkItemInfo workItemInfo = manager.find(WorkItemInfo.class, id);
+ EntityManager em = (EntityManager) this.workingMemory.getEnvironment().get( EnvironmentName.ENTITY_MANAGER );
+
+ WorkItemInfo workItemInfo = em.find(WorkItemInfo.class, id);
if (workItemInfo == null) {
return null;
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,33 +1,51 @@
package org.drools.persistence.processinstance;
+import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
+import javax.persistence.Version;
@Entity
public class ProcessInstanceEventInfo {
- private @Id @GeneratedValue(strategy=GenerationType.AUTO) Long id;
- private String eventType;
- private long processInstanceId;
-
- ProcessInstanceEventInfo() {
- }
-
- public ProcessInstanceEventInfo(long processInstanceId, String eventType) {
- this.processInstanceId = processInstanceId;
- this.eventType = eventType;
- }
-
- public long getProcessInstanceId() {
- return processInstanceId;
- }
-
- public String getEventType() {
- return eventType;
- }
-
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long id;
+
+ @Version
+ @Column(name = "OPTLOCK")
+ private int version;
+
+ private String eventType;
+ private long processInstanceId;
+
+ ProcessInstanceEventInfo() {
+ }
+
+ public long getId() {
+ return this.id;
+ }
+
+ public int getVersion() {
+ return this.version;
+ }
+
+ public ProcessInstanceEventInfo(long processInstanceId,
+ String eventType) {
+ this.processInstanceId = processInstanceId;
+ this.eventType = eventType;
+ }
+
+ public long getProcessInstanceId() {
+ return processInstanceId;
+ }
+
+ public String getEventType() {
+ return eventType;
+ }
+
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -10,50 +10,52 @@
import java.util.HashSet;
import java.util.Set;
+import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
-import javax.persistence.PostLoad;
-import javax.persistence.PostPersist;
-import javax.persistence.PostUpdate;
-import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Transient;
+import javax.persistence.Version;
import org.drools.marshalling.MarshallerReaderContext;
import org.drools.marshalling.MarshallerWriteContext;
import org.drools.marshalling.ProcessInstanceMarshaller;
import org.drools.marshalling.ProcessMarshallerRegistry;
+import org.drools.marshalling.RuleFlowProcessInstanceMarshaller;
import org.drools.process.instance.impl.ProcessInstanceImpl;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
import org.drools.runtime.process.ProcessInstance;
+import org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl;
import org.hibernate.annotations.CollectionOfElements;
@Entity
public class ProcessInstanceInfo {
- private @Id
+ @Id
@GeneratedValue(strategy = GenerationType.AUTO)
- Long processInstanceId;
- private String processId;
- private Date startDate;
- private Date lastReadDate;
- private Date lastModificationDate;
- private int state;
-
+ private Long processInstanceId;
+
+ @Version
+ @Column(name = "OPTLOCK")
+ private int version;
+
+ private String processId;
+ private Date startDate;
+ private Date lastReadDate;
+ private Date lastModificationDate;
+ private int state;
+ // TODO How do I mark a process instance info as dirty when the process
+ // instance
+ // has changed (so that byte array is regenerated and saved) ?
private @Lob
- byte[] processInstanceByteArray;
-
- private @Transient
- @Lob
- byte[] processInstanceByteArrayShadow;
-
+ byte[] processInstanceByteArray;
@CollectionOfElements
private Set<String> eventTypes = new HashSet<String>();
-
private @Transient
- ProcessInstance processInstance;
+ ProcessInstance processInstance;
ProcessInstanceInfo() {
}
@@ -93,103 +95,68 @@
}
public ProcessInstance getProcessInstance() {
+ if (processInstance == null) {
+ try {
+ ByteArrayInputStream bais = new ByteArrayInputStream(
+ processInstanceByteArray);
+ MarshallerReaderContext context = new MarshallerReaderContext(
+ bais, null, null, null);
+ ProcessInstanceMarshaller marshaller = getMarshallerFromContext(context);
+ processInstance = marshaller.readProcessInstance(context);
+ context.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new IllegalArgumentException(
+ "IOException while loading process instance: "
+ + e.getMessage());
+ }
+ }
return processInstance;
}
- private ProcessInstanceMarshaller getMarshallerFromContext(MarshallerReaderContext context) throws IOException {
+ private ProcessInstanceMarshaller getMarshallerFromContext(
+ MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
String processInstanceType = stream.readUTF();
- return ProcessMarshallerRegistry.INSTANCE.getMarshaller( processInstanceType );
+ return ProcessMarshallerRegistry.INSTANCE
+ .getMarshaller(processInstanceType);
}
private void saveProcessInstanceType(MarshallerWriteContext context,
- ProcessInstance processInstance,
- String processInstanceType) throws IOException {
+ ProcessInstance processInstance, String processInstanceType)
+ throws IOException {
ObjectOutputStream stream = context.stream;
// saves the processInstance type first
- stream.writeUTF( processInstanceType );
+ stream.writeUTF(processInstanceType);
}
- @PostLoad
- public void postLoad() {
- if ( processInstance == null ) {
- try {
- ByteArrayInputStream bais = new ByteArrayInputStream( processInstanceByteArray );
- MarshallerReaderContext context = new MarshallerReaderContext( bais,
- null,
- null,
- null );
- ProcessInstanceMarshaller marshaller = getMarshallerFromContext( context );
- processInstance = marshaller.readProcessInstance( context );
- context.close();
- } catch ( IOException e ) {
- e.printStackTrace();
- throw new IllegalArgumentException( "IOException while loading process instance: " + e.getMessage() );
- }
- }
- // reference it as a shadow field, this can be used to check for changes and do rollbacks without hitting the DB.
- this.processInstanceByteArrayShadow = this.processInstanceByteArray;
- this.processInstanceByteArray = null; // setting this to null will force an update
- }
-
@PreUpdate
- // executes before update
- @PrePersist
- // executes before insert
public void update() {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
- MarshallerWriteContext context = new MarshallerWriteContext( baos,
- null,
- null,
- null,
- null );
- String processType = ((ProcessInstanceImpl) processInstance).getProcess().getType();
- saveProcessInstanceType( context,
- processInstance,
- processType );
- ProcessInstanceMarshaller marshaller = ProcessMarshallerRegistry.INSTANCE.getMarshaller( processType );
- marshaller.writeProcessInstance( context,
- processInstance );
+ MarshallerWriteContext context = new MarshallerWriteContext(baos,
+ null, null, null, null);
+ String processType = ((ProcessInstanceImpl) processInstance).getProcess()
+ .getType();
+ saveProcessInstanceType(context, processInstance, processType);
+ ProcessInstanceMarshaller marshaller = ProcessMarshallerRegistry.INSTANCE.getMarshaller(processType);
+ marshaller.writeProcessInstance(
+ context, processInstance);
context.close();
- } catch ( IOException e ) {
- throw new IllegalArgumentException( "IOException while storing process instance " + processInstance.getId() + ": " + e.getMessage() );
+ } catch (IOException e) {
+ throw new IllegalArgumentException(
+ "IOException while storing process instance "
+ + processInstance.getId() + ": " + e.getMessage());
}
byte[] newByteArray = baos.toByteArray();
- if ( !Arrays.equals( newByteArray,
- processInstanceByteArrayShadow ) ) {
+ if (!Arrays.equals(newByteArray, processInstanceByteArray)) {
this.state = processInstance.getState();
this.lastModificationDate = new Date();
this.processInstanceByteArray = newByteArray;
- this.processInstanceByteArrayShadow = newByteArray;
this.eventTypes.clear();
- for ( String type : processInstance.getEventTypes() ) {
- eventTypes.add( type );
+ for (String type : processInstance.getEventTypes()) {
+ eventTypes.add(type);
}
- } else {
- // there was no change so restore for the perist process
- this.processInstanceByteArray = this.processInstanceByteArrayShadow;
}
}
-
- @PostUpdate
- // executes after update
- @PostPersist
- // executes after insert
- public void postUpdate() {
- // we need to null this to force an update check
- this.processInstanceByteArray = null;
- }
-
- public void rollback() {
- // restore the processInstanceByteArray
- this.processInstanceByteArray = this.processInstanceByteArrayShadow;
-
- //Simulate load which forces rebuilding of the process from the shadow
- postLoad();
- }
-
- public void commit() {
- this.processInstanceByteArrayShadow = processInstanceByteArray;
- }
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/WorkItemInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/WorkItemInfo.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/WorkItemInfo.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -5,6 +5,7 @@
import java.io.IOException;
import java.util.Date;
+import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@@ -12,6 +13,7 @@
import javax.persistence.Lob;
import javax.persistence.PreUpdate;
import javax.persistence.Transient;
+import javax.persistence.Version;
import org.drools.marshalling.InputMarshaller;
import org.drools.marshalling.MarshallerReaderContext;
@@ -22,73 +24,92 @@
@Entity
public class WorkItemInfo {
- private @Id @GeneratedValue(strategy=GenerationType.AUTO) long workItemId;
- private String name;
- private Date creationDate;
- private long processInstanceId;
- private long state;
- private @Lob byte[] workItemByteArray;
- private @Transient WorkItem workItem;
-
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long workItemId;
+
+ @Version
+ @Column(name = "OPTLOCK")
+ private int version;
+
+ private String name;
+ private Date creationDate;
+ private long processInstanceId;
+ private long state;
+ private @Lob
+ byte[] workItemByteArray;
+ private @Transient
+ WorkItem workItem;
+
WorkItemInfo() {
}
-
+
public WorkItemInfo(WorkItem workItem) {
- this.workItem = workItem;
- this.name = workItem.getName();
- this.creationDate = new Date();
- this.processInstanceId = workItem.getProcessInstanceId();
+ this.workItem = workItem;
+ this.name = workItem.getName();
+ this.creationDate = new Date();
+ this.processInstanceId = workItem.getProcessInstanceId();
}
+
+ public long getId() {
+ return workItemId;
+ }
- public long getId() {
- return workItemId;
- }
-
- public String getName() {
- return name;
- }
-
- public Date getCreationDate() {
- return creationDate;
- }
-
- public long getProcessInstanceId() {
- return processInstanceId;
- }
-
- public long getState() {
- return state;
- }
-
- public WorkItem getWorkItem() {
- if (workItem == null) {
- try {
- ByteArrayInputStream bais = new ByteArrayInputStream(workItemByteArray);
- MarshallerReaderContext context = new MarshallerReaderContext(bais, null, null, null);
- workItem = InputMarshaller.readWorkItem(context);
- context.close();
- } catch (IOException e) {
- e.printStackTrace();
- throw new IllegalArgumentException(
- "IOException while loading process instance: " + e.getMessage());
- }
- }
- return workItem;
- }
-
- @PreUpdate
- public void update() {
- this.state = workItem.getState();
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try {
- MarshallerWriteContext context = new MarshallerWriteContext(baos, null, null, null, null);
- OutputMarshaller.writeWorkItem(context, workItem);
- context.close();
- this.workItemByteArray = baos.toByteArray();
- } catch (IOException e) {
- throw new IllegalArgumentException(
- "IOException while storing workItem " + workItem.getId() + ": " + e.getMessage());
- }
- }
-
+ public int getVersion() {
+ return this.version;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Date getCreationDate() {
+ return creationDate;
+ }
+
+ public long getProcessInstanceId() {
+ return processInstanceId;
+ }
+
+ public long getState() {
+ return state;
+ }
+
+ public WorkItem getWorkItem() {
+ if ( workItem == null ) {
+ try {
+ ByteArrayInputStream bais = new ByteArrayInputStream( workItemByteArray );
+ MarshallerReaderContext context = new MarshallerReaderContext( bais,
+ null,
+ null,
+ null );
+ workItem = InputMarshaller.readWorkItem( context );
+ context.close();
+ } catch ( IOException e ) {
+ e.printStackTrace();
+ throw new IllegalArgumentException( "IOException while loading process instance: " + e.getMessage() );
+ }
+ }
+ return workItem;
+ }
+
+ @PreUpdate
+ public void update() {
+ this.state = workItem.getState();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try {
+ MarshallerWriteContext context = new MarshallerWriteContext( baos,
+ null,
+ null,
+ null,
+ null );
+ OutputMarshaller.writeWorkItem( context,
+ workItem );
+ context.close();
+ this.workItemByteArray = baos.toByteArray();
+ } catch ( IOException e ) {
+ throw new IllegalArgumentException( "IOException while storing workItem " + workItem.getId() + ": " + e.getMessage() );
+ }
+ }
+
}
Deleted: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPAPersisterManager.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPAPersisterManager.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPAPersisterManager.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,59 +0,0 @@
-package org.drools.persistence.session;
-
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-
-import org.drools.RuleBase;
-import org.drools.SessionConfiguration;
-import org.drools.StatefulSession;
-import org.drools.marshalling.PlaceholderResolverStrategyFactory;
-import org.drools.persistence.Persister;
-import org.drools.persistence.jpa.JPAPersister;
-
-public class JPAPersisterManager {
-
- private EntityManagerFactory emf;
- private PlaceholderResolverStrategyFactory factory;
-
- public JPAPersisterManager(PlaceholderResolverStrategyFactory factory, EntityManagerFactory emf) {
- if (emf == null) {
- this.emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
- } else {
- this.emf = emf;
- }
- this.factory = factory;
- }
-
- public JPAPersisterManager(PlaceholderResolverStrategyFactory factory) {
- this(factory, null);
- }
-
- public void dispose() {
- emf.close();
- }
-
- public Persister<StatefulSession> getSessionPersister(StatefulSession session) {
- return new JPAPersister<StatefulSession>(emf, new StatefulSessionSnapshotter(session, factory));
- }
-
- public Persister<StatefulSession> getSessionPersister(RuleBase ruleBase) {
- return new JPAPersister<StatefulSession>(emf, new StatefulSessionSnapshotter(ruleBase.newStatefulSession(), factory));
- }
-
- public Persister<StatefulSession> getSessionPersister(RuleBase ruleBase, SessionConfiguration conf) {
- return new JPAPersister<StatefulSession>(emf, new StatefulSessionSnapshotter(ruleBase.newStatefulSession(conf), factory));
- }
-
- public Persister<StatefulSession> getSessionPersister(String uniqueId, RuleBase ruleBase) {
- return getSessionPersister(uniqueId, ruleBase, null);
- }
-
- public Persister<StatefulSession> getSessionPersister(String uniqueId, RuleBase ruleBase, SessionConfiguration conf) {
- Persister<StatefulSession> persister = new JPAPersister<StatefulSession>(
- emf, new StatefulSessionSnapshotter(ruleBase, conf, factory));
- persister.setUniqueId(uniqueId);
- persister.load();
- return persister;
- }
-
-}
Copied: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMashallingHelper.java (from rev 25237, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/StatefulSessionSnapshotter.java)
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMashallingHelper.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMashallingHelper.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -0,0 +1,108 @@
+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;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/PersistenceConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/PersistenceConfig.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/PersistenceConfig.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,38 +0,0 @@
-package org.drools.persistence.session;
-
-import javax.persistence.EntityManagerFactory;
-
-import org.drools.marshalling.PlaceholderResolverStrategyFactory;
-
-public class PersistenceConfig {
-
- private String sessionId;
- private PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory;
- private EntityManagerFactory entityManagerFactory;
-
- public String getSessionId() {
- return sessionId;
- }
-
- public void setSessionId(String sessionId) {
- this.sessionId = sessionId;
- }
-
- public PlaceholderResolverStrategyFactory getPlaceholderResolverStrategyFactory() {
- return placeholderResolverStrategyFactory;
- }
-
- public void setPlaceholderResolverStrategy(
- PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory) {
- this.placeholderResolverStrategyFactory = placeholderResolverStrategyFactory;
- }
-
- public EntityManagerFactory getEntityManagerFactory() {
- return entityManagerFactory;
- }
-
- public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
- this.entityManagerFactory = entityManagerFactory;
- }
-
-}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -0,0 +1,110 @@
+package org.drools.persistence.session;
+
+import java.util.Arrays;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.PostLoad;
+import javax.persistence.PrePersist;
+import javax.persistence.PreUpdate;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+import org.drools.marshalling.MarshallingConfiguration;
+
+ at Entity
+public class SessionInfo {
+ private @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ int id;
+
+// @Version
+// @Column(name = "OPTLOCK")
+// private int version;
+
+ private Date startDate;
+ private Date lastModificationDate;
+ private boolean dirty;
+ @Lob
+ private byte[] rulesByteArray;
+
+ @Transient
+ private int versionShadow;
+ @Transient
+ private Date lastModificationDateShadow;
+ @Transient
+ private byte[] rulesByteArrayShadow;
+
+ @Transient
+ MarshallingConfiguration marshallingConfiguration;
+
+ @Transient
+ JPASessionMashallingHelper helper;
+
+ public SessionInfo() {
+ this.startDate = new Date();
+ }
+
+ public int getId() {
+ return this.id;
+ }
+
+// public int getVersion() {
+// return this.version;
+// }
+
+ public void setJPASessionMashallingHelper(JPASessionMashallingHelper helper) {
+ this.helper = helper;
+ }
+
+ public byte[] getData() {
+ return this.rulesByteArray;
+ }
+
+ public Date getStartDate() {
+ return this.startDate;
+ }
+
+ public Date getLastModificationDate() {
+ return this.lastModificationDate;
+ }
+
+ public void setDirty() {
+ this.dirty = true;
+ }
+
+ @PostLoad
+ public void postLoad() {
+ this.lastModificationDateShadow = this.lastModificationDate;
+ this.rulesByteArrayShadow = this.rulesByteArray;
+// this.versionShadow = this.version;
+ }
+
+ @PrePersist
+ @PreUpdate
+ public void update() {
+ // we always increase the last modification date for each action, so we know there will be an update
+ System.out.println( "pre persist/update event" );
+ byte[] newByteArray = this.helper.getSnapshot();
+ if ( !Arrays.equals( newByteArray,
+ this.rulesByteArray ) ) {
+ this.lastModificationDate = new Date();
+ this.rulesByteArray = newByteArray;
+ }
+ this.lastModificationDateShadow = this.lastModificationDate;
+ this.rulesByteArrayShadow = this.rulesByteArray;
+ this.dirty = false;
+ }
+
+ public void rollback() {
+ this.lastModificationDate = this.lastModificationDateShadow;
+ this.rulesByteArray = this.rulesByteArrayShadow;
+// this.version = this.versionShadow;
+ }
+
+}
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-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,117 +1,295 @@
package org.drools.persistence.session;
-import javax.transaction.xa.XAException;
+import java.util.Map;
+import javax.naming.InitialContext;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.transaction.RollbackException;
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+import javax.transaction.UserTransaction;
+
+import org.apache.commons.collections.map.IdentityMap;
import org.drools.KnowledgeBase;
import org.drools.RuleBase;
import org.drools.SessionConfiguration;
import org.drools.StatefulSession;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.impl.EnvironmentFactory;
import org.drools.impl.KnowledgeBaseImpl;
-import org.drools.persistence.Persister;
-import org.drools.persistence.Transaction;
-import org.drools.persistence.jpa.JPAPersister;
-import org.drools.persistence.processinstance.JPAProcessInstanceManager;
-import org.drools.persistence.processinstance.JPASignalManager;
-import org.drools.persistence.processinstance.JPAWorkItemManager;
+import org.drools.marshalling.MarshallingConfiguration;
+import org.drools.marshalling.MarshallingConfigurationImpl;
+import org.drools.marshalling.PlaceholderResolverStrategyFactory;
import org.drools.process.command.Command;
import org.drools.process.command.CommandService;
+import org.drools.reteoo.ReteooRuleBase;
import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.hibernate.ejb.EntityManagerImpl;
-public class SingleSessionCommandService implements CommandService {
+public class SingleSessionCommandService
+ implements
+ CommandService {
- private Persister<StatefulSession> persister;
- private PersistenceConfig pconfig;
-
- public SingleSessionCommandService(RuleBase ruleBase) {
- this(ruleBase, null);
- }
-
- public SingleSessionCommandService(RuleBase ruleBase, SessionConfiguration conf) {
- if (conf == null) {
- conf = new SessionConfiguration();
- }
- PersistenceConfig pconfig = getPersistenceConfig();
- if (pconfig.getSessionId() != null) {
- persister = new JPAPersisterManager(
- pconfig.getPlaceholderResolverStrategyFactory(),
- pconfig.getEntityManagerFactory())
- .getSessionPersister(pconfig.getSessionId(), ruleBase, conf);
- } else {
- persister = new JPAPersisterManager(
- pconfig.getPlaceholderResolverStrategyFactory(),
- pconfig.getEntityManagerFactory())
- .getSessionPersister(ruleBase, conf);
- }
- init();
- }
-
- public SingleSessionCommandService(KnowledgeBase kbase) {
- this(((KnowledgeBaseImpl) kbase).getRuleBase());
- }
-
- public SingleSessionCommandService(KnowledgeBase kbase, KnowledgeSessionConfiguration conf) {
- this(((KnowledgeBaseImpl) kbase).getRuleBase(), (SessionConfiguration) conf);
- }
-
- private void init() {
- StatefulSession session = persister.getObject();
- ((JPAProcessInstanceManager) ((InternalWorkingMemory) session).getProcessInstanceManager())
- .setEntityManager(((JPAPersister<StatefulSession>) persister).getEntityManager());
- ((JPAWorkItemManager) ((InternalWorkingMemory) session).getWorkItemManager())
- .setEntityManager(((JPAPersister<StatefulSession>) persister).getEntityManager());
- ((JPASignalManager) ((InternalWorkingMemory) session).getSignalManager())
- .setEntityManager(((JPAPersister<StatefulSession>) persister).getEntityManager());
- ((JPASignalManager) ((InternalWorkingMemory) session).getSignalManager())
- .setPersister(persister);
- }
-
- public StatefulSession getSession() {
- return persister.getObject();
- }
-
- public <T> T execute(Command<T> command) {
- StatefulSession session = persister.getObject();
- Transaction transaction = persister.getTransaction();
- try {
- transaction.start();
- T result = command.execute(session);
- transaction.commit();
- if (pconfig.getSessionId() == null) {
- pconfig.setSessionId(getSessionId());
- }
- return result;
- } 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);
- }
- }
- }
-
- public void dispose() {
- StatefulSession session = persister.getObject();
- if (session != null) {
- session.dispose();
- }
- }
-
- public String getSessionId() {
- return persister.getUniqueId();
- }
-
- public PersistenceConfig getPersistenceConfig() {
- Environment environment = EnvironmentFactory.newEnvironment();
- pconfig = (PersistenceConfig) environment.get(PersistenceConfig.class.getName());
- if (pconfig == null) {
- pconfig = new PersistenceConfig();
- environment.set(PersistenceConfig.class.getName(), pconfig);
- }
- return pconfig;
- }
+ private EntityManagerFactory emf;
+ private EntityManager em;
+ private SessionInfo sessionInfo;
+ private JPASessionMashallingHelper marshallingHelper;
+ private StatefulSession session;
+ private Environment env;
+
+ public SingleSessionCommandService(KnowledgeBase kbase,
+ KnowledgeSessionConfiguration conf,
+ Environment environment) {
+ this( ((KnowledgeBaseImpl) kbase).getRuleBase(),
+ (SessionConfiguration) conf,
+ environment );
+ }
+
+ public SingleSessionCommandService(RuleBase ruleBase,
+ SessionConfiguration conf,
+ Environment env) {
+ if ( conf == null ) {
+ conf = new SessionConfiguration();
+ }
+
+ this.env = env;
+
+ this.sessionInfo = new SessionInfo();
+
+ 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() );
+ UserTransaction ut = null;
+ try {
+ InitialContext ctx = new InitialContext();
+ ut = (UserTransaction) ctx.lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ registerRollbackSync( );
+ this.em.joinTransaction();
+
+ this.em.persist( this.sessionInfo );
+
+ 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 );
+ }
+ }
+
+ EntityManager localEm = this.emf.createEntityManager();
+ // System.out.println( "1) version " + localEm.find( SessionInfo.class, sessionInfo.getId() ).getVersion() );
+ localEm.close();
+ }
+
+
+ public void init() {
+
+ }
+
+ public StatefulSession getSession() {
+ return this.session;
+ }
+
+ public <T> T execute(Command<T> command) {
+ boolean localTransaction = false;
+ UserTransaction ut = null;
+ try {
+ ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+
+ if ( ut.getStatus() == Status.STATUS_NO_TRANSACTION ) {
+ // 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 );
+ }
+
+ this.em.joinTransaction();
+ //System.out.println( "1) exec ver : " + this.sessionInfo.getVersion() );
+ this.sessionInfo.setDirty();
+ //System.out.println( "2) exec ver : " + this.sessionInfo.getVersion() );
+
+ registerRollbackSync();
+
+ T result = command.execute( session );
+ //System.out.println( "3) exec ver : " + this.sessionInfo.getVersion() );
+
+ if ( localTransaction ) {
+ // it's a locally created transaction so commit
+ 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 ) {
+ try {
+ if ( ut != null ) {
+ ut.rollback();
+ }
+ throw new RuntimeException( "Could not execute command",
+ t1 );
+ } catch ( Throwable t2 ) {
+ throw new RuntimeException( "Could not rollback transaction",
+ t2 );
+ }
+ } else {
+ throw new RuntimeException( "Could not execute command",
+ t1 );
+ }
+ }
+ }
+
+ public void dispose() {
+ if ( session != null ) {
+ session.dispose();
+ }
+ }
+
+ public long getSessionId() {
+ return sessionInfo.getId();
+ }
+
+ public void registerRollbackSync() throws IllegalStateException,
+ RollbackException,
+ SystemException {
+ TransactionManager txm = (TransactionManager) env.get( "drools.TransactionManager" );
+ if ( txm == null ) {
+ return;
+ }
+
+ Map map = (Map) env.get( "synchronizations" );
+ if ( map == null ) {
+ map = new IdentityMap();
+ env.set( "synchronizations",
+ map );
+ }
+
+ if ( map.get( this ) == null ) {
+ txm.getTransaction().registerSynchronization( new SynchronizationImpl( env,
+ this ) );
+ map.put( this,
+ this );
+ }
+
+ // // lazy registration that ensures we registration the rollback just once
+ // if ( !rollbackRegistered.get() ) {
+ // TransactionManagerServices.getTransactionManager().getTransaction().registerSynchronization( new SynchronizationImpl( rollbackRegistered,
+ // ks ) );
+ // rollbackRegistered.set( true );
+ // System.out.println( "registered rollback sychronisation" );
+ // }
+ }
+
+ public static class SynchronizationImpl
+ implements
+ Synchronization {
+ private Environment env;
+ private SingleSessionCommandService cmdService;
+
+ public SynchronizationImpl(Environment env,
+ SingleSessionCommandService cmdService) {
+ this.env = env;
+ this.cmdService = cmdService;
+ }
+
+ public void afterCompletion(int status) {
+ if ( status != Status.STATUS_COMMITTED ) {
+ cmdService.rollback();
+ System.out.println( "after with local rollback: " + status );
+ }
+
+ // always cleanup thread local whatever the result
+ //rollbackRegistered.remove();
+ System.out.println( "cleanedup rollback sychronisation" );
+ Map map = (Map) env.get( "synchronizations" );
+ map.remove( cmdService );
+
+ // cleanup local resource entity manager, normally an EntityManager should be closed with the transaction it was bound to,
+ // if it was created inside the scope of the transaction, but adding this anyway just in case.
+ EntityManager localEm = ( EntityManager ) this.env.get( EnvironmentName.ENTITY_MANAGER );
+ if ( localEm != null && localEm.isOpen() ) {
+ localEm.close();
+ }
+
+ }
+
+ public void beforeCompletion() {
+
+ }
+
+ }
+
+ // public static class SynchronizationImpl
+ // implements
+ // Synchronization {
+ // KnowledgeStore ks;
+ // ThreadLocal<Boolean> rollbackRegistered;
+ //
+ // SynchronizationImpl(ThreadLocal<Boolean> rollbackRegistered,
+ // KnowledgeStore ks) {
+ // this.ks = ks;
+ // this.rollbackRegistered = rollbackRegistered;
+ // }
+ //
+ // public void afterCompletion(int status) {
+ // if ( status == Status.STATUS_COMMITTED) {
+ // ks.commit();
+ // System.out.println( "after with local commit: " + status );
+ // } else {
+ // ks.rollback();
+ // System.out.println( "after with local rollacbk: " + status );
+ // }
+ //
+ // // always cleanup thread local whatever the result
+ // rollbackRegistered.remove();
+ // System.out.println( "cleanedup rollback sychronisation" );
+ // }
+ //
+ // public void beforeCompletion() {
+ // System.out.println( "before " );
+ // }
+ //}
+
+ public void rollback() {
+ // have to create a new localEM as an EM part of a transaction cannot do a find.
+ this.sessionInfo.rollback();
+ this.marshallingHelper.loadSnapshot( this.sessionInfo.getData(), this.session );
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/resources/META-INF/persistence.xml 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/resources/META-INF/persistence.xml 2009-02-14 04:52:53 UTC (rev 25261)
@@ -17,26 +17,17 @@
</properties>
</persistence-unit-->
- <persistence-unit name="org.drools.persistence.jpa">
+ <persistence-unit name="org.drools.persistence.jpa" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
- <class>org.drools.persistence.jpa.ByteArrayObject</class>
+ <jta-data-source>jdbc/testDS1</jta-data-source>
+ <class>org.drools.persistence.session.SessionInfo</class>
<properties>
- <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
- <property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
- <property name="hibernate.connection.url" value="jdbc:h2:mem:mydb" />
- <!--property name="hibernate.connection.url" value="jdbc:h2:file:/home/kverlaen/NotBackedUp/development/drools/drools-process/drools-process-enterprise/bin/mydb" /-->
-
-<!-- <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>-->
-<!-- <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> -->
-<!-- <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/postgres"/>-->
-
- <property name="hibernate.connection.username" value="sa"/>
- <property name="hibernate.connection.password" value="sasa"/>
- <property name="hibernate.connection.autocommit" value="false" />
+ <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
- <property name="hibernate.show_sql" value="false" />
+ <property name="hibernate.show_sql" value="true" />
+ <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />
</properties>
</persistence-unit>
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/resources/jndi.properties
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/resources/jndi.properties 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/resources/jndi.properties 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,3 +1 @@
-java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
-java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
-java.naming.provider.url=localhost:1099
\ No newline at end of file
+java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory
\ No newline at end of file
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-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/jpa/JPAPersisterTest.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -9,7 +9,7 @@
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
import org.drools.WorkingMemory;
-import org.drools.persistence.session.StatefulSessionSnapshotter;
+import org.drools.persistence.session.JPASessionMashallingHelper;
import org.drools.process.core.Work;
import org.drools.process.core.impl.WorkImpl;
import org.drools.rule.Package;
@@ -34,79 +34,85 @@
private EntityManagerFactory emf;
private WorkItem workItem;
- protected void setUp() {
- emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
+// protected void setUp() {
+// emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
+// }
+//
+// protected void tearDown() {
+// emf.close();
+// }
+
+ public void testDummy() {
+
}
- protected void tearDown() {
- emf.close();
- }
-
- public void testPersistence() {
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- Package pkg = new Package("org.drools.test");
- pkg.addProcess(getProcess());
- ruleBase.addPackage(pkg);
-
- StatefulSession session = ruleBase.newStatefulSession();
- JPAPersister<StatefulSession> persister = new JPAPersister<StatefulSession>(
- emf, new StatefulSessionSnapshotter(session));
-
- session.getWorkItemManager().registerWorkItemHandler("MyWork", new WorkItemHandler() {
- public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
- JPAPersisterTest.this.workItem = workItem;
- }
- public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
- }
- });
- ProcessInstance processInstance = session.startProcess("org.drools.test.TestProcess");
- assertNotNull(workItem);
- persister.save();
-
- persister.load();
- processInstance = session.getProcessInstance(processInstance.getId());
- assertNotNull(processInstance);
- assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
-
- session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
- assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
- }
-
- private RuleFlowProcess getProcess() {
- RuleFlowProcess process = new RuleFlowProcess();
- process.setId("org.drools.test.TestProcess");
- process.setName("TestProcess");
- process.setPackageName("org.drools.test");
- StartNode start = new StartNode();
- start.setId(1);
- start.setName("Start");
- process.addNode(start);
- ActionNode actionNode = new ActionNode();
- actionNode.setId(2);
- actionNode.setName("Action");
- DroolsConsequenceAction action = new DroolsConsequenceAction();
- action.setMetaData("Action", new Action() {
- public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
- System.out.println("Executed action");
- }
- });
- actionNode.setAction(action);
- process.addNode(actionNode);
- new ConnectionImpl(start, Node.CONNECTION_DEFAULT_TYPE, actionNode, Node.CONNECTION_DEFAULT_TYPE);
- WorkItemNode workItemNode = new WorkItemNode();
- workItemNode.setId(3);
- workItemNode.setName("WorkItem");
- Work work = new WorkImpl();
- work.setName("MyWork");
- workItemNode.setWork(work);
- process.addNode(workItemNode);
- new ConnectionImpl(actionNode, Node.CONNECTION_DEFAULT_TYPE, workItemNode, Node.CONNECTION_DEFAULT_TYPE);
- EndNode end = new EndNode();
- end.setId(4);
- end.setName("End");
- process.addNode(end);
- new ConnectionImpl(workItemNode, Node.CONNECTION_DEFAULT_TYPE, end, Node.CONNECTION_DEFAULT_TYPE);
- return process;
- }
+// public void testPersistence() {
+// RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+// Package pkg = new Package("org.drools.test");
+// pkg.addProcess(getProcess());
+// ruleBase.addPackage(pkg);
+//
+// StatefulSession session = ruleBase.newStatefulSession();
+// JPAPersister<StatefulSession> persister = new JPAPersister<StatefulSession>(
+// emf, new JPASessionMashallingHelper(session));
+//
+// session.getWorkItemManager().registerWorkItemHandler("MyWork", new WorkItemHandler() {
+// public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+// JPAPersisterTest.this.workItem = workItem;
+// }
+// public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+// }
+// });
+//
+//
+// ProcessInstance processInstance = session.startProcess("org.drools.test.TestProcess");
+// assertNotNull(workItem);
+// persister.save();
+//
+// persister.load();
+// processInstance = session.getProcessInstance(processInstance.getId());
+// assertNotNull(processInstance);
+// assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+//
+// session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+// assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+// }
+//
+// private RuleFlowProcess getProcess() {
+// RuleFlowProcess process = new RuleFlowProcess();
+// process.setId("org.drools.test.TestProcess");
+// process.setName("TestProcess");
+// process.setPackageName("org.drools.test");
+// StartNode start = new StartNode();
+// start.setId(1);
+// start.setName("Start");
+// process.addNode(start);
+// ActionNode actionNode = new ActionNode();
+// actionNode.setId(2);
+// actionNode.setName("Action");
+// DroolsConsequenceAction action = new DroolsConsequenceAction();
+// action.setMetaData("Action", new Action() {
+// public void execute(KnowledgeHelper knowledgeHelper, WorkingMemory workingMemory, ProcessContext context) throws Exception {
+// System.out.println("Executed action");
+// }
+// });
+// actionNode.setAction(action);
+// process.addNode(actionNode);
+// new ConnectionImpl(start, Node.CONNECTION_DEFAULT_TYPE, actionNode, Node.CONNECTION_DEFAULT_TYPE);
+// WorkItemNode workItemNode = new WorkItemNode();
+// workItemNode.setId(3);
+// workItemNode.setName("WorkItem");
+// Work work = new WorkImpl();
+// work.setName("MyWork");
+// workItemNode.setWork(work);
+// process.addNode(workItemNode);
+// new ConnectionImpl(actionNode, Node.CONNECTION_DEFAULT_TYPE, workItemNode, Node.CONNECTION_DEFAULT_TYPE);
+// EndNode end = new EndNode();
+// end.setId(4);
+// end.setName("End");
+// process.addNode(end);
+// new ConnectionImpl(workItemNode, Node.CONNECTION_DEFAULT_TYPE, end, Node.CONNECTION_DEFAULT_TYPE);
+// return process;
+// }
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -1,7 +1,16 @@
package org.drools.persistence.session;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Properties;
+import javax.naming.InitialContext;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.transaction.SystemException;
+import javax.transaction.UserTransaction;
+
import junit.framework.TestCase;
import org.drools.KnowledgeBase;
@@ -10,128 +19,348 @@
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.impl.EnvironmentFactory;
+import org.drools.impl.EnvironmentImpl;
+import org.drools.io.ResourceFactory;
import org.drools.io.impl.ClassPathResource;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
import org.drools.runtime.KnowledgeSessionConfiguration;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.ProcessInstance;
import org.drools.runtime.process.WorkItem;
+import bitronix.tm.TransactionManagerServices;
+import bitronix.tm.resource.jdbc.PoolingDataSource;
+
public class PersistentStatefulSessionTest extends TestCase {
-
- public void testPersistenceWorkItems() {
- 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");
- KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(properties);
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add(new ClassPathResource("WorkItemsProcess.rf"), ResourceType.DRF);
+
+ PoolingDataSource ds1;
+
+ @Override
+ protected void setUp() throws Exception {
+ ds1 = new PoolingDataSource();
+ ds1.setUniqueName( "jdbc/testDS1" );
+ ds1.setClassName( "org.h2.jdbcx.JdbcDataSource" );
+ ds1.setMaxPoolSize( 3 );
+ ds1.setAllowLocalTransactions( true );
+ ds1.getDriverProperties().put( "user",
+ "sa" );
+ ds1.getDriverProperties().put( "password",
+ "sasa" );
+ ds1.getDriverProperties().put( "URL",
+ "jdbc:h2:mem:mydb" );
+ ds1.init();
+
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ ds1.close();
+ }
+
+ public void testLocalTransactionPerStatement() {
+
+ 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" );
+ KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration( properties );
+
+ String str = "";
+ str += "package org.drools.test\n";
+ str += "global java.util.List list\n";
+ str += "rule rule1\n";
+ str += "when\n";
+ str += " Integer(intValue > 0)\n";
+ str += "then\n";
+ str += " list.add( 1 );\n";
+ str += "end\n";
+ str += "\n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
-
- StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession(config);
- ProcessInstance processInstance = session.startProcess("org.drools.test.TestProcess");
- session.insert("TestString");
- System.out.println("Started process instance " + processInstance.getId());
-
+
+ if ( kbuilder.hasErrors() ) {
+ fail( kbuilder.getErrors().toString() );
+ }
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+
+ env.set( "drools.TransactionManager",
+ TransactionManagerServices.getTransactionManager() );
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( config,
+ env );
+ List list = new ArrayList();
+
+ ksession.setGlobal( "list",
+ list );
+
+ ksession.insert( 1 );
+ ksession.insert( 2 );
+ ksession.insert( 3 );
+
+ ksession.fireAllRules();
+
+ assertEquals( 3,
+ list.size() );
+
+ }
+
+ public void testUserTransactions() throws Exception {
+
+ 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" );
+ KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration( properties );
+
+ String str = "";
+ str += "package org.drools.test\n";
+ str += "global java.util.List list\n";
+ str += "rule rule1\n";
+ str += "when\n";
+ str += " Integer(intValue > 0)\n";
+ str += "then\n";
+ str += " list.add( 1 );\n";
+ str += "end\n";
+ str += "\n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+ ResourceType.DRL );
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+
+ if ( kbuilder.hasErrors() ) {
+ fail( kbuilder.getErrors().toString() );
+ }
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+ env.set( "drools.TransactionManager",
+ TransactionManagerServices.getTransactionManager() );
+
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( config,
+ env );
+
+ // EntityManager em = emf.createEntityManager();
+ // SessionInfo sInfo = em.find( SessionInfo.class, 1 );
+ // assertNotNull( sInfo );
+ // //System.out.println( "session creation : " + sInfo.getVersion() );
+ // em.close();
+
+ List list = new ArrayList();
+
+ // insert and commit
+ UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ ksession.setGlobal( "list",
+ list );
+ ksession.insert( 1 );
+ ksession.insert( 2 );
+ ut.commit();
+
+ // insert and rollback
+ ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ ksession.insert( 3 );
+ ut.rollback();
+
+ // check we rolled back the state changes from the 3rd insert
+ ksession.fireAllRules();
+ assertEquals( 2,
+ list.size() );
+
+ // insert and commit
+ ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ ksession.insert( 3 );
+ ksession.insert( 4 );
+ ut.commit();
+
+ // rollback again, this is testing that we can do consequetive rollbacks and commits without issue
+ ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ ksession.insert( 5 );
+ ksession.insert( 6 );
+ ut.rollback();
+
+ ksession.fireAllRules();
+
+ assertEquals( 4,
+ list.size() );
+
+ }
+
+ public void testPersistenceWorkItems() {
+ 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" );
+ KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration( properties );
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( new ClassPathResource( "WorkItemsProcess.rf" ),
+ ResourceType.DRF );
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+
+ StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession( config,
+ env );
+ ProcessInstance processInstance = session.startProcess( "org.drools.test.TestProcess" );
+ session.insert( "TestString" );
+ System.out.println( "Started process instance " + processInstance.getId() );
+
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
- assertNotNull(workItem);
-
- session = kbase.newStatefulKnowledgeSession(config);
- processInstance = session.getProcessInstance(processInstance.getId());
- assertNotNull(processInstance);
-
- session = kbase.newStatefulKnowledgeSession(config);
- session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
-
+ assertNotNull( workItem );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ processInstance = session.getProcessInstance( processInstance.getId() );
+ assertNotNull( processInstance );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ session.getWorkItemManager().completeWorkItem( workItem.getId(),
+ null );
+
workItem = handler.getWorkItem();
- assertNotNull(workItem);
-
- session = kbase.newStatefulKnowledgeSession(config);
- processInstance = session.getProcessInstance(processInstance.getId());
- assertNotNull(processInstance);
-
- session = kbase.newStatefulKnowledgeSession(config);
- session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
-
+ assertNotNull( workItem );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ processInstance = session.getProcessInstance( processInstance.getId() );
+ assertNotNull( processInstance );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ session.getWorkItemManager().completeWorkItem( workItem.getId(),
+ null );
+
workItem = handler.getWorkItem();
- assertNotNull(workItem);
-
- session = kbase.newStatefulKnowledgeSession(config);
- processInstance = session.getProcessInstance(processInstance.getId());
- assertNotNull(processInstance);
-
- session = kbase.newStatefulKnowledgeSession(config);
- session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
-
+ assertNotNull( workItem );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ processInstance = session.getProcessInstance( processInstance.getId() );
+ assertNotNull( processInstance );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ session.getWorkItemManager().completeWorkItem( workItem.getId(),
+ null );
+
workItem = handler.getWorkItem();
- assertNull(workItem);
-
- session = kbase.newStatefulKnowledgeSession(config);
- processInstance = session.getProcessInstance(processInstance.getId());
- assertEquals(1, session.getObjects().size());
- for (Object o: session.getObjects()) {
- System.out.println(o);
+ assertNull( workItem );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ processInstance = session.getProcessInstance( processInstance.getId() );
+ assertEquals( 1,
+ session.getObjects().size() );
+ for ( Object o : session.getObjects() ) {
+ System.out.println( o );
}
- assertNull(processInstance);
-
- PersistenceConfig pconfig = (PersistenceConfig)
- EnvironmentFactory.newEnvironment().get(PersistenceConfig.class.getName());
- pconfig.setSessionId(null);
- }
-
- public void testPersistenceSubProcess() {
- 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");
- KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(properties);
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add(new ClassPathResource("SuperProcess.rf"), ResourceType.DRF);
- kbuilder.add(new ClassPathResource("SubProcess.rf"), ResourceType.DRF);
+ assertNull( processInstance );
+
+ }
+
+ public void testPersistenceSubProcess() {
+ 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" );
+ KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration( properties );
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( new ClassPathResource( "SuperProcess.rf" ),
+ ResourceType.DRF );
+ kbuilder.add( new ClassPathResource( "SubProcess.rf" ),
+ ResourceType.DRF );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
-
- StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession(config);
- ProcessInstance processInstance = session.startProcess("com.sample.SuperProcess");
- System.out.println("Started process instance " + processInstance.getId());
-
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+
+ StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession( config,
+ env );
+ ProcessInstance processInstance = session.startProcess( "com.sample.SuperProcess" );
+ System.out.println( "Started process instance " + processInstance.getId() );
+
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
- assertNotNull(workItem);
-
- session = kbase.newStatefulKnowledgeSession(config);
- processInstance = session.getProcessInstance(processInstance.getId());
- assertNotNull(processInstance);
-
- session = kbase.newStatefulKnowledgeSession(config);
- session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
-
+ assertNotNull( workItem );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ processInstance = session.getProcessInstance( processInstance.getId() );
+ assertNotNull( processInstance );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ session.getWorkItemManager().completeWorkItem( workItem.getId(),
+ null );
+
workItem = handler.getWorkItem();
- assertNotNull(workItem);
-
- session = kbase.newStatefulKnowledgeSession(config);
- processInstance = session.getProcessInstance(processInstance.getId());
- assertNotNull(processInstance);
-
- session = kbase.newStatefulKnowledgeSession(config);
- session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
-
+ assertNotNull( workItem );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ processInstance = session.getProcessInstance( processInstance.getId() );
+ assertNotNull( processInstance );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ session.getWorkItemManager().completeWorkItem( workItem.getId(),
+ null );
+
workItem = handler.getWorkItem();
- assertNull(workItem);
-
- session = kbase.newStatefulKnowledgeSession(config);
- processInstance = session.getProcessInstance(processInstance.getId());
- assertNull(processInstance);
-
- PersistenceConfig pconfig = (PersistenceConfig)
- EnvironmentFactory.newEnvironment().get(PersistenceConfig.class.getName());
- pconfig.setSessionId(null);
- }
-
+ assertNull( workItem );
+
+ session = kbase.newStatefulKnowledgeSession( config,
+ null );
+ processInstance = session.getProcessInstance( processInstance.getId() );
+ assertNull( processInstance );
+ }
+
}
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-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -24,6 +24,8 @@
import org.drools.rule.Package;
import org.drools.ruleflow.core.RuleFlowProcess;
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;
@@ -39,19 +41,44 @@
import org.drools.workflow.core.node.WorkItemNode;
import org.drools.workflow.instance.node.SubProcessNodeInstance;
+import bitronix.tm.TransactionManagerServices;
+import bitronix.tm.resource.jdbc.PoolingDataSource;
+
public class SingleSessionCommandServiceTest extends TestCase {
+ PoolingDataSource ds1;
private EntityManagerFactory emf;
- protected void setUp() {
- emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
+ protected void setUp() {
+ ds1 = new PoolingDataSource();
+ ds1.setUniqueName( "jdbc/testDS1" );
+ ds1.setClassName( "org.h2.jdbcx.JdbcDataSource" );
+ ds1.setMaxPoolSize( 3 );
+ ds1.setAllowLocalTransactions( true );
+ ds1.getDriverProperties().put( "user",
+ "sa" );
+ ds1.getDriverProperties().put( "password",
+ "sasa" );
+ ds1.getDriverProperties().put( "URL",
+ "jdbc:h2:mem:mydb" );
+ ds1.init();
+
+ emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
}
protected void tearDown() {
emf.close();
+ ds1.close();
+
}
public void testPersistenceWorkItems() {
+ 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);
@@ -63,7 +90,7 @@
properties.setProperty("drools.processSignalManagerFactory", "org.drools.persistence.processinstance.JPASignalManagerFactory");
SessionConfiguration config = new SessionConfiguration(properties);
- SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config);
+ SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
StartProcessCommand startProcessCommand = new StartProcessCommand();
startProcessCommand.setProcessId("org.drools.test.TestProcess");
ProcessInstance processInstance = (ProcessInstance) service.execute(startProcessCommand);
@@ -73,13 +100,13 @@
WorkItem workItem = handler.getWorkItem();
assertNotNull(workItem);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
completeWorkItemCommand.setWorkItemId(workItem.getId());
service.execute(completeWorkItemCommand);
@@ -87,13 +114,13 @@
workItem = handler.getWorkItem();
assertNotNull(workItem);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
completeWorkItemCommand = new CompleteWorkItemCommand();
completeWorkItemCommand.setWorkItemId(workItem.getId());
service.execute(completeWorkItemCommand);
@@ -101,13 +128,13 @@
workItem = handler.getWorkItem();
assertNotNull(workItem);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
completeWorkItemCommand = new CompleteWorkItemCommand();
completeWorkItemCommand.setWorkItemId(workItem.getId());
service.execute(completeWorkItemCommand);
@@ -115,7 +142,7 @@
workItem = handler.getWorkItem();
assertNull(workItem);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
@@ -177,6 +204,12 @@
}
public void testPersistenceSubProcess() {
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+ env.set( "drools.TransactionManager",
+ TransactionManagerServices.getTransactionManager() );
+
Properties properties = new Properties();
properties.setProperty("drools.commandService", "org.drools.persistence.session.SingleSessionCommandService");
properties.setProperty("drools.processInstanceManagerFactory", "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory");
@@ -188,7 +221,7 @@
Package pkg = getProcessSubProcess();
ruleBase.addPackage(pkg);
- SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config);
+ SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
StartProcessCommand startProcessCommand = new StartProcessCommand();
startProcessCommand.setProcessId("org.drools.test.TestProcess");
RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance) service.execute(startProcessCommand);
@@ -199,7 +232,7 @@
WorkItem workItem = handler.getWorkItem();
assertNotNull(workItem);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstanceId);
processInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
@@ -214,12 +247,12 @@
RuleFlowProcessInstance subProcessInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(subProcessInstance);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
completeWorkItemCommand.setWorkItemId(workItem.getId());
service.execute(completeWorkItemCommand);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(subProcessInstanceId);
subProcessInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
@@ -301,6 +334,12 @@
}
public void FIXMEtestPersistenceTimer() throws Exception {
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+ env.set( "drools.TransactionManager",
+ TransactionManagerServices.getTransactionManager() );
+
Properties properties = new Properties();
properties.setProperty("drools.commandService", "org.drools.persistence.session.SingleSessionCommandService");
properties.setProperty("drools.processInstanceManagerFactory", "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory");
@@ -312,19 +351,19 @@
Package pkg = getProcessTimer();
ruleBase.addPackage(pkg);
- SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config);
+ SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
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);
+ service = new SingleSessionCommandService(ruleBase, config, env);
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
Thread.sleep(2000);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
@@ -372,6 +411,12 @@
// @FIXME krisv this fails due to nested transactions
public void FIXMEtestPersistenceTimer2() throws Exception {
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+ env.set( "drools.TransactionManager",
+ TransactionManagerServices.getTransactionManager() );
+
Properties properties = new Properties();
properties.setProperty("drools.commandService", "org.drools.persistence.session.SingleSessionCommandService");
properties.setProperty("drools.processInstanceManagerFactory", "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory");
@@ -383,19 +428,19 @@
Package pkg = getProcessTimer2();
ruleBase.addPackage(pkg);
- SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config);
+ SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
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);
+ service = new SingleSessionCommandService(ruleBase, config, env);
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
assertNotNull(processInstance);
- service = new SingleSessionCommandService(ruleBase, config);
+ service = new SingleSessionCommandService(ruleBase, config, env);
Thread.sleep(2000);
getProcessInstanceCommand = new GetProcessInstanceCommand();
getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
Modified: labs/jbossrules/trunk/drools-templates/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-templates/.classpath 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-templates/.classpath 2009-02-14 04:52:53 UTC (rev 25261)
@@ -18,6 +18,6 @@
<classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
<classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.6/mvel2-2.0.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
<classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-templates/src/test/java/org/drools/template/parser/ExternalSheetListenerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-templates/src/test/java/org/drools/template/parser/ExternalSheetListenerTest.java 2009-02-13 21:18:58 UTC (rev 25260)
+++ labs/jbossrules/trunk/drools-templates/src/test/java/org/drools/template/parser/ExternalSheetListenerTest.java 2009-02-14 04:52:53 UTC (rev 25261)
@@ -25,6 +25,7 @@
import org.drools.process.instance.WorkItemManager;
import org.drools.process.instance.event.SignalManager;
import org.drools.process.instance.timer.TimerManager;
+import org.drools.runtime.Environment;
import org.drools.runtime.ObjectFilter;
import org.drools.spi.AgendaFilter;
import org.drools.spi.AgendaGroup;
@@ -430,6 +431,11 @@
// TODO Auto-generated method stub
return null;
}
+
+ public Environment getEnvironment() {
+ // TODO Auto-generated method stub
+ return null;
+ }
};
}
}
More information about the jboss-svn-commits
mailing list