[jboss-svn-commits] JBL Code SVN: r25427 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools/marshalling and 16 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Feb 25 23:49:09 EST 2009
Author: mark.proctor at jboss.com
Date: 2009-02-25 23:49:09 -0500 (Wed, 25 Feb 2009)
New Revision: 25427
Added:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/Marshaller.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/MarshallerFactory.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/MarshallerProvider.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/ObjectMarshallingStrategy.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/ObjectMarshallingStrategyAcceptor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/AbstractProcessInstanceMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ClassObjectMarshallingStrategyAcceptor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/DefaultMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/IdentityPlaceholderResolverStrategy.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerProviderImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerReaderContext.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerWriteContext.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallingConfiguration.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallingConfigurationImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ObjectMarshallingStrategyStore.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterEnums.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterHelper.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterKey.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/Placeholders.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessInstanceMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerRegistry.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RightTupleKey.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RuleBaseNodes.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RuleFlowProcessInstanceMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/SerializablePlaceholderResolverStrategy.java
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/AbstractProcessInstanceMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ClassPlaceholderResolverStrategyAcceptor.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/IdentityPlaceholderResolverStrategy.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Marshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ObjectPlaceholder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterEnums.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterHelper.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterKey.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategy.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategyAcceptor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategyFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Placeholders.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ProcessInstanceMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ProcessMarshallerRegistry.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RightTupleKey.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RuleBaseNodes.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RuleFlowProcessInstanceMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/SerializablePlaceholder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/SerializablePlaceholderResolverStrategy.java
Modified:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/KnowledgeRuntime.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java
labs/jbossrules/trunk/drools-core/.classpath
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SessionConfiguration.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/WorkingMemoryAction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/SlidingTimeWindow.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.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/JPASessionMarshallingHelper.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
Log:
JBRULES-1981 Update marshalling to use new drools api
Copied: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/Marshaller.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Marshaller.java)
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/Marshaller.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/Marshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,64 @@
+package org.drools.marshalling;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public interface Marshaller {
+
+ /**
+ * Marshalls the given StatefulKnowledgeSession into the provided OutputStream
+ * @param stream
+ * @param session
+ * @throws IOException
+ */
+ void marshall(OutputStream stream,
+ StatefulKnowledgeSession ksession) throws IOException;
+
+ /**
+ * Creates StatefulKnowledgeSession using default KnowledgeSessionConfiguration and
+ * Environment. It will then unmarshall the stream into the session. Either KnowledgeSessionConfiguration or
+ * Environment may be null and it will use the default.
+ *
+ * @param stream
+ * @return
+ * @throws IOException
+ * @throws ClassNotFoundException
+ */
+ public StatefulKnowledgeSession unmarshall(InputStream stream) throws IOException,
+ ClassNotFoundException;
+
+ /**
+ * Creates StatefulKnowledgeSession using the given KnowledgeSessionConfiguration and
+ * Environment. It will then unmarshall the stream into the session. Either KnowledgeSessionConfiguration or
+ * Environment may be null and it will use the default.
+ *
+ * @param stream
+ * @param config
+ * @param environment
+ * @return
+ * @throws IOException
+ * @throws ClassNotFoundException
+ */
+ public StatefulKnowledgeSession unmarshall(InputStream stream,
+ KnowledgeSessionConfiguration config,
+ Environment environment) throws IOException,
+ ClassNotFoundException;
+
+ /**
+ * Unmarshall the stream into the StatefulKnowledgeSession. All existing state in the session will be lost.
+ *
+ * @param stream
+ * @param session
+ * @throws IOException
+ * @throws ClassNotFoundException
+ */
+ void unmarshall(InputStream stream,
+ StatefulKnowledgeSession ksession) throws IOException,
+ ClassNotFoundException;
+
+}
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/Marshaller.java
___________________________________________________________________
Name: svn:mergeinfo
+
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/MarshallerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/MarshallerFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/MarshallerFactory.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,63 @@
+package org.drools.marshalling;
+
+import org.drools.KnowledgeBase;
+import org.drools.ProviderInitializationException;
+
+public class MarshallerFactory {
+ private static volatile MarshallerProvider provider;
+
+ public static ObjectMarshallingStrategyAcceptor newClassFilterAcceptor(String[] patterns) {
+ return getMarshallerProvider().newClassFilterAcceptor( patterns );
+ }
+
+ public static ObjectMarshallingStrategy newIdentityMarshallingStrategy() {
+ return getMarshallerProvider().newIdentityMarshallingStrategy();
+ }
+
+ public static ObjectMarshallingStrategy newIdentityMarshallingStrategy(ObjectMarshallingStrategyAcceptor acceptor) {
+ return getMarshallerProvider().newIdentityMarshallingStrategy( acceptor );
+ }
+
+ public static ObjectMarshallingStrategy newSerializeMarshallingStrategy() {
+ return getMarshallerProvider().newSerializeMarshallingStrategy();
+ }
+
+ public static ObjectMarshallingStrategy newSerializeMarshallingStrategy(ObjectMarshallingStrategyAcceptor acceptor) {
+ return getMarshallerProvider().newSerializeMarshallingStrategy( acceptor );
+ }
+
+ /**
+ * Default uses the serialise marshalling strategy.
+ * @return
+ */
+ public static Marshaller newMarshaller(KnowledgeBase kbase) {
+ return getMarshallerProvider().newMarshaller( kbase );
+ }
+
+ public static Marshaller newMarshaller(KnowledgeBase kbase,
+ ObjectMarshallingStrategy[] strategies) {
+ return getMarshallerProvider().newMarshaller( kbase,
+ strategies );
+ }
+
+ private static synchronized void setMarshallerProvider(MarshallerProvider provider) {
+ MarshallerFactory.provider = provider;
+ }
+
+ private static synchronized MarshallerProvider getMarshallerProvider() {
+ if ( provider == null ) {
+ loadProvider();
+ }
+ return provider;
+ }
+
+ private static void loadProvider() {
+ try {
+ Class<MarshallerProvider> cls = (Class<MarshallerProvider>) Class.forName( "org.drools.marshalling.impl.MarshallerProviderImpl" );
+ setMarshallerProvider( cls.newInstance() );
+ } catch ( Exception e2 ) {
+ throw new ProviderInitializationException( "Provider org.drools.marshalling.impl.MarshallerProviderImpl could not be set.",
+ e2 );
+ }
+ }
+}
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/MarshallerProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/MarshallerProvider.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/MarshallerProvider.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,20 @@
+package org.drools.marshalling;
+
+import org.drools.KnowledgeBase;
+
+public interface MarshallerProvider {
+ ObjectMarshallingStrategyAcceptor newClassFilterAcceptor(String[] patterns);
+
+ ObjectMarshallingStrategy newIdentityMarshallingStrategy();
+
+ ObjectMarshallingStrategy newIdentityMarshallingStrategy(ObjectMarshallingStrategyAcceptor acceptor);
+
+ ObjectMarshallingStrategy newSerializeMarshallingStrategy();
+
+ ObjectMarshallingStrategy newSerializeMarshallingStrategy(ObjectMarshallingStrategyAcceptor acceptor);
+
+ Marshaller newMarshaller(KnowledgeBase kbase);
+
+ Marshaller newMarshaller(KnowledgeBase kbase,
+ ObjectMarshallingStrategy[] strategies);
+}
Copied: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/ObjectMarshallingStrategy.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategy.java)
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/ObjectMarshallingStrategy.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/ObjectMarshallingStrategy.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,15 @@
+package org.drools.marshalling;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+public interface ObjectMarshallingStrategy {
+
+ public boolean accept(Object object);
+
+ public void write(ObjectOutputStream os,
+ Object object) throws IOException;
+
+ public Object read(ObjectInputStream os) throws IOException, ClassNotFoundException;
+}
Property changes on: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/ObjectMarshallingStrategy.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/ObjectMarshallingStrategyAcceptor.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategyAcceptor.java)
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/ObjectMarshallingStrategyAcceptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/ObjectMarshallingStrategyAcceptor.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,5 @@
+package org.drools.marshalling;
+
+public interface ObjectMarshallingStrategyAcceptor {
+ public boolean accept(Object object);
+}
Property changes on: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/marshalling/ObjectMarshallingStrategyAcceptor.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: 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 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/EnvironmentName.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -3,5 +3,5 @@
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";
+ public static final String OBJECT_MARSHALLING_STRATEGIES = "drools.objectMarshallingStrategies";
}
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/KnowledgeRuntime.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/KnowledgeRuntime.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/KnowledgeRuntime.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -22,6 +22,8 @@
Object getGlobal(String identifier);
Globals getGlobals();
+
+ Environment getEnvironment();
/**
* Returns the KnowledgeBase reference from which this stateful session was created.
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -5,6 +5,7 @@
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import junit.framework.Assert;
@@ -13,6 +14,8 @@
import org.drools.Cheese;
import org.drools.FactA;
import org.drools.FactB;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
import org.drools.Order;
import org.drools.OrderItem;
import org.drools.Person;
@@ -23,10 +26,19 @@
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
import org.drools.WorkingMemory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
import org.drools.common.InternalFactHandle;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.definition.KnowledgePackage;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.io.ResourceFactory;
+import org.drools.marshalling.MarshallerFactory;
+import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.rule.Package;
+import org.drools.runtime.StatefulKnowledgeSession;
public class DynamicRulesTest extends TestCase {
protected RuleBase getRuleBase() throws Exception {
@@ -557,17 +569,20 @@
}
public void testDynamicNotNode() throws Exception {
- final PackageBuilder builderInit = new PackageBuilder();
- builderInit.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_CollectDynamicRules1.drl" ) ) );
- final Package pkgInit = builderInit.getPackage();
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_CollectDynamicRules1.drl", getClass() ), ResourceType.DRL );
+ if ( kbuilder.hasErrors() ) {
+ fail ( kbuilder.getErrors().toString() );
+ }
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ Collection<KnowledgePackage> kpkgs = SerializationHelper.serializeObject( kbuilder.getKnowledgePackages() );
+ kbase.addKnowledgePackages( kpkgs );
+ kbase = SerializationHelper.serializeObject( kbase );
- RuleBase ruleBase = getRuleBase();
- ruleBase.addPackage( pkgInit );
-
- StatefulSession session = ruleBase.newStatefulSession();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List results = new ArrayList();
- session.setGlobal( "results",
- results );
+ ksession.setGlobal( "results",
+ results );
final Cheese a = new Cheese( "stilton",
10 );
@@ -575,38 +590,46 @@
15 );
final Cheese c = new Cheese( "stilton",
20 );
- session.insert( a );
- session.insert( b );
- session.insert( c );
+ ksession.insert( a );
+ ksession.insert( b );
+ ksession.insert( c );
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicNotNode.drl" ) ) );
- final Package pkg = builder.getPackage();
- ruleBase.addPackage( SerializationHelper.serializeObject( pkg ) );
- ruleBase = SerializationHelper.serializeObject( ruleBase );
- session = SerializationHelper.getSerialisedStatefulSession( session,
- ruleBase );
- results = (List) session.getGlobal( "results" );
+ kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_DynamicNotNode.drl", getClass() ), ResourceType.DRL );
+ if ( kbuilder.hasErrors() ) {
+ fail ( kbuilder.getErrors().toString() );
+ }
+ kpkgs = SerializationHelper.serializeObject( kbuilder.getKnowledgePackages() );
+ kbase.addKnowledgePackages( kpkgs );
+ kbase = SerializationHelper.serializeObject( kbase );
+
+ ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), false );
+
+ results = (List) ksession.getGlobal( "results" );
- session.fireAllRules();
+ ksession.fireAllRules();
assertEquals( 0,
results.size() );
- ruleBase.removePackage( "org.drools" );
+ kbase.removeKnowledgePackage( "org.drools" );
- session.retract( session.getFactHandle( b ) );
+ ksession.retract( ksession.getFactHandle( b ) );
+
+ kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_DynamicNotNode.drl", getClass() ), ResourceType.DRL );
+ if ( kbuilder.hasErrors() ) {
+ fail ( kbuilder.getErrors().toString() );
+ }
+ kpkgs = SerializationHelper.serializeObject( kbuilder.getKnowledgePackages() );
+ kbase.addKnowledgePackages( kpkgs );
+ kbase = SerializationHelper.serializeObject( kbase );
+
+ ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), false );
+
+ results = (List) ksession.getGlobal( "results" );
+ ksession.fireAllRules();
- final PackageBuilder builder1 = new PackageBuilder();
- builder1.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicNotNode.drl" ) ) );
- final Package pkg1 = builder.getPackage();
- ruleBase.addPackage( SerializationHelper.serializeObject( pkg1 ) );
- ruleBase = SerializationHelper.serializeObject( ruleBase );
- session = SerializationHelper.getSerialisedStatefulSession( session,
- ruleBase );
- results = (List) session.getGlobal( "results" );
- session.fireAllRules();
-
assertEquals( 1,
results.size() );
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,10 +1,14 @@
package org.drools.integrationtests;
import static org.drools.integrationtests.SerializationHelper.getSerialisedStatefulSession;
+import static org.drools.integrationtests.SerializationHelper.getSerialisedStatefulKnowledgeSession;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.InputStreamReader;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
@@ -22,6 +26,8 @@
import org.drools.FactA;
import org.drools.FactB;
import org.drools.FactC;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
import org.drools.Message;
import org.drools.Person;
import org.drools.Primitives;
@@ -31,24 +37,34 @@
import org.drools.StatefulSession;
import org.drools.WorkingMemory;
import org.drools.base.ClassObjectType;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
import org.drools.common.BaseNode;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalRuleBase;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
-import org.drools.marshalling.DefaultMarshaller;
+import org.drools.impl.EnvironmentFactory;
+import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.io.ResourceFactory;
import org.drools.marshalling.Marshaller;
-import org.drools.marshalling.RuleBaseNodes;
+import org.drools.marshalling.MarshallerFactory;
+import org.drools.marshalling.impl.DefaultMarshaller;
+import org.drools.marshalling.impl.RuleBaseNodes;
import org.drools.reteoo.ObjectTypeNode;
+import org.drools.reteoo.ReteooStatefulSession;
import org.drools.reteoo.RuleTerminalNode;
import org.drools.rule.MapBackedClassLoader;
import org.drools.rule.Package;
import org.drools.rule.Rule;
+import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.spi.GlobalResolver;
import org.drools.util.DroolsStreamUtils;
public class MarshallingTest extends TestCase {
-
+
public void testSerializable() throws Exception {
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) );
@@ -493,18 +509,21 @@
// serialize session and rulebase out
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- Marshaller marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session,
- baos,
- marshaller );
+ StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
+ marshaller.marshall( baos, ksession );
+ baos.close();
+
GlobalResolver resolver = session.getGlobalResolver();
byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
// now deserialize the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
- marshaller );
+
+ marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
+ ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession ) ksession.session;
session.setGlobalResolver( resolver );
// dynamically add a new package
@@ -524,17 +543,23 @@
results = (List) session.getGlobal( "results" );
assertEquals( 4,
results.size() );
- assertEquals( bob.getObject(),
+
+ assertEquals( stilton2.getObject(),
results.get( 1 ) );
- assertEquals( stilton2.getObject(),
+
+
+ assertEquals( mark.getObject(),
results.get( 2 ) );
- assertEquals( mark.getObject(),
+
+ assertEquals( bob.getObject(),
results.get( 3 ) );
+
serializedRulebase = null;
session = SerializationHelper.getSerialisedStatefulSession( session,
ruleBase );
+
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
// dispose session
@@ -571,11 +596,14 @@
session.fireAllRules();
GlobalResolver resolver = session.getGlobalResolver();
+
+ // serialize session and rulebase out
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- Marshaller marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session,
- baos,
- marshaller );
+ StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
+ marshaller.marshall( baos, ksession );
+ baos.close();
+
byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -587,9 +615,11 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
- marshaller );
+ marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
+ ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession ) ksession.session;
session.setGlobalResolver( resolver );
+
results = (List) session.getGlobal( "results" );
builder = new PackageBuilder();
@@ -606,14 +636,17 @@
session.fireAllRules();
assertEquals( 5,
results.size() );
- assertEquals( brie1.getObject(),
+
+ assertEquals( stilton2.getObject(),
results.get( 1 ) );
- assertEquals( stilton2.getObject(),
+
+ assertEquals( brie3.getObject(),
results.get( 2 ) );
assertEquals( brie2.getObject(),
+ results.get( 3 ) );
+
+ assertEquals( brie1.getObject(),
results.get( 4 ) );
- assertEquals( brie3.getObject(),
- results.get( 3 ) );
serializedRulebase = null;
@@ -645,13 +678,14 @@
InternalFactHandle brie1 = (InternalFactHandle) session.insert( new Cheese( "brie",
10 ) );
session.fireAllRules();
-
+
GlobalResolver resolver = session.getGlobalResolver();
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- Marshaller marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session,
- baos,
- marshaller );
+ StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
+ marshaller.marshall( baos, ksession );
+ baos.close();
byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -663,8 +697,9 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
- marshaller );
+ marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
+ ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession ) ksession.session;
session.setGlobalResolver( resolver );
results = (List) session.getGlobal( "results" );
@@ -697,18 +732,19 @@
resolver = session.getGlobalResolver();
baos = new ByteArrayOutputStream();
- marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session,
- baos,
- marshaller );
+ ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
+ marshaller.marshall( baos, ksession );
+ baos.close();
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
- marshaller );
+ marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
+ ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession ) ksession.session;
session.setGlobalResolver( resolver );
results = (List) session.getGlobal( "results" );
@@ -747,17 +783,18 @@
resolver = session.getGlobalResolver();
baos = new ByteArrayOutputStream();
- marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session,
- baos,
- marshaller );
+ ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
+ marshaller.marshall( baos, ksession );
+ baos.close();
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
- marshaller );
+ marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
+ ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession ) ksession.session;
session.setGlobalResolver( resolver );
results = (List) session.getGlobal( "results" );
@@ -791,6 +828,7 @@
session = SerializationHelper.getSerialisedStatefulSession( session,
ruleBase );
+
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -825,11 +863,13 @@
10 ) );
session.fireAllRules();
+ GlobalResolver resolver = session.getGlobalResolver();
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- Marshaller marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session,
- baos,
- marshaller );
+ StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
+ marshaller.marshall( baos, ksession );
+ baos.close();
byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -841,8 +881,9 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
- marshaller );
+ marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
+ ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession ) ksession.session;
results.clear();
session.setGlobal( "results",
results );
@@ -875,18 +916,19 @@
serializedRulebase = null;
baos = new ByteArrayOutputStream();
- marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session,
- baos,
- marshaller );
+ ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
+ marshaller.marshall( baos, ksession );
+ baos.close();
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
- marshaller );
+ marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
+ ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession ) ksession.session;
results.clear();
session.setGlobal( "results",
results );
@@ -914,8 +956,9 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
- marshaller );
+ marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
+ ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession ) ksession.session;
results.clear();
session.setGlobal( "results",
results );
@@ -943,17 +986,18 @@
byte[] serializedSession = null;
serializedRulebase = null;
baos = new ByteArrayOutputStream();
- marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session,
- baos,
- marshaller );
+ ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
+ marshaller.marshall( baos, ksession );
+ baos.close();
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
// Deserialize the rulebase and the session
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
- marshaller ); // throws java.lang.ClassNotFoundException Exception
+ marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
+ ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession ) ksession.session;
results.clear();
session.setGlobal( "results",
results );
@@ -980,6 +1024,7 @@
session = SerializationHelper.getSerialisedStatefulSession( session,
ruleBase );
+
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -1426,85 +1471,89 @@
rule1 += " list.add( new Integer( 5 ) );\n";
rule1 += "end\n";
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new StringReader( header + rule1 ) );
- final Package pkg = builder.getPackage();
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( (header + rule1 ).getBytes() ), ResourceType.DRL ) ;
+
+ if ( kbuilder.hasErrors() ) {
+ fail( kbuilder.getErrors().toString() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
- final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage( pkg );
- StatefulSession session = ruleBase.newStatefulSession();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List list = new ArrayList();
- session.setGlobal( "list",
+ ksession.setGlobal( "list",
list );
// add a person, no cheese
- session = getSerialisedStatefulSession( session );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
Person bobba = new Person( "bobba fet",
50 );
- session.insert( bobba );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.insert( bobba );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 1,
list.size() );
// add another person, no cheese
- session = getSerialisedStatefulSession( session );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
Person darth = new Person( "darth vadar",
200 );
- session.insert( darth );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.insert( darth );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 2,
list.size() );
// add cheese
- session = getSerialisedStatefulSession( session );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
Cheese stilton = new Cheese( "stilton",
5 );
- session.insert( stilton );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.insert( stilton );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 2,
list.size() );
// remove cheese
- session = getSerialisedStatefulSession( session );
- session.retract( session.getFactHandle( stilton ) );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.retract( ksession.getFactHandle( stilton ) );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 4,
list.size() );
// put 2 cheeses back in
- session = getSerialisedStatefulSession( session );
- session.insert( stilton );
- session = getSerialisedStatefulSession( session );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.insert( stilton );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
Cheese brie = new Cheese( "brie",
18 );
- session.insert( brie );
- session.fireAllRules();
+ ksession.insert( brie );
+ ksession.fireAllRules();
assertEquals( 4,
list.size() );
// now remove a cheese, should be no change
- session.retract( session.getFactHandle( stilton ) );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.retract( ksession.getFactHandle( stilton ) );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 4,
list.size() );
// now remove a person, should be no change
- session.retract( session.getFactHandle( bobba ) );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.retract( ksession.getFactHandle( bobba ) );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 4,
list.size() );
//removal remaining cheese, should increase by one, as one person left
- session.retract( session.getFactHandle( brie ) );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.retract( ksession.getFactHandle( brie ) );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 5,
list.size() );
}
@@ -1525,92 +1574,96 @@
rule1 += " list.add( new Integer( 5 ) );\n";
rule1 += "end\n";
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new StringReader( header + rule1 ) );
- final Package pkg = builder.getPackage();
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( (header + rule1 ).getBytes() ), ResourceType.DRL ) ;
+
+ if ( kbuilder.hasErrors() ) {
+ fail( kbuilder.getErrors().toString() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
- final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage( pkg );
- StatefulSession session = ruleBase.newStatefulSession();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List list = new ArrayList();
- session.setGlobal( "list",
+ ksession.setGlobal( "list",
list );
// add a person, no cheese
- session = getSerialisedStatefulSession( session );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
Person bobba = new Person( "bobba fet",
50 );
- session.insert( bobba );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.insert( bobba );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 0,
list.size() );
// add another person, no cheese
- session = getSerialisedStatefulSession( session );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
Person darth = new Person( "darth vadar",
200 );
- session.insert( darth );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.insert( darth );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 0,
list.size() );
// add cheese
- session = getSerialisedStatefulSession( session );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
Cheese stilton = new Cheese( "stilton",
5 );
- session.insert( stilton );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.insert( stilton );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 2,
list.size() );
// remove cheese
- session = getSerialisedStatefulSession( session );
- session.retract( session.getFactHandle( stilton ) );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.retract( ksession.getFactHandle( stilton ) );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 2,
list.size() );
// put 2 cheeses back in
- session = getSerialisedStatefulSession( session );
- session.insert( stilton );
- session = getSerialisedStatefulSession( session );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.insert( stilton );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
Cheese brie = new Cheese( "brie",
18 );
- session.insert( brie );
- session.fireAllRules();
+ ksession.insert( brie );
+ ksession.fireAllRules();
assertEquals( 4,
list.size() );
// now remove a cheese, should be no change
- session.retract( session.getFactHandle( stilton ) );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.retract( ksession.getFactHandle( stilton ) );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 4,
list.size() );
// now remove a person, should be no change
- session.retract( session.getFactHandle( bobba ) );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.retract( ksession.getFactHandle( bobba ) );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 4,
list.size() );
//removal remaining cheese, no
- session.retract( session.getFactHandle( brie ) );
- session = getSerialisedStatefulSession( session );
- session.fireAllRules();
+ ksession.retract( ksession.getFactHandle( brie ) );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.fireAllRules();
assertEquals( 4,
list.size() );
// put one cheese back in, with one person should increase by one
- session = getSerialisedStatefulSession( session );
- session.insert( stilton );
- session.fireAllRules();
+ ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession.insert( stilton );
+ ksession.fireAllRules();
assertEquals( 5,
list.size() );
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -117,11 +117,14 @@
import org.drools.event.WorkingMemoryEventListener;
import org.drools.facttemplates.Fact;
import org.drools.facttemplates.FactTemplate;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.io.ResourceFactory;
import org.drools.lang.DrlDumper;
import org.drools.lang.descr.AttributeDescr;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.RuleDescr;
+import org.drools.marshalling.MarshallerFactory;
+import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.rule.InvalidRulePackage;
import org.drools.rule.Package;
import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
@@ -131,6 +134,8 @@
import org.drools.spi.GlobalResolver;
import org.drools.xml.XmlDumper;
+import com.thoughtworks.xstream.MarshallingStrategy;
+
/** Run all the tests with the ReteOO engine implementation */
public class MiscTest extends TestCase {
@@ -1506,10 +1511,11 @@
((List) session.getGlobal( "list" )).size() );
state.setState( "finished" );
+
+
+ StatefulKnowledgeSession ksesion = SerializationHelper.getSerialisedStatefulKnowledgeSession( new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) session), MarshallerFactory.newIdentityMarshallingStrategy(), false );
- session = SerializationHelper.getSerialisedStatefulSession( session,
- ruleBase );
- session.fireAllRules();
+ ksesion.fireAllRules();
assertEquals( 3,
((List) session.getGlobal( "list" )).size() );
@@ -1682,18 +1688,23 @@
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "evalmodify.drl" ) ) );
+
+ if ( builder.hasErrors() ) {
+ fail( builder.getErrors().toString() );
+ }
RuleBase ruleBase = getRuleBase();
- ruleBase.addPackage( builder.getPackage() );
+ Package pkg = builder.getPackage();
+ ruleBase.addPackage( pkg );
ruleBase = SerializationHelper.serializeObject( ruleBase );
StatefulSession session = ruleBase.newStatefulSession();
session.insert( cell1 );
FactHandle cellHandle = session.insert( cell );
- session = SerializationHelper.getSerialisedStatefulSession( session,
- ruleBase );
- session.fireAllRules();
+ StatefulKnowledgeSession ksesion = SerializationHelper.getSerialisedStatefulKnowledgeSession( new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) session), MarshallerFactory.newIdentityMarshallingStrategy(), false );
+
+ ksesion.fireAllRules();
assertEquals( 9,
cell.getValue() );
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -19,12 +19,16 @@
import org.drools.StatefulSession;
import org.drools.compiler.PackageBuilder;
import org.drools.impl.EnvironmentFactory;
-import org.drools.marshalling.DefaultMarshaller;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.marshalling.Marshaller;
+import org.drools.marshalling.MarshallerFactory;
+import org.drools.marshalling.impl.DefaultMarshaller;
import org.drools.process.core.context.variable.VariableScope;
import org.drools.process.instance.ProcessInstance;
import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.rule.Package;
+import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.WorkItem;
import org.drools.runtime.process.WorkItemHandler;
import org.drools.runtime.process.WorkItemManager;
@@ -539,17 +543,19 @@
session.startProcess("com.sample.ruleflow", null);
assertEquals(1, session.getProcessInstances().size());
- Marshaller marshaller = new DefaultMarshaller();
+ StatefulKnowledgeSession ksession = new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) session );
+ Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ruleBase.writeStatefulSession(session, baos, marshaller);
+ marshaller.marshall( baos, ksession );
byte[] b1 = baos.toByteArray();
session.halt();
session.dispose();
Thread.sleep(400);
- ByteArrayInputStream bais = new ByteArrayInputStream( b1 );
- final StatefulSession session2 = ruleBase.readStatefulSession(bais, true, marshaller, new SessionConfiguration(), EnvironmentFactory.newEnvironment());
+ ByteArrayInputStream bais = new ByteArrayInputStream( b1 );
+ final StatefulSession session2 = ( StatefulSession ) (( StatefulKnowledgeSessionImpl) marshaller.unmarshall( bais ) ).session;
new Thread(new Runnable() {
public void run() {
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializationHelper.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -3,12 +3,23 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import org.drools.KnowledgeBase;
import org.drools.RuleBase;
+import org.drools.SessionConfiguration;
import org.drools.StatefulSession;
import org.drools.common.InternalWorkingMemory;
-import org.drools.marshalling.DefaultMarshaller;
+import org.drools.impl.EnvironmentFactory;
+import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.marshalling.Marshaller;
+import org.drools.marshalling.MarshallerFactory;
+import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.marshalling.impl.DefaultMarshaller;
+import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.util.DroolsStreamUtils;
/**
@@ -50,33 +61,32 @@
public static StatefulSession getSerialisedStatefulSession(StatefulSession session,
RuleBase ruleBase,
boolean dispose) throws Exception {
- Marshaller marshaller = new DefaultMarshaller();
+ // Serialize to a byte array
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutput out = new ObjectOutputStream( bos );
+ out.writeObject( session );
+ out.close();
+ bos.close();
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ruleBase.writeStatefulSession( session,
- baos,
- marshaller );
+ // Get the bytes of the serialized object
+ final byte[] b1 = bos.toByteArray();
- byte[] b1 = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream( b1 );
- StatefulSession session2 = ruleBase.readStatefulSession( bais,
- true,
- marshaller,
- ((InternalWorkingMemory) session).getSessionConfiguration(),
- session.getEnvironment());
+ StatefulSession session2 = ruleBase.newStatefulSession( bais );
+ bais.close();
- // write methods allways needs a new marshaller for Identity strategies
- marshaller = new DefaultMarshaller();
- baos = new ByteArrayOutputStream();
- ruleBase.writeStatefulSession( session2,
- baos,
- marshaller );
+ bos = new ByteArrayOutputStream();
+ out = new ObjectOutputStream( bos );
+ out.writeObject( session2 );
+ out.close();
+ bos.close();
- byte[] b2 = baos.toByteArray();
+ final byte[] b2 = bos.toByteArray();
+
// bytes should be the same.
if ( !areByteArraysEqual( b1,
b2 ) ) {
- throw new IllegalArgumentException("byte streams for serialisation test are not equal");
+ throw new IllegalArgumentException( "byte streams for serialisation test are not equal" );
}
session2.setGlobalResolver( session.getGlobalResolver() );
@@ -88,6 +98,51 @@
return session2;
}
+ public static StatefulKnowledgeSession getSerialisedStatefulKnowledgeSession(StatefulKnowledgeSession ksession,
+ boolean dispose) throws Exception {
+
+ return getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newSerializeMarshallingStrategy(), dispose);
+ }
+
+ public static StatefulKnowledgeSession getSerialisedStatefulKnowledgeSession(StatefulKnowledgeSession ksession,
+ ObjectMarshallingStrategy strategy,
+ boolean dispose) throws Exception {
+
+ Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase(), new ObjectMarshallingStrategy[]{ strategy } );
+
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ marshaller.marshall( bos,
+ ksession );
+ final byte[] b1 = bos.toByteArray();
+ bos.close();
+
+ ByteArrayInputStream bais = new ByteArrayInputStream( b1 );
+ StatefulKnowledgeSession ksession2 = marshaller.unmarshall( bais,
+ new SessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ bais.close();
+
+ bos = new ByteArrayOutputStream();
+ marshaller.marshall( bos,
+ ksession2 );
+ final byte[] b2 = bos.toByteArray();
+ bos.close();
+
+ // bytes should be the same.
+ if ( !areByteArraysEqual( b1,
+ b2 ) ) {
+ throw new IllegalArgumentException( "byte streams for serialisation test are not equal" );
+ }
+
+ ((StatefulKnowledgeSessionImpl) ksession2).session.setGlobalResolver( ((StatefulKnowledgeSessionImpl) ksession).session.getGlobalResolver() );
+
+ if ( dispose ) {
+ ksession.dispose();
+ }
+
+ return ksession2;
+ }
+
public static boolean areByteArraysEqual(byte[] b1,
byte[] b2) {
if ( b1.length != b2.length ) {
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -59,12 +59,6 @@
return null;
}
- public StatefulSession newStatefulSession(InputStream stream)
- throws IOException, ClassNotFoundException {
- // TODO Auto-generated method stub
- return null;
- }
-
public StatefulSession readStatefulSession(InputStream stream,
boolean keepReference) throws IOException, ClassNotFoundException {
// TODO Auto-generated method stub
@@ -173,4 +167,15 @@
// TODO Auto-generated method stub
return null;
}
+
+ public StatefulSession newStatefulSession(InputStream stream,
+ boolean keepReference) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public StatefulSession newStatefulSession(InputStream stream) {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
Modified: labs/jbossrules/trunk/drools-core/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-core/.classpath 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/.classpath 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,21 +1,20 @@
-<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" path="src/main/java"/>
- <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
- <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
- <classpathentry excluding="**/*.java" including="**" kind="src" output="target/test-classes" path="src/test/resources"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
- <classpathentry kind="src" path="/drools-api"/>
- <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"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
- <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/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"/>
- <classpathentry combineaccessrules="false" kind="src" path="/mvel"/>
- <classpathentry kind="output" path="target/classes"/>
-</classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+ <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+ <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
+ <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
+ <classpathentry kind="src" path="/drools-api"/>
+ <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"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
+ <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.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"/>
+</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -22,6 +22,7 @@
import java.io.OutputStream;
import org.drools.definition.type.FactType;
+import org.drools.impl.EnvironmentFactory;
import org.drools.marshalling.Marshaller;
import org.drools.rule.Package;
import org.drools.runtime.Environment;
@@ -67,6 +68,11 @@
StatefulSession newStatefulSession();
StatefulSession newStatefulSession(boolean keepReference);
+
+ StatefulSession newStatefulSession(java.io.InputStream stream);
+
+ StatefulSession newStatefulSession(java.io.InputStream stream,
+ boolean keepReference);
/**
* Create a new <code>WorkingMemory</code> session for this
@@ -82,37 +88,6 @@
*/
StatefulSession newStatefulSession(SessionConfiguration config, Environment environment);
- StatefulSession readStatefulSession(InputStream stream,
- Marshaller marshaller) throws IOException,
- ClassNotFoundException;
-
- /**
- * RuleBases handle the returning of a Serialized WorkingMemory
- * pass as an InputStream. If the reference is a byte[] then
- * wrap with new ByteArrayInputStream. Optionally the RuleBase retains a
- * weak reference to returned WorkingMemory.
- *
- * <p>
- * The created <code>WorkingMemory</code> uses the default conflict
- * resolution strategy.
- * </p>
- *
- * @see WorkingMemory
- * @see org.drools.conflict.DefaultConflictResolver
- *
- * @return A serialised initialized <code>WorkingMemory</code>.
- */
- StatefulSession readStatefulSession(InputStream stream,
- boolean keepReference,
- Marshaller marshaller,
- SessionConfiguration sessionConfig,
- Environment environment) throws IOException,
- ClassNotFoundException;
-
- public void writeStatefulSession(StatefulSession session,
- OutputStream stream,
- Marshaller marshaller) throws IOException;
-
Package[] getPackages();
Package getPackage(String name);
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-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SessionConfiguration.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -340,15 +340,15 @@
}
}
- public CommandService getCommandService(RuleBase ruleBase, Environment environment) {
+ public CommandService getCommandService(KnowledgeBase kbase, Environment environment) {
if ( this.commandService == null ) {
- initCommandService(ruleBase, environment);
+ initCommandService(kbase, environment);
}
return this.commandService;
}
@SuppressWarnings("unchecked")
- private void initCommandService(RuleBase ruleBase, Environment environment) {
+ private void initCommandService(KnowledgeBase kbase, Environment environment) {
String className = this.chainedProperties.getProperty( "drools.commandService", null );
if (className == null) {
return;
@@ -369,7 +369,7 @@
if ( clazz != null ) {
try {
- this.commandService = clazz.getConstructor(RuleBase.class, SessionConfiguration.class, Environment.class).newInstance(ruleBase, this, environment);
+ this.commandService = clazz.getConstructor(KnowledgeBase.class, KnowledgeSessionConfiguration.class, Environment.class).newInstance(kbase, 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/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -344,15 +344,6 @@
}
}
- public StatefulSession readStatefulSession(final InputStream stream,
- Marshaller marshaller) throws IOException,
- ClassNotFoundException {
- return readStatefulSession( stream,
- true,
- marshaller,
- new SessionConfiguration(),
- EnvironmentFactory.newEnvironment() );
- }
/**
* @see RuleBase
@@ -804,7 +795,7 @@
return process;
}
- protected synchronized void addStatefulSession(final StatefulSession statefulSession) {
+ public synchronized void addStatefulSession(final StatefulSession statefulSession) {
this.statefulSessions.add( statefulSession );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -22,8 +22,8 @@
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
-import org.drools.marshalling.MarshallerReaderContext;
-import org.drools.marshalling.MarshallerWriteContext;
+import org.drools.marshalling.impl.MarshallerReaderContext;
+import org.drools.marshalling.impl.MarshallerWriteContext;
import org.drools.spi.Activation;
import org.drools.util.Iterator;
import org.drools.util.LinkedList;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -24,8 +24,8 @@
import java.util.Set;
import org.drools.FactException;
-import org.drools.marshalling.MarshallerReaderContext;
-import org.drools.marshalling.MarshallerWriteContext;
+import org.drools.marshalling.impl.MarshallerReaderContext;
+import org.drools.marshalling.impl.MarshallerWriteContext;
import org.drools.rule.Rule;
import org.drools.spi.Activation;
import org.drools.spi.PropagationContext;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/WorkingMemoryAction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/WorkingMemoryAction.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/WorkingMemoryAction.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -6,7 +6,7 @@
import java.io.Externalizable;
import java.io.IOException;
-import org.drools.marshalling.MarshallerWriteContext;
+import org.drools.marshalling.impl.MarshallerWriteContext;
public interface WorkingMemoryAction extends Externalizable {
public static final int WorkingMemoryReteAssertAction = 1;
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-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -144,7 +144,7 @@
environment = EnvironmentFactory.newEnvironment();
}
- CommandService commandService = ((SessionConfiguration) conf).getCommandService(this.ruleBase, environment);
+ CommandService commandService = ((SessionConfiguration) conf).getCommandService(this, environment);
if (commandService != null) {
return new CommandBasedStatefulKnowledgeSession(commandService);
} else {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -50,6 +50,7 @@
import org.drools.event.rule.impl.ObjectRetractedEventImpl;
import org.drools.event.rule.impl.ObjectUpdatedEventImpl;
import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.runtime.Environment;
import org.drools.runtime.ExitPoint;
import org.drools.runtime.Globals;
import org.drools.runtime.StatefulKnowledgeSession;
@@ -76,14 +77,14 @@
public StatefulKnowledgeSessionImpl(ReteooWorkingMemory session) {
this( session,
- null );
+ new KnowledgeBaseImpl( session.getRuleBase() ) );
}
public StatefulKnowledgeSessionImpl(ReteooWorkingMemory session,
- KnowledgeBaseImpl kbase) {
+ KnowledgeBase kbase) {
this.session = session;
this.session.setKnowledgeRuntime( this );
- this.kbase = kbase;
+ this.kbase = ( KnowledgeBaseImpl ) kbase;
this.mappedWorkingMemoryListeners = new IdentityHashMap<WorkingMemoryEventListener, WorkingMemoryEventListenerWrapper>();
this.mappedAgendaListeners = new IdentityHashMap<AgendaEventListener, AgendaEventListenerWrapper>();
this.mappedProcessListeners = new IdentityHashMap<ProcessEventListener, ProcessEventListenerWrapper>();
@@ -251,6 +252,10 @@
public Globals getGlobals() {
return (Globals) this.session.getGlobalResolver();
}
+
+ public Environment getEnvironment() {
+ return this.session.getEnvironment();
+ }
// public Future<Object> asyncInsert(Object object) {
// return new FutureAdapter( this.session.asyncInsert( object ) );
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/AbstractProcessInstanceMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/AbstractProcessInstanceMarshaller.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/AbstractProcessInstanceMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,344 +0,0 @@
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.drools.common.InternalRuleBase;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.process.core.context.swimlane.SwimlaneContext;
-import org.drools.process.core.context.variable.VariableScope;
-import org.drools.process.instance.context.swimlane.SwimlaneContextInstance;
-import org.drools.process.instance.context.variable.VariableScopeInstance;
-import org.drools.process.instance.impl.ProcessInstanceImpl;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
-import org.drools.runtime.process.NodeInstance;
-import org.drools.runtime.process.NodeInstanceContainer;
-import org.drools.runtime.process.ProcessInstance;
-import org.drools.workflow.instance.WorkflowProcessInstance;
-import org.drools.workflow.instance.impl.NodeInstanceImpl;
-import org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl;
-import org.drools.workflow.instance.node.CompositeContextNodeInstance;
-import org.drools.workflow.instance.node.ForEachNodeInstance;
-import org.drools.workflow.instance.node.HumanTaskNodeInstance;
-import org.drools.workflow.instance.node.JoinInstance;
-import org.drools.workflow.instance.node.MilestoneNodeInstance;
-import org.drools.workflow.instance.node.RuleSetNodeInstance;
-import org.drools.workflow.instance.node.SubProcessNodeInstance;
-import org.drools.workflow.instance.node.TimerNodeInstance;
-import org.drools.workflow.instance.node.WorkItemNodeInstance;
-
-/* Author: mfossati, salaboy */
-public abstract class AbstractProcessInstanceMarshaller implements
- ProcessInstanceMarshaller {
-
- // Output methods
-
- public void writeProcessInstance(MarshallerWriteContext context,
- ProcessInstance processInstance) throws IOException {
-
- WorkflowProcessInstanceImpl workFlow = (WorkflowProcessInstanceImpl) processInstance;
- ObjectOutputStream stream = context.stream;
- stream.writeLong(workFlow.getId());
- stream.writeUTF(workFlow.getProcessId());
- stream.writeInt(workFlow.getState());
- stream.writeLong(workFlow.getNodeInstanceCounter());
-
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance) workFlow.getContextInstance( VariableScope.VARIABLE_SCOPE );
- Map<String, Object> variables = variableScopeInstance.getVariables();
- List<String> keys = new ArrayList<String>( variables.keySet() );
- Collections.sort( keys,
- new Comparator<String>() {
- public int compare(String o1,
- String o2) {
- return o1.compareTo( o2 );
- }
- } );
- stream.writeInt( keys.size() );
- for ( String key : keys ) {
- stream.writeUTF( key );
- stream.writeObject( variables.get( key ) );
- }
-
- SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) workFlow.getContextInstance( SwimlaneContext.SWIMLANE_SCOPE );
-
- if (swimlaneContextInstance!=null) {
- Map<String, String> swimlaneActors = swimlaneContextInstance
- .getSwimlaneActors();
- stream.writeInt(swimlaneActors.size());
- for (Map.Entry<String, String> entry : swimlaneActors.entrySet()) {
- stream.writeUTF(entry.getKey());
- stream.writeUTF(entry.getValue());
- }
- }
- List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( workFlow.getNodeInstances() );
- Collections.sort( nodeInstances,
- new Comparator<NodeInstance>() {
- public int compare(NodeInstance o1,
- NodeInstance o2) {
- return (int) (o1.getId() - o2.getId());
- }
- } );
- for ( NodeInstance nodeInstance : nodeInstances ) {
- stream.writeShort( PersisterEnums.NODE_INSTANCE );
- writeNodeInstance( context,
- nodeInstance );
- }
- stream.writeShort( PersisterEnums.END );
- }
-
- public void writeNodeInstance(MarshallerWriteContext context,
- NodeInstance nodeInstance) throws IOException {
- ObjectOutputStream stream = context.stream;
- stream.writeLong(nodeInstance.getId());
- stream.writeLong(nodeInstance.getNodeId());
- writeNodeInstanceContent(stream, nodeInstance, context);
- }
-
- protected void writeNodeInstanceContent(ObjectOutputStream stream,
- NodeInstance nodeInstance, MarshallerWriteContext context)
- throws IOException {
- if ( nodeInstance instanceof RuleSetNodeInstance ) {
- stream.writeShort( PersisterEnums.RULE_SET_NODE_INSTANCE );
- } else if ( nodeInstance instanceof HumanTaskNodeInstance ) {
- stream.writeShort( PersisterEnums.HUMAN_TASK_NODE_INSTANCE );
- stream.writeLong( ((HumanTaskNodeInstance) nodeInstance).getWorkItem().getId() );
- } else if ( nodeInstance instanceof WorkItemNodeInstance ) {
- stream.writeShort( PersisterEnums.WORK_ITEM_NODE_INSTANCE );
- stream.writeLong( ((WorkItemNodeInstance) nodeInstance).getWorkItem().getId() );
- } else if ( nodeInstance instanceof SubProcessNodeInstance ) {
- stream.writeShort( PersisterEnums.SUB_PROCESS_NODE_INSTANCE );
- stream.writeLong( ((SubProcessNodeInstance) nodeInstance).getProcessInstanceId() );
- } else if ( nodeInstance instanceof MilestoneNodeInstance ) {
- stream.writeShort( PersisterEnums.MILESTONE_NODE_INSTANCE );
- List<Long> timerInstances =
- ((MilestoneNodeInstance) nodeInstance).getTimerInstances();
- if (timerInstances != null) {
- stream.writeInt(timerInstances.size());
- for (Long id: timerInstances) {
- stream.writeLong(id);
- }
- } else {
- stream.writeInt(0);
- }
- } else if ( nodeInstance instanceof TimerNodeInstance ) {
- stream.writeShort( PersisterEnums.TIMER_NODE_INSTANCE );
- stream.writeLong( ((TimerNodeInstance) nodeInstance).getTimerId() );
- } else if ( nodeInstance instanceof JoinInstance ) {
- stream.writeShort( PersisterEnums.JOIN_NODE_INSTANCE );
- Map<Long, Integer> triggers = ((JoinInstance) nodeInstance).getTriggers();
- stream.writeInt( triggers.size() );
- List<Long> keys = new ArrayList<Long>( triggers.keySet() );
- Collections.sort( keys,
- new Comparator<Long>() {
- public int compare(Long o1,
- Long o2) {
- return o1.compareTo( o2 );
- }
- } );
- for ( Long key : keys ) {
- stream.writeLong( key );
- stream.writeInt( triggers.get( key ) );
- }
- } else if ( nodeInstance instanceof CompositeContextNodeInstance ) {
- stream.writeShort( PersisterEnums.COMPOSITE_NODE_INSTANCE );
- CompositeContextNodeInstance compositeNodeInstance = (CompositeContextNodeInstance) nodeInstance;
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance) compositeNodeInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
- Map<String, Object> variables = variableScopeInstance.getVariables();
- List<String> keys = new ArrayList<String>( variables.keySet() );
- Collections.sort( keys,
- new Comparator<String>() {
- public int compare(String o1,
- String o2) {
- return o1.compareTo( o2 );
- }
- } );
- stream.writeInt( keys.size() );
- for ( String key : keys ) {
- stream.writeUTF( key );
- stream.writeObject( variables.get( key ) );
- }
- List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( compositeNodeInstance.getNodeInstances() );
- Collections.sort( nodeInstances,
- new Comparator<NodeInstance>() {
- public int compare(NodeInstance o1,
- NodeInstance o2) {
- return (int) (o1.getId() - o2.getId());
- }
- } );
- for ( NodeInstance subNodeInstance : nodeInstances ) {
- stream.writeShort( PersisterEnums.NODE_INSTANCE );
- writeNodeInstance( context,
- subNodeInstance );
- }
- stream.writeShort( PersisterEnums.END );
- } else if ( nodeInstance instanceof ForEachNodeInstance ) {
- stream.writeShort( PersisterEnums.FOR_EACH_NODE_INSTANCE );
- ForEachNodeInstance forEachNodeInstance = (ForEachNodeInstance) nodeInstance;
- List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( forEachNodeInstance.getNodeInstances() );
- Collections.sort( nodeInstances,
- new Comparator<NodeInstance>() {
- public int compare(NodeInstance o1,
- NodeInstance o2) {
- return (int) (o1.getId() - o2.getId());
- }
- } );
- for ( NodeInstance subNodeInstance : nodeInstances ) {
- if ( subNodeInstance instanceof CompositeContextNodeInstance ) {
- stream.writeShort( PersisterEnums.NODE_INSTANCE );
- writeNodeInstance( context,
- subNodeInstance );
- }
- }
- stream.writeShort( PersisterEnums.END );
- } else {
- // TODO ForEachNodeInstance
- // TODO timer manager
- throw new IllegalArgumentException( "Unknown node instance type: " + nodeInstance );
- }
- }
-
- // Input methods
-
- public ProcessInstance readProcessInstance(MarshallerReaderContext context)
- throws IOException {
- ObjectInputStream stream = context.stream;
- InternalRuleBase ruleBase = context.ruleBase;
- InternalWorkingMemory wm = context.wm;
-
- RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance();
- processInstance.setId( stream.readLong() );
- String processId = stream.readUTF();
- processInstance.setProcessId( processId );
- if ( ruleBase != null ) {
- processInstance.setProcess( ruleBase.getProcess( processId ) );
- }
- processInstance.setState( stream.readInt() );
- long nodeInstanceCounter = stream.readLong();
- processInstance.setWorkingMemory( wm );
-
- int nbVariables = stream.readInt();
- if ( nbVariables > 0 ) {
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
- for ( int i = 0; i < nbVariables; i++ ) {
- String name = stream.readUTF();
- try {
- Object value = stream.readObject();
- variableScopeInstance.setVariable( name,
- value );
- } catch ( ClassNotFoundException e ) {
- throw new IllegalArgumentException( "Could not reload variable " + name );
- }
- }
- }
-
- int nbSwimlanes = stream.readInt();
- if ( nbSwimlanes > 0 ) {
- SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) processInstance.getContextInstance( SwimlaneContext.SWIMLANE_SCOPE );
- for ( int i = 0; i < nbSwimlanes; i++ ) {
- String name = stream.readUTF();
- String value = stream.readUTF();
- swimlaneContextInstance.setActorId( name,
- value );
- }
- }
-
- while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
- readNodeInstance( context,
- processInstance,
- processInstance );
- }
-
- processInstance.internalSetNodeInstanceCounter( nodeInstanceCounter );
- if ( wm != null ) {
- processInstance.reconnect();
- }
- return processInstance;
- }
-
- public NodeInstance readNodeInstance(MarshallerReaderContext context,
- NodeInstanceContainer nodeInstanceContainer,
- WorkflowProcessInstance processInstance) throws IOException {
- ObjectInputStream stream = context.stream;
- long id = stream.readLong();
- long nodeId = stream.readLong();
- int nodeType = stream.readShort();
- NodeInstanceImpl nodeInstance = readNodeInstanceContent(nodeType,
- stream, context, processInstance);
-
- nodeInstance.setNodeId(nodeId);
- nodeInstance.setNodeInstanceContainer(nodeInstanceContainer);
- nodeInstance.setProcessInstance(processInstance);
- nodeInstance.setId(id);
-
- return nodeInstance;
- }
-
- protected NodeInstanceImpl readNodeInstanceContent(int nodeType,
- ObjectInputStream stream, MarshallerReaderContext context,
- WorkflowProcessInstance processInstance) throws IOException {
- NodeInstanceImpl nodeInstance = null;
- switch ( nodeType ) {
- case PersisterEnums.RULE_SET_NODE_INSTANCE :
- nodeInstance = new RuleSetNodeInstance();
- break;
- case PersisterEnums.HUMAN_TASK_NODE_INSTANCE :
- nodeInstance = new HumanTaskNodeInstance();
- ((HumanTaskNodeInstance) nodeInstance).internalSetWorkItemId( stream.readLong() );
- break;
- case PersisterEnums.WORK_ITEM_NODE_INSTANCE :
- nodeInstance = new WorkItemNodeInstance();
- ((WorkItemNodeInstance) nodeInstance).internalSetWorkItemId( stream.readLong() );
- break;
- case PersisterEnums.SUB_PROCESS_NODE_INSTANCE :
- nodeInstance = new SubProcessNodeInstance();
- ((SubProcessNodeInstance) nodeInstance).internalSetProcessInstanceId( stream.readLong() );
- break;
- case PersisterEnums.MILESTONE_NODE_INSTANCE :
- nodeInstance = new MilestoneNodeInstance();
- int nbTimerInstances = stream.readInt();
- if (nbTimerInstances > 0) {
- List<Long> timerInstances = new ArrayList<Long>();
- for (int i = 0; i < nbTimerInstances; i++) {
- timerInstances.add(stream.readLong());
- }
- ((MilestoneNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances);
- }
- break;
- case PersisterEnums.TIMER_NODE_INSTANCE :
- nodeInstance = new TimerNodeInstance();
- ((TimerNodeInstance) nodeInstance).internalSetTimerId( stream.readLong() );
- break;
- case PersisterEnums.JOIN_NODE_INSTANCE :
- nodeInstance = new JoinInstance();
- int number = stream.readInt();
- if ( number > 0 ) {
- Map<Long, Integer> triggers = new HashMap<Long, Integer>();
- for ( int i = 0; i < number; i++ ) {
- long l = stream.readLong();
- int count = stream.readInt();
- triggers.put( l,
- count );
- }
- ((JoinInstance) nodeInstance).internalSetTriggers( triggers );
- }
- break;
- case PersisterEnums.COMPOSITE_NODE_INSTANCE :
- nodeInstance = new CompositeContextNodeInstance();
- break;
- case PersisterEnums.FOR_EACH_NODE_INSTANCE :
- nodeInstance = new ForEachNodeInstance();
- break;
- default :
- throw new IllegalArgumentException( "Unknown node type: " + nodeType );
- }
- return nodeInstance;
-
- }
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ClassPlaceholderResolverStrategyAcceptor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ClassPlaceholderResolverStrategyAcceptor.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ClassPlaceholderResolverStrategyAcceptor.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,29 +0,0 @@
-package org.drools.marshalling;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.drools.util.ClassUtils;
-
-public class ClassPlaceholderResolverStrategyAcceptor implements PlaceholderResolverStrategyAcceptor {
- private final Map<String, Object> patterns;
-
- public ClassPlaceholderResolverStrategyAcceptor(String str) {
- this.patterns = new HashMap<String, Object>();
- addPatterns(str);
- }
-
- public ClassPlaceholderResolverStrategyAcceptor() {
- this.patterns = new HashMap<String, Object>();
- }
-
- public void addPatterns(String str) {
-
- ClassUtils.addImportStylePatterns( this.patterns, str );
- }
-
- public boolean accept(Object object) {
- return ClassUtils.isMatched( this.patterns, object.getClass().getName() );
- }
-
-}
Deleted: 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-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,112 +0,0 @@
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.drools.RuleBaseConfiguration;
-import org.drools.SessionConfiguration;
-import org.drools.StatefulSession;
-import org.drools.common.InternalRuleBase;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.concurrent.ExecutorService;
-import org.drools.reteoo.ReteooStatefulSession;
-import org.drools.runtime.Environment;
-import org.drools.spi.GlobalResolver;
-
-public class DefaultMarshaller
- implements
- Marshaller {
- GlobalResolver globalResolver;
- RuleBaseConfiguration ruleBaseConfig;
- MarshallingConfiguration marshallingConfig;
- PlaceholderResolverStrategyFactory factory;
-
- public DefaultMarshaller() {
- this( null );
- }
-
- public DefaultMarshaller(RuleBaseConfiguration config) {
- this( config,
- new MarshallingConfigurationImpl() );
- }
-
- public DefaultMarshaller(RuleBaseConfiguration ruleBaseConfig,
- MarshallingConfiguration marshallingConfig) {
- this.ruleBaseConfig = (ruleBaseConfig != null) ? ruleBaseConfig : new RuleBaseConfiguration();
- this.marshallingConfig = marshallingConfig;
-
- if ( marshallingConfig.getPlaceholderResolverStrategyFactory() == null ) {
- this.factory = new PlaceholderResolverStrategyFactory();
- ClassPlaceholderResolverStrategyAcceptor acceptor = new ClassPlaceholderResolverStrategyAcceptor( "*.*" );
- IdentityPlaceholderResolverStrategy strategy = new IdentityPlaceholderResolverStrategy( acceptor );
- this.factory.addStrategy( strategy );
- } else {
- this.factory = marshallingConfig.getPlaceholderResolverStrategyFactory();
- }
-
- }
-
- /* (non-Javadoc)
- * @see org.drools.marshalling.Marshaller#read(java.io.InputStream, org.drools.common.InternalRuleBase, int, org.drools.concurrent.ExecutorService)
- */
- public ReteooStatefulSession read(final InputStream stream,
- final InternalRuleBase ruleBase,
- final int id,
- final ExecutorService executor,
- final SessionConfiguration config,
- final Environment environment) throws IOException,
- ClassNotFoundException {
- MarshallerReaderContext context = new MarshallerReaderContext( stream,
- ruleBase,
- RuleBaseNodes.getNodeMap( ruleBase ),
- factory,
- marshallingConfig.isMarshallProcessInstances(),
- marshallingConfig.isMarshallWorkItems() );
-
- ReteooStatefulSession session = InputMarshaller.readSession( context,
- id,
- executor,
- environment,
- config );
- context.close();
- return session;
-
- }
-
- public StatefulSession read(final InputStream stream,
- final InternalRuleBase ruleBase,
- StatefulSession session) throws IOException,
- ClassNotFoundException {
- MarshallerReaderContext context = new MarshallerReaderContext( stream,
- ruleBase,
- RuleBaseNodes.getNodeMap( ruleBase ),
- factory,
- marshallingConfig.isMarshallProcessInstances(),
- marshallingConfig.isMarshallWorkItems());
-
- session = InputMarshaller.readSession( (ReteooStatefulSession) session,
- context );
- context.close();
- return session;
-
- }
-
- /* (non-Javadoc)
- * @see org.drools.marshalling.Marshaller#write(java.io.OutputStream, org.drools.common.InternalRuleBase, org.drools.StatefulSession)
- */
- public void write(final OutputStream stream,
- final InternalRuleBase ruleBase,
- final StatefulSession session) throws IOException {
- MarshallerWriteContext context = new MarshallerWriteContext( stream,
- ruleBase,
- (InternalWorkingMemory) session,
- RuleBaseNodes.getNodeMap( ruleBase ),
- this.factory,
- marshallingConfig.isMarshallProcessInstances(),
- marshallingConfig.isMarshallWorkItems() );
- OutputMarshaller.writeSession( context );
- context.close();
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/IdentityPlaceholderResolverStrategy.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/IdentityPlaceholderResolverStrategy.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/IdentityPlaceholderResolverStrategy.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,48 +0,0 @@
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.IdentityHashMap;
-import java.util.Map;
-
-public class IdentityPlaceholderResolverStrategy
- implements
- PlaceholderResolverStrategy {
-
- private int index;
-
- private Map<Integer, Object> map;
-
- private PlaceholderResolverStrategyAcceptor acceptor;
-
- public IdentityPlaceholderResolverStrategy(PlaceholderResolverStrategyAcceptor acceptor) {
- this.acceptor = acceptor;
- this.map = new IdentityHashMap<Integer, Object>();
- }
-
- public int getIndex() {
- return this.index;
- }
-
- public void setIndex(int index) {
- this.index = index;
- }
-
- public ObjectPlaceholder read(ObjectInputStream os) throws IOException,
- ClassNotFoundException {
- int id = os.readInt();
- return new SerializablePlaceholder( map.get( id ));
- }
-
- public void write(ObjectOutputStream os,
- Object object) throws IOException {
- Integer id = map.size();
- map.put( id, object );
- os.writeInt( id );
- }
-
- public boolean accept(Object object) {
- return this.acceptor.accept( object );
- }
-}
Deleted: 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-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,1022 +0,0 @@
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Queue;
-
-import org.drools.RuntimeDroolsException;
-import org.drools.SessionConfiguration;
-import org.drools.base.ClassObjectType;
-import org.drools.common.AgendaItem;
-import org.drools.common.BaseNode;
-import org.drools.common.BinaryHeapQueueAgendaGroup;
-import org.drools.common.DefaultAgenda;
-import org.drools.common.DefaultFactHandle;
-import org.drools.common.EqualityKey;
-import org.drools.common.InternalAgendaGroup;
-import org.drools.common.InternalFactHandle;
-import org.drools.common.InternalRuleBase;
-import org.drools.common.InternalRuleFlowGroup;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.common.NodeMemory;
-import org.drools.common.PropagationContextImpl;
-import org.drools.common.RuleFlowGroupImpl;
-import org.drools.common.TruthMaintenanceSystem;
-import org.drools.concurrent.ExecutorService;
-import org.drools.impl.EnvironmentFactory;
-import org.drools.process.core.context.swimlane.SwimlaneContext;
-import org.drools.process.core.context.variable.VariableScope;
-import org.drools.process.instance.ProcessInstance;
-import org.drools.process.instance.WorkItem;
-import org.drools.process.instance.WorkItemManager;
-import org.drools.process.instance.context.swimlane.SwimlaneContextInstance;
-import org.drools.process.instance.context.variable.VariableScopeInstance;
-import org.drools.process.instance.impl.WorkItemImpl;
-import org.drools.process.instance.timer.TimerInstance;
-import org.drools.process.instance.timer.TimerManager;
-import org.drools.reteoo.BetaMemory;
-import org.drools.reteoo.BetaNode;
-import org.drools.reteoo.EntryPointNode;
-import org.drools.reteoo.EvalConditionNode;
-import org.drools.reteoo.InitialFactHandle;
-import org.drools.reteoo.InitialFactHandleDummyObject;
-import org.drools.reteoo.LeftTuple;
-import org.drools.reteoo.LeftTupleSink;
-import org.drools.reteoo.NodeTypeEnums;
-import org.drools.reteoo.ObjectTypeNode;
-import org.drools.reteoo.ReteooStatefulSession;
-import org.drools.reteoo.ReteooWorkingMemory;
-import org.drools.reteoo.RightTuple;
-import org.drools.reteoo.RightTupleSink;
-import org.drools.reteoo.RuleTerminalNode;
-import org.drools.reteoo.AccumulateNode.AccumulateContext;
-import org.drools.reteoo.AccumulateNode.AccumulateMemory;
-import org.drools.reteoo.CollectNode.CollectContext;
-import org.drools.reteoo.CollectNode.CollectMemory;
-import org.drools.reteoo.EvalConditionNode.EvalMemory;
-import org.drools.reteoo.RuleTerminalNode.TerminalNodeMemory;
-import org.drools.rule.EntryPoint;
-import org.drools.rule.GroupElement;
-import org.drools.rule.Package;
-import org.drools.rule.Rule;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
-import org.drools.runtime.Environment;
-import org.drools.runtime.process.NodeInstance;
-import org.drools.runtime.process.NodeInstanceContainer;
-import org.drools.spi.Activation;
-import org.drools.spi.AgendaGroup;
-import org.drools.spi.FactHandleFactory;
-import org.drools.spi.ObjectType;
-import org.drools.spi.PropagationContext;
-import org.drools.spi.RuleFlowGroup;
-import org.drools.util.ObjectHashMap;
-import org.drools.util.ObjectHashSet;
-import org.drools.workflow.instance.impl.NodeInstanceImpl;
-import org.drools.workflow.instance.node.CompositeContextNodeInstance;
-import org.drools.workflow.instance.node.ForEachNodeInstance;
-import org.drools.workflow.instance.node.HumanTaskNodeInstance;
-import org.drools.workflow.instance.node.JoinInstance;
-import org.drools.workflow.instance.node.MilestoneNodeInstance;
-import org.drools.workflow.instance.node.RuleSetNodeInstance;
-import org.drools.workflow.instance.node.SubProcessNodeInstance;
-import org.drools.workflow.instance.node.TimerNodeInstance;
-import org.drools.workflow.instance.node.WorkItemNodeInstance;
-
-public class InputMarshaller {
- /**
- * Stream the data into an existing session
- *
- * @param session
- * @param context
- * @param id
- * @param executor
- * @return
- * @throws IOException
- * @throws ClassNotFoundException
- */
- public static ReteooStatefulSession readSession(ReteooStatefulSession session,
- MarshallerReaderContext context) throws IOException,
- ClassNotFoundException {
- boolean multithread = context.readBoolean();
- int handleId = context.readInt();
- long handleCounter = context.readLong();
- long propagationCounter = context.readLong();
-
- // these are for the InitialFactHandle, on a reset we just ignore
- context.readInt();
- context.readLong();
-
- session.reset( handleId,
- handleCounter,
- propagationCounter );
- DefaultAgenda agenda = (DefaultAgenda) session.getAgenda();
-
- readAgenda( context,
- agenda );
-
- context.wm = session;
-
- readFactHandles( context );
-
- readActionQueue( context );
-
- if ( context.readBoolean() ) {
- readTruthMaintenanceSystem( context );
- }
-
- if ( context.marshalProcessInstances ) {
- readProcessInstances( context );
- }
-
- if ( context.marshalWorkItems ) {
- readWorkItems( context );
- }
-
- readTimers( context );
-
- if( multithread ) {
- session.startPartitionManagers();
- }
-
- return session;
- }
-
- /**
- * Create a new session into which to read the stream data
- * @param context
- * @param id
- * @param executor
- * @return
- * @throws IOException
- * @throws ClassNotFoundException
- */
- public static ReteooStatefulSession readSession(MarshallerReaderContext context,
- int id,
- ExecutorService executor) throws IOException,
- ClassNotFoundException {
- return readSession( context, id, executor, EnvironmentFactory.newEnvironment(), new SessionConfiguration() );
- }
-
- public static ReteooStatefulSession readSession(MarshallerReaderContext context,
- int id,
- ExecutorService executor,
- Environment environment,
- SessionConfiguration config) throws IOException,
- ClassNotFoundException {
-
- boolean multithread = context.readBoolean();
-
- FactHandleFactory handleFactory = context.ruleBase.newFactHandleFactory( context.readInt(),
- context.readLong() );
-
- InitialFactHandle initialFactHandle = new InitialFactHandle( new DefaultFactHandle( context.readInt(), //id
- new InitialFactHandleDummyObject(),
- context.readLong() ) ); //recency
- context.handles.put( initialFactHandle.getId(),
- initialFactHandle );
-
- long propagationCounter = context.readLong();
-
- DefaultAgenda agenda = new DefaultAgenda( context.ruleBase,
- false );
- readAgenda( context,
- agenda );
- ReteooStatefulSession session = new ReteooStatefulSession( id,
- context.ruleBase,
- executor,
- handleFactory,
- initialFactHandle,
- propagationCounter,
- config,
- agenda,
- environment );
-
- // RuleFlowGroups need to reference the session
- for ( RuleFlowGroup group : agenda.getRuleFlowGroupsMap().values() ) {
- ((RuleFlowGroupImpl) group).setWorkingMemory( session );
- }
- context.wm = session;
-
- readFactHandles( context );
-
- readActionQueue( context );
-
- if ( context.readBoolean() ) {
- readTruthMaintenanceSystem( context );
- }
-
- if ( context.marshalProcessInstances ) {
- readProcessInstances( context );
- }
-
- if ( context.marshalWorkItems ) {
- readWorkItems( context );
- }
-
- readTimers( context );
-
- if( multithread ) {
- session.startPartitionManagers();
- }
-
- return session;
- }
-
- public static void readAgenda(MarshallerReaderContext context,
- DefaultAgenda agenda) throws IOException {
- ObjectInputStream stream = context.stream;
- while ( stream.readShort() == PersisterEnums.AGENDA_GROUP ) {
- BinaryHeapQueueAgendaGroup group = new BinaryHeapQueueAgendaGroup( stream.readUTF(),
- context.ruleBase );
- group.setActive( stream.readBoolean() );
- agenda.getAgendaGroupsMap().put( group.getName(),
- group );
- }
-
- while ( stream.readShort() == PersisterEnums.AGENDA_GROUP ) {
- String agendaGroupName = stream.readUTF();
- agenda.getStackList().add( agenda.getAgendaGroup( agendaGroupName ) );
- }
-
- while ( stream.readShort() == PersisterEnums.RULE_FLOW_GROUP ) {
- String rfgName = stream.readUTF();
- boolean active = stream.readBoolean();
- boolean autoDeactivate = stream.readBoolean();
- RuleFlowGroup rfg = new RuleFlowGroupImpl( rfgName,
- active,
- autoDeactivate );
- agenda.getRuleFlowGroupsMap().put( rfgName,
- rfg );
- }
-
- }
-
- public static void readActionQueue(MarshallerReaderContext context) throws IOException, ClassNotFoundException {
- ReteooWorkingMemory wm = (ReteooWorkingMemory) context.wm;
- Queue actionQueue = wm.getActionQueue();
- while ( context.readShort() == PersisterEnums.WORKING_MEMORY_ACTION ) {
- actionQueue.offer( PersisterHelper.readWorkingMemoryAction( context ) );
- }
- }
-
- public static void readTruthMaintenanceSystem(MarshallerReaderContext context) throws IOException {
- ObjectInputStream stream = context.stream;
-
- TruthMaintenanceSystem tms = context.wm.getTruthMaintenanceSystem();
- while ( stream.readShort() == PersisterEnums.EQUALITY_KEY ) {
- int status = stream.readInt();
- int factHandleId = stream.readInt();
- InternalFactHandle handle = (InternalFactHandle) context.handles.get( factHandleId );
- EqualityKey key = new EqualityKey( handle,
- status );
- handle.setEqualityKey( key );
- while ( stream.readShort() == PersisterEnums.FACT_HANDLE ) {
- factHandleId = stream.readInt();
- handle = (InternalFactHandle) context.handles.get( factHandleId );
- key.addFactHandle( handle );
- handle.setEqualityKey( key );
- }
- tms.put( key );
- }
- }
-
- public static void readFactHandles(MarshallerReaderContext context) throws IOException,
- ClassNotFoundException {
- ObjectInputStream stream = context.stream;
- InternalRuleBase ruleBase = context.ruleBase;
- PlaceholderResolverStrategyFactory resolverStrategyFactory = context.resolverStrategyFactory;
- InternalWorkingMemory wm = context.wm;
-
- if ( stream.readBoolean() ) {
- InternalFactHandle initialFactHandle = wm.getInitialFactHandle();
- int sinkId = stream.readInt();
- ObjectTypeNode initialFactNode = (ObjectTypeNode) context.sinks.get( sinkId );
- ObjectHashSet initialFactMemory = (ObjectHashSet) context.wm.getNodeMemory( initialFactNode );
-
- initialFactMemory.add( initialFactHandle );
- readRightTuples( initialFactHandle,
- context );
- }
-
- int size = stream.readInt();
-
- // load the handles
- InternalFactHandle[] handles = new InternalFactHandle[size];
- for ( int i = 0; i < size; i++ ) {
- InternalFactHandle handle = readFactHandle( context );
-
- context.handles.put( handle.getId(),
- handle );
- handles[i] = handle;
-
- context.wm.getObjectStore().addHandle( handle,
- handle.getObject() );
-
- readRightTuples( handle,
- context );
- }
-
- EntryPointNode node = ruleBase.getRete().getEntryPointNode( EntryPoint.DEFAULT );
- Map<ObjectType, ObjectTypeNode> objectTypeNodes = node.getObjectTypeNodes();
-
- // add handles to object type nodes
- for ( InternalFactHandle handle : handles ) {
- Object object = handle.getObject();
- ClassObjectType objectType = new ClassObjectType( object.getClass() );
- ObjectTypeNode objectTypeNode = objectTypeNodes.get( objectType );
- ObjectHashSet set = (ObjectHashSet) context.wm.getNodeMemory( objectTypeNode );
- set.add( handle,
- false );
- }
-
- InternalFactHandle handle = wm.getInitialFactHandle();
- while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
- LeftTupleSink sink = (LeftTupleSink) context.sinks.get( stream.readInt() );
- LeftTuple leftTuple = new LeftTuple( handle,
- sink,
- true );
- readLeftTuple( leftTuple,
- context );
- }
-
- readLeftTuples( context );
-
- readPropagationContexts( context );
-
- readActivations( context );
- }
-
- public static InternalFactHandle readFactHandle(MarshallerReaderContext context) throws IOException,
- ClassNotFoundException {
- int id = context.stream.readInt();
- long recency = context.stream.readLong();
-
- int strategyIndex = context.stream.readInt();
- PlaceholderResolverStrategy strategy = context.resolverStrategyFactory.getStrategy( strategyIndex );
- ObjectPlaceholder placeHolder = strategy.read( context.stream );
-
- Object object = placeHolder.resolveObject();
-
- InternalFactHandle handle = new DefaultFactHandle( id,
- object,
- recency );
- return handle;
-
- }
-
- public static void readRightTuples(InternalFactHandle factHandle,
- MarshallerReaderContext context) throws IOException {
- ObjectInputStream stream = context.stream;
- while ( stream.readShort() == PersisterEnums.RIGHT_TUPLE ) {
- readRightTuple( context,
- factHandle );
- }
- }
-
- public static void readRightTuple(MarshallerReaderContext context,
- InternalFactHandle factHandle) throws IOException {
- ObjectInputStream stream = context.stream;
-
- RightTupleSink sink = (RightTupleSink) context.sinks.get( stream.readInt() );
-
- RightTuple rightTuple = new RightTuple( factHandle,
- sink );
- context.rightTuples.put( new RightTupleKey( factHandle.getId(),
- sink ),
- rightTuple );
-
- BetaMemory memory = null;
- switch ( sink.getType() ) {
- case NodeTypeEnums.AccumulateNode : {
- memory = ((AccumulateMemory) context.wm.getNodeMemory( (BetaNode) sink )).betaMemory;
- break;
- }
- case NodeTypeEnums.CollectNode : {
- memory = ((CollectMemory) context.wm.getNodeMemory( (BetaNode) sink )).betaMemory;
- break;
- }
- default : {
- memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
- break;
- }
- }
- memory.getRightTupleMemory().add( rightTuple );
- }
-
- public static void readLeftTuples(MarshallerReaderContext context) throws IOException,
- ClassNotFoundException {
- ObjectInputStream stream = context.stream;
-
- while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
- LeftTupleSink sink = (LeftTupleSink) context.sinks.get( stream.readInt() );
- int factHandleId = stream.readInt();
- LeftTuple leftTuple = new LeftTuple( context.handles.get( factHandleId ),
- sink,
- true );
- readLeftTuple( leftTuple,
- context );
- }
- }
-
- public static void readLeftTuple(LeftTuple parentLeftTuple,
- MarshallerReaderContext context) throws IOException,
- ClassNotFoundException {
- ObjectInputStream stream = context.stream;
- InternalWorkingMemory wm = context.wm;
- Map<Integer, BaseNode> sinks = context.sinks;
-
- LeftTupleSink sink = parentLeftTuple.getLeftTupleSink();
-
- switch ( sink.getType() ) {
- case NodeTypeEnums.JoinNode : {
- BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
- memory.getLeftTupleMemory().add( parentLeftTuple );
-
- while ( stream.readShort() == PersisterEnums.RIGHT_TUPLE ) {
- LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
- int factHandleId = stream.readInt();
- RightTupleKey key = new RightTupleKey( factHandleId,
- sink );
- RightTuple rightTuple = context.rightTuples.get( key );
- LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
- rightTuple,
- childSink,
- true );
- readLeftTuple( childLeftTuple,
- context );
- }
- break;
-
- }
- case NodeTypeEnums.EvalConditionNode : {
- final EvalMemory memory = (EvalMemory) context.wm.getNodeMemory( (EvalConditionNode) sink );
- memory.tupleMemory.add( parentLeftTuple );
- while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
- LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
- LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
- childSink,
- true );
- readLeftTuple( childLeftTuple,
- context );
- }
- break;
- }
- case NodeTypeEnums.NotNode : {
- BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
- int type = stream.readShort();
- if ( type == PersisterEnums.LEFT_TUPLE_NOT_BLOCKED ) {
- memory.getLeftTupleMemory().add( parentLeftTuple );
-
- while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
- LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
- LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
- childSink,
- true );
- readLeftTuple( childLeftTuple,
- context );
- }
-
- } else {
- int factHandleId = stream.readInt();
- RightTupleKey key = new RightTupleKey( factHandleId,
- sink );
- RightTuple rightTuple = context.rightTuples.get( key );
-
- parentLeftTuple.setBlocker( rightTuple );
- rightTuple.setBlocked( parentLeftTuple );
- }
- break;
- }
- case NodeTypeEnums.ExistsNode : {
- BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
- int type = stream.readShort();
- if ( type == PersisterEnums.LEFT_TUPLE_NOT_BLOCKED ) {
- memory.getLeftTupleMemory().add( parentLeftTuple );
- } else {
- int factHandleId = stream.readInt();
- RightTupleKey key = new RightTupleKey( factHandleId,
- sink );
- RightTuple rightTuple = context.rightTuples.get( key );
-
- parentLeftTuple.setBlocker( rightTuple );
- rightTuple.setBlocked( parentLeftTuple );
-
- while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
- LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
- LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
- childSink,
- true );
- readLeftTuple( childLeftTuple,
- context );
- }
- }
- break;
- }
- case NodeTypeEnums.AccumulateNode : {
- // accumulate nodes generate new facts on-demand and need special procedures when de-serializing from persistent storage
- AccumulateMemory memory = (AccumulateMemory) context.wm.getNodeMemory( (BetaNode) sink );
- memory.betaMemory.getLeftTupleMemory().add( parentLeftTuple );
-
- AccumulateContext accctx = new AccumulateContext();
- memory.betaMemory.getCreatedHandles().put( parentLeftTuple,
- accctx,
- false );
- // first we de-serialize the generated fact handle
- InternalFactHandle handle = readFactHandle( context );
- accctx.result = new RightTuple( handle,
- (RightTupleSink) sink );
-
- // then we de-serialize the associated accumulation context
- accctx.context = (Serializable) stream.readObject();
- // then we de-serialize the boolean propagated flag
- accctx.propagated = stream.readBoolean();
-
- // then we de-serialize all the propagated tuples
- short head = -1;
- while ( (head = stream.readShort()) != PersisterEnums.END ) {
- switch ( head ) {
- case PersisterEnums.RIGHT_TUPLE : {
- int factHandleId = stream.readInt();
- RightTupleKey key = new RightTupleKey( factHandleId,
- sink );
- RightTuple rightTuple = context.rightTuples.get( key );
- // just wiring up the match record
- new LeftTuple( parentLeftTuple,
- rightTuple,
- sink,
- true );
- break;
- }
- case PersisterEnums.LEFT_TUPLE : {
- LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
- LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
- accctx.result,
- childSink,
- true );
- readLeftTuple( childLeftTuple,
- context );
- break;
- }
- default : {
- throw new RuntimeDroolsException( "Marshalling error. This is a bug. Please contact the development team." );
- }
- }
- }
- break;
- }
- case NodeTypeEnums.CollectNode : {
- // accumulate nodes generate new facts on-demand and need special procedures when de-serializing from persistent storage
- CollectMemory memory = (CollectMemory) context.wm.getNodeMemory( (BetaNode) sink );
- memory.betaMemory.getLeftTupleMemory().add( parentLeftTuple );
-
- CollectContext colctx = new CollectContext();
- memory.betaMemory.getCreatedHandles().put( parentLeftTuple,
- colctx,
- false );
- // first we de-serialize the generated fact handle
- InternalFactHandle handle = readFactHandle( context );
- colctx.resultTuple = new RightTuple( handle,
- (RightTupleSink) sink );
-
- // then we de-serialize the boolean propagated flag
- colctx.propagated = stream.readBoolean();
-
- // then we de-serialize all the propagated tuples
- short head = -1;
- while ( (head = stream.readShort()) != PersisterEnums.END ) {
- switch ( head ) {
- case PersisterEnums.RIGHT_TUPLE : {
- int factHandleId = stream.readInt();
- RightTupleKey key = new RightTupleKey( factHandleId,
- sink );
- RightTuple rightTuple = context.rightTuples.get( key );
- // just wiring up the match record
- new LeftTuple( parentLeftTuple,
- rightTuple,
- sink,
- true );
- break;
- }
- case PersisterEnums.LEFT_TUPLE : {
- LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
- LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
- colctx.resultTuple,
- childSink,
- true );
- readLeftTuple( childLeftTuple,
- context );
- break;
- }
- default : {
- throw new RuntimeDroolsException( "Marshalling error. This is a bug. Please contact the development team." );
- }
- }
- }
- break;
- }
- case NodeTypeEnums.RightInputAdaterNode : {
- // RIANs generate new fact handles on-demand to wrap tuples and need special procedures when de-serializing from persistent storage
- ObjectHashMap memory = (ObjectHashMap) context.wm.getNodeMemory( (NodeMemory) sink );
- // create fact handle
- int id = stream.readInt();
- long recency = stream.readLong();
- InternalFactHandle handle = new DefaultFactHandle( id,
- parentLeftTuple,
- recency );
- memory.put( parentLeftTuple, handle );
-
- readRightTuples( handle, context );
-
- stream.readShort(); // Persistence.END
- break;
- }
- case NodeTypeEnums.RuleTerminalNode : {
- RuleTerminalNode ruleTerminalNode = (RuleTerminalNode) sink;
- TerminalNodeMemory memory = (TerminalNodeMemory) wm.getNodeMemory( ruleTerminalNode );
- memory.getTupleMemory().add( parentLeftTuple );
-
- int pos = context.terminalTupleMap.size();
- context.terminalTupleMap.put( pos,
- parentLeftTuple );
- break;
- }
- }
- }
-
- public static void readActivations(MarshallerReaderContext context) throws IOException {
- ObjectInputStream stream = context.stream;
-
- while ( stream.readShort() == PersisterEnums.ACTIVATION ) {
- readActivation( context );
- }
- }
-
- public static Activation readActivation(MarshallerReaderContext context) throws IOException {
- ObjectInputStream stream = context.stream;
- InternalRuleBase ruleBase = context.ruleBase;
- InternalWorkingMemory wm = context.wm;
-
- long activationNumber = stream.readLong();
-
- int pos = stream.readInt();
- LeftTuple leftTuple = context.terminalTupleMap.get( pos );
-
- int salience = stream.readInt();
-
- //PropagationContext context,
- String pkgName = stream.readUTF();
- String ruleName = stream.readUTF();
- Package pkg = ruleBase.getPackage( pkgName );
- Rule rule = pkg.getRule( ruleName );
-
- RuleTerminalNode ruleTerminalNode = (RuleTerminalNode) leftTuple.getLeftTupleSink();
- GroupElement subRule = ruleTerminalNode.getSubRule();
-
- PropagationContext pc = context.propagationContexts.get( stream.readLong() );
-
- AgendaItem activation = new AgendaItem( activationNumber,
- leftTuple,
- salience,
- pc,
- rule,
- subRule );
-
- leftTuple.setActivation( activation );
-
- if ( stream.readBoolean() ) {
- String activationGroupName = stream.readUTF();
- ((DefaultAgenda) wm.getAgenda()).getActivationGroup( activationGroupName ).addActivation( activation );
- }
-
- boolean activated = stream.readBoolean();
- activation.setActivated( activated );
-
- InternalAgendaGroup agendaGroup;
- if ( rule.getAgendaGroup() == null || rule.getAgendaGroup().equals( "" ) || rule.getAgendaGroup().equals( AgendaGroup.MAIN ) ) {
- // Is the Rule AgendaGroup undefined? If it is use MAIN,
- // which is added to the Agenda by default
- agendaGroup = (InternalAgendaGroup) ((DefaultAgenda) wm.getAgenda()).getAgendaGroup( AgendaGroup.MAIN );
- } else {
- // AgendaGroup is defined, so try and get the AgendaGroup
- // from the Agenda
- agendaGroup = (InternalAgendaGroup) ((DefaultAgenda) wm.getAgenda()).getAgendaGroup( rule.getAgendaGroup() );
- }
-
- activation.setAgendaGroup( agendaGroup );
-
- if ( activated ) {
- if ( rule.getRuleFlowGroup() == null ) {
- agendaGroup.add( activation );
- } else {
- InternalRuleFlowGroup rfg = (InternalRuleFlowGroup) ((DefaultAgenda) wm.getAgenda()).getRuleFlowGroup( rule.getRuleFlowGroup() );
- rfg.addActivation( activation );
- }
- }
-
- TruthMaintenanceSystem tms = context.wm.getTruthMaintenanceSystem();
- while ( stream.readShort() == PersisterEnums.LOGICAL_DEPENDENCY ) {
- int factHandleId = stream.readInt();
- InternalFactHandle handle = (InternalFactHandle) context.handles.get( factHandleId );
- tms.addLogicalDependency( handle,
- activation,
- pc,
- rule );
- }
-
- return activation;
- }
-
- public static void readPropagationContexts(MarshallerReaderContext context) throws IOException {
- ObjectInputStream stream = context.stream;
-
- while ( stream.readShort() == PersisterEnums.PROPAGATION_CONTEXT ) {
- readPropagationContext( context );
- }
-
- }
-
- public static void readPropagationContext(MarshallerReaderContext context) throws IOException {
- ObjectInputStream stream = context.stream;
- InternalRuleBase ruleBase = context.ruleBase;
-
- int type = stream.readInt();
-
- Rule rule = null;
- if ( stream.readBoolean() ) {
- String pkgName = stream.readUTF();
- String ruleName = stream.readUTF();
- Package pkg = ruleBase.getPackage( pkgName );
- rule = pkg.getRule( ruleName );
- }
-
- LeftTuple leftTuple = null;
- if ( stream.readBoolean() ) {
- int tuplePos = stream.readInt();
- leftTuple = (LeftTuple) context.terminalTupleMap.get( tuplePos );
- }
-
- long propagationNumber = stream.readLong();
-
- int factHandleId = stream.readInt();
- InternalFactHandle factHandle = context.handles.get( factHandleId );
-
- int activeActivations = stream.readInt();
- int dormantActivations = stream.readInt();
- String entryPointId = stream.readUTF();
-
- EntryPoint entryPoint = context.entryPoints.get( entryPointId );
- if ( entryPoint == null ) {
- entryPoint = new EntryPoint( entryPointId );
- context.entryPoints.put( entryPointId,
- entryPoint );
- }
-
- PropagationContext pc = new PropagationContextImpl( propagationNumber,
- type,
- rule,
- leftTuple,
- factHandle,
- activeActivations,
- dormantActivations,
- entryPoint );
- context.propagationContexts.put( propagationNumber,
- pc );
- }
-
- public static void readProcessInstances(MarshallerReaderContext context) throws IOException {
- ObjectInputStream stream = context.stream;
- while ( stream.readShort() == PersisterEnums.PROCESS_INSTANCE ) {
- readProcessInstance( context );
- }
- }
-
- public static ProcessInstance readProcessInstance(MarshallerReaderContext context) throws IOException {
- ObjectInputStream stream = context.stream;
- InternalRuleBase ruleBase = context.ruleBase;
- InternalWorkingMemory wm = context.wm;
-
- RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance();
- processInstance.setId( stream.readLong() );
- String processId = stream.readUTF();
- processInstance.setProcessId( processId );
- if ( ruleBase != null ) {
- processInstance.setProcess( ruleBase.getProcess( processId ) );
- }
- processInstance.setState( stream.readInt() );
- long nodeInstanceCounter = stream.readLong();
- processInstance.setWorkingMemory( wm );
-
- int nbVariables = stream.readInt();
- if ( nbVariables > 0 ) {
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
- for ( int i = 0; i < nbVariables; i++ ) {
- String name = stream.readUTF();
- try {
- Object value = stream.readObject();
- variableScopeInstance.setVariable( name,
- value );
- } catch ( ClassNotFoundException e ) {
- throw new IllegalArgumentException( "Could not reload variable " + name );
- }
- }
- }
-
- int nbSwimlanes = stream.readInt();
- if ( nbSwimlanes > 0 ) {
- SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) processInstance.getContextInstance( SwimlaneContext.SWIMLANE_SCOPE );
- for ( int i = 0; i < nbSwimlanes; i++ ) {
- String name = stream.readUTF();
- String value = stream.readUTF();
- swimlaneContextInstance.setActorId( name,
- value );
- }
- }
-
- while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
- readNodeInstance( context,
- processInstance,
- processInstance );
- }
-
- processInstance.internalSetNodeInstanceCounter( nodeInstanceCounter );
- if ( wm != null ) {
- processInstance.reconnect();
- }
- return processInstance;
- }
-
- public static NodeInstance readNodeInstance(MarshallerReaderContext context,
- NodeInstanceContainer nodeInstanceContainer,
- RuleFlowProcessInstance processInstance) throws IOException {
- ObjectInputStream stream = context.stream;
- NodeInstanceImpl nodeInstance = null;
- long id = stream.readLong();
- long nodeId = stream.readLong();
- int nodeType = stream.readShort();
- switch ( nodeType ) {
- case PersisterEnums.RULE_SET_NODE_INSTANCE :
- nodeInstance = new RuleSetNodeInstance();
- break;
- case PersisterEnums.HUMAN_TASK_NODE_INSTANCE :
- nodeInstance = new HumanTaskNodeInstance();
- ((HumanTaskNodeInstance) nodeInstance).internalSetWorkItemId( stream.readLong() );
- break;
- case PersisterEnums.WORK_ITEM_NODE_INSTANCE :
- nodeInstance = new WorkItemNodeInstance();
- ((WorkItemNodeInstance) nodeInstance).internalSetWorkItemId( stream.readLong() );
- break;
- case PersisterEnums.SUB_PROCESS_NODE_INSTANCE :
- nodeInstance = new SubProcessNodeInstance();
- ((SubProcessNodeInstance) nodeInstance).internalSetProcessInstanceId( stream.readLong() );
- break;
- case PersisterEnums.MILESTONE_NODE_INSTANCE :
- nodeInstance = new MilestoneNodeInstance();
- int nbTimerInstances = stream.readInt();
- if (nbTimerInstances > 0) {
- List<Long> timerInstances = new ArrayList<Long>();
- for (int i = 0; i < nbTimerInstances; i++) {
- timerInstances.add(stream.readLong());
- }
- ((MilestoneNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances);
- }
- break;
- case PersisterEnums.TIMER_NODE_INSTANCE :
- nodeInstance = new TimerNodeInstance();
- ((TimerNodeInstance) nodeInstance).internalSetTimerId( stream.readLong() );
- break;
- case PersisterEnums.JOIN_NODE_INSTANCE :
- nodeInstance = new JoinInstance();
- int number = stream.readInt();
- if ( number > 0 ) {
- Map<Long, Integer> triggers = new HashMap<Long, Integer>();
- for ( int i = 0; i < number; i++ ) {
- long l = stream.readLong();
- int count = stream.readInt();
- triggers.put( l,
- count );
- }
- ((JoinInstance) nodeInstance).internalSetTriggers( triggers );
- }
- break;
- case PersisterEnums.COMPOSITE_NODE_INSTANCE :
- nodeInstance = new CompositeContextNodeInstance();
- break;
- case PersisterEnums.FOR_EACH_NODE_INSTANCE :
- nodeInstance = new ForEachNodeInstance();
- break;
- default :
- throw new IllegalArgumentException( "Unknown node type: " + nodeType );
- }
- nodeInstance.setNodeId( nodeId );
- nodeInstance.setNodeInstanceContainer( nodeInstanceContainer );
- nodeInstance.setProcessInstance( processInstance );
- nodeInstance.setId( id );
- switch ( nodeType ) {
- case PersisterEnums.COMPOSITE_NODE_INSTANCE :
- int nbVariables = stream.readInt();
- if ( nbVariables > 0 ) {
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((CompositeContextNodeInstance) nodeInstance).getContextInstance( VariableScope.VARIABLE_SCOPE );
- for ( int i = 0; i < nbVariables; i++ ) {
- String name = stream.readUTF();
- try {
- Object value = stream.readObject();
- variableScopeInstance.setVariable( name,
- value );
- } catch ( ClassNotFoundException e ) {
- throw new IllegalArgumentException( "Could not reload variable " + name );
- }
- }
- }
- while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
- readNodeInstance( context,
- (CompositeContextNodeInstance) nodeInstance,
- processInstance );
- }
- break;
- case PersisterEnums.FOR_EACH_NODE_INSTANCE :
- while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
- readNodeInstance( context,
- (ForEachNodeInstance) nodeInstance,
- processInstance );
- }
- break;
- default :
- // do nothing
- }
- return nodeInstance;
- }
-
- public static void readWorkItems(MarshallerReaderContext context) throws IOException {
- InternalWorkingMemory wm = context.wm;
- ObjectInputStream stream = context.stream;
- while ( stream.readShort() == PersisterEnums.WORK_ITEM ) {
- WorkItem workItem = readWorkItem( context );
- ((WorkItemManager) wm.getWorkItemManager()).internalAddWorkItem( workItem );
- }
- }
-
- public static WorkItem readWorkItem(MarshallerReaderContext context) throws IOException {
- ObjectInputStream stream = context.stream;
-
- WorkItemImpl workItem = new WorkItemImpl();
- workItem.setId( stream.readLong() );
- workItem.setProcessInstanceId( stream.readLong() );
- workItem.setName( stream.readUTF() );
- workItem.setState( stream.readInt() );
-
- int nbParameters = stream.readInt();
-
- for ( int i = 0; i < nbParameters; i++ ) {
- String name = stream.readUTF();
- try {
- Object value = stream.readObject();
- workItem.setParameter( name,
- value );
- } catch ( ClassNotFoundException e ) {
- throw new IllegalArgumentException( "Could not reload parameter " + name );
- }
- }
-
- return workItem;
- }
-
- public static void readTimers(MarshallerReaderContext context) throws IOException, ClassNotFoundException {
- InternalWorkingMemory wm = context.wm;
- ObjectInputStream stream = context.stream;
-
- TimerManager timerManager = wm.getTimerManager();
- timerManager.internalSetTimerId( stream.readLong() );
-
- // still need to think on how to fix this.
-// TimerService service = (TimerService) stream.readObject();
-// timerManager.setTimerService( service );
-
- while ( stream.readShort() == PersisterEnums.TIMER ) {
- TimerInstance timer = readTimer( context );
- timerManager.internalAddTimer( timer );
- }
- }
-
- public static TimerInstance readTimer(MarshallerReaderContext context) throws IOException {
- ObjectInputStream stream = context.stream;
-
- TimerInstance timer = new TimerInstance();
- timer.setId( stream.readLong() );
- timer.setTimerId( stream.readLong() );
- timer.setDelay( stream.readLong() );
- timer.setPeriod( stream.readLong() );
- timer.setProcessInstanceId( stream.readLong() );
- timer.setActivated( new Date( stream.readLong() ) );
- if ( stream.readBoolean() ) {
- timer.setLastTriggered( new Date( stream.readLong() ) );
- }
- return timer;
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Marshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Marshaller.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Marshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,32 +0,0 @@
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.drools.SessionConfiguration;
-import org.drools.StatefulSession;
-import org.drools.common.InternalRuleBase;
-import org.drools.concurrent.ExecutorService;
-import org.drools.runtime.Environment;
-
-public interface Marshaller {
-
- public StatefulSession read(final InputStream stream,
- final InternalRuleBase ruleBase,
- final int id,
- final ExecutorService executor,
- final SessionConfiguration config,
- final Environment environment) throws IOException,
- ClassNotFoundException;
-
- public StatefulSession read(final InputStream stream,
- final InternalRuleBase ruleBase,
- final StatefulSession session) throws IOException,
- ClassNotFoundException;
-
- public abstract void write(final OutputStream stream,
- final InternalRuleBase ruleBase,
- final StatefulSession session) throws IOException;
-
-}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,71 +0,0 @@
-/**
- *
- */
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.drools.common.BaseNode;
-import org.drools.common.InternalFactHandle;
-import org.drools.common.InternalRuleBase;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.reteoo.LeftTuple;
-import org.drools.reteoo.RightTuple;
-import org.drools.rule.EntryPoint;
-import org.drools.spi.PropagationContext;
-
-public class MarshallerReaderContext extends ObjectInputStream {
- public final MarshallerReaderContext stream;
- public final InternalRuleBase ruleBase;
- public InternalWorkingMemory wm;
- public final Map<Integer, BaseNode> sinks;
-
- public Map<Integer, InternalFactHandle> handles;
-
- public final Map<RightTupleKey, RightTuple> rightTuples;
- public final Map<Integer, LeftTuple> terminalTupleMap;
-
- public final PlaceholderResolverStrategyFactory resolverStrategyFactory;
- public final Map<String, EntryPoint> entryPoints;
-
- public final Map<Long, PropagationContext> propagationContexts;
-
- public final boolean marshalProcessInstances;
- public final boolean marshalWorkItems;
-
- public MarshallerReaderContext(InputStream stream,
- InternalRuleBase ruleBase,
- Map<Integer, BaseNode> sinks,
- PlaceholderResolverStrategyFactory resolverStrategyFactory) throws IOException {
- this( stream,
- ruleBase,
- sinks,
- resolverStrategyFactory,
- true,
- true );
- }
-
- public MarshallerReaderContext(InputStream stream,
- InternalRuleBase ruleBase,
- Map<Integer, BaseNode> sinks,
- PlaceholderResolverStrategyFactory resolverStrategyFactory,
- boolean marshalProcessInstances,
- boolean marshalWorkItems) throws IOException {
- super( stream );
- this.stream = this;
- this.ruleBase = ruleBase;
- this.sinks = sinks;
- this.handles = new HashMap<Integer, InternalFactHandle>();
- this.rightTuples = new HashMap<RightTupleKey, RightTuple>();
- this.terminalTupleMap = new HashMap<Integer, LeftTuple>();
- this.entryPoints = new HashMap<String, EntryPoint>();
- this.propagationContexts = new HashMap<Long, PropagationContext>();
- this.resolverStrategyFactory = resolverStrategyFactory;
- this.marshalProcessInstances = marshalProcessInstances;
- this.marshalWorkItems = marshalWorkItems;
- }
-}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,61 +0,0 @@
-/**
- *
- */
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.util.IdentityHashMap;
-import java.util.Map;
-
-import org.drools.common.BaseNode;
-import org.drools.common.InternalRuleBase;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.reteoo.LeftTuple;
-
-public class MarshallerWriteContext extends ObjectOutputStream {
- public final MarshallerWriteContext stream;
- public final InternalRuleBase ruleBase;
- public final InternalWorkingMemory wm;
- public final Map<Integer, BaseNode> sinks;
-
- public final PrintStream out = System.out;
-
- public final PlaceholderResolverStrategyFactory resolverStrategyFactory;
-
- public final Map<LeftTuple, Integer> terminalTupleMap;
-
- public final boolean marshalProcessInstances;
- public final boolean marshalWorkItems;
-
- public MarshallerWriteContext(OutputStream stream,
- InternalRuleBase ruleBase,
- InternalWorkingMemory wm,
- Map<Integer, BaseNode> sinks,
- PlaceholderResolverStrategyFactory resolverStrategyFactory) throws IOException {
- this(stream, ruleBase, wm, sinks, resolverStrategyFactory, true, true);
- }
-
- public MarshallerWriteContext(OutputStream stream,
- InternalRuleBase ruleBase,
- InternalWorkingMemory wm,
- Map<Integer, BaseNode> sinks,
- PlaceholderResolverStrategyFactory resolverStrategyFactory,
- boolean marshalProcessInstances,
- boolean marshalWorkItems) throws IOException {
- super( stream );
- this.stream = this;
- this.ruleBase = ruleBase;
- this.wm = wm;
- this.sinks = sinks;
-
- this.resolverStrategyFactory = resolverStrategyFactory;
-
- this.terminalTupleMap = new IdentityHashMap<LeftTuple, Integer>();
-
- this.marshalProcessInstances = marshalProcessInstances;
- this.marshalWorkItems = marshalWorkItems;
- }
-}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,7 +0,0 @@
-package org.drools.marshalling;
-
-public interface MarshallingConfiguration {
- PlaceholderResolverStrategyFactory getPlaceholderResolverStrategyFactory();
- boolean isMarshallProcessInstances();
- boolean isMarshallWorkItems();
-}
Deleted: 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-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,48 +0,0 @@
-package org.drools.marshalling;
-
-public class MarshallingConfigurationImpl
- implements
- MarshallingConfiguration {
- private PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory;
- private boolean marshallProcessInstances;
- private boolean marshallWorkItems;
-
- public MarshallingConfigurationImpl() {
- this( null,
- true,
- true );
- }
-
- public MarshallingConfigurationImpl(PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory,
- boolean marshallProcessInstances,
- boolean marshallWorkItems) {
- this.placeholderResolverStrategyFactory = placeholderResolverStrategyFactory;
- this.marshallProcessInstances = marshallProcessInstances;
- this.marshallWorkItems = marshallWorkItems;
- }
-
- public boolean isMarshallProcessInstances() {
- return this.marshallProcessInstances;
- }
-
- public void setMarshallProcessInstances(boolean marshallProcessInstances) {
- this.marshallProcessInstances = marshallProcessInstances;
- }
-
- public boolean isMarshallWorkItems() {
- return this.marshallWorkItems;
- }
-
- public void setMarshallWorkItems(boolean marshallWorkItems) {
- this.marshallWorkItems = marshallWorkItems;
- }
-
- public PlaceholderResolverStrategyFactory getPlaceholderResolverStrategyFactory() {
- return this.placeholderResolverStrategyFactory;
- }
-
- public void setPlaceholderResolverStrategyFactory(PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory) {
- this.placeholderResolverStrategyFactory = placeholderResolverStrategyFactory;
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ObjectPlaceholder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ObjectPlaceholder.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ObjectPlaceholder.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,8 +0,0 @@
-package org.drools.marshalling;
-
-public interface ObjectPlaceholder {
-
- public Object resolveObject();
-
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,983 +0,0 @@
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.drools.InitialFact;
-import org.drools.base.ClassObjectType;
-import org.drools.common.AgendaItem;
-import org.drools.common.DefaultAgenda;
-import org.drools.common.EqualityKey;
-import org.drools.common.InternalFactHandle;
-import org.drools.common.InternalRuleBase;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.common.LogicalDependency;
-import org.drools.common.NodeMemory;
-import org.drools.common.ObjectStore;
-import org.drools.common.RuleFlowGroupImpl;
-import org.drools.common.WorkingMemoryAction;
-import org.drools.process.core.context.swimlane.SwimlaneContext;
-import org.drools.process.core.context.variable.VariableScope;
-import org.drools.process.instance.WorkItemManager;
-import org.drools.process.instance.context.swimlane.SwimlaneContextInstance;
-import org.drools.process.instance.context.variable.VariableScopeInstance;
-import org.drools.process.instance.timer.TimerInstance;
-import org.drools.process.instance.timer.TimerManager;
-import org.drools.reteoo.BetaNode;
-import org.drools.reteoo.LeftTuple;
-import org.drools.reteoo.LeftTupleSink;
-import org.drools.reteoo.NodeTypeEnums;
-import org.drools.reteoo.ObjectTypeNode;
-import org.drools.reteoo.ReteooWorkingMemory;
-import org.drools.reteoo.RightTuple;
-import org.drools.reteoo.RuleTerminalNode;
-import org.drools.reteoo.AccumulateNode.AccumulateContext;
-import org.drools.reteoo.AccumulateNode.AccumulateMemory;
-import org.drools.reteoo.CollectNode.CollectContext;
-import org.drools.reteoo.CollectNode.CollectMemory;
-import org.drools.rule.EntryPoint;
-import org.drools.rule.Rule;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
-import org.drools.runtime.process.NodeInstance;
-import org.drools.runtime.process.WorkItem;
-import org.drools.spi.ActivationGroup;
-import org.drools.spi.AgendaGroup;
-import org.drools.spi.PropagationContext;
-import org.drools.spi.RuleFlowGroup;
-import org.drools.util.ObjectHashMap;
-import org.drools.util.ObjectHashSet;
-import org.drools.workflow.instance.node.CompositeContextNodeInstance;
-import org.drools.workflow.instance.node.ForEachNodeInstance;
-import org.drools.workflow.instance.node.HumanTaskNodeInstance;
-import org.drools.workflow.instance.node.JoinInstance;
-import org.drools.workflow.instance.node.MilestoneNodeInstance;
-import org.drools.workflow.instance.node.RuleSetNodeInstance;
-import org.drools.workflow.instance.node.SubProcessNodeInstance;
-import org.drools.workflow.instance.node.TimerNodeInstance;
-import org.drools.workflow.instance.node.WorkItemNodeInstance;
-
-public class OutputMarshaller {
- public static void writeSession(MarshallerWriteContext context) throws IOException {
- ReteooWorkingMemory wm = (ReteooWorkingMemory) context.wm;
-
- final boolean multithread = wm.isPartitionManagersActive();
- // is multi-thread active?
- if( multithread ) {
- context.writeBoolean( true );
- wm.stopPartitionManagers();
- } else {
- context.writeBoolean( false );
- }
-
- context.writeInt( wm.getFactHandleFactory().getId() );
- context.writeLong( wm.getFactHandleFactory().getRecency() );
-// context.out.println( "FactHandleFactory int:" + wm.getFactHandleFactory().getId() + " long:" + wm.getFactHandleFactory().getRecency() );
-
- InternalFactHandle handle = context.wm.getInitialFactHandle();
- context.writeInt( handle.getId() );
- context.writeLong( handle.getRecency() );
-// context.out.println( "InitialFact int:" + handle.getId() + " long:" + handle.getRecency() );
-
- context.writeLong( wm.getPropagationIdCounter() );
-// context.out.println( "PropagationCounter long:" + wm.getPropagationIdCounter() );
-
- writeAgenda( context );
-
- writeFactHandles( context );
-
- writeActionQueue( context );
-
- if ( wm.getTruthMaintenanceSystem() != null ) {
- context.writeBoolean( true );
- writeTruthMaintenanceSystem( context );
- } else {
- context.writeBoolean( false );
- }
-
- if ( context.marshalProcessInstances ) {
- writeProcessInstances( context );
- }
-
- if ( context.marshalWorkItems ) {
- writeWorkItems( context );
- }
-
- writeTimers( context );
-
- if( multithread ) {
- wm.startPartitionManagers();
- }
- }
-
- public static void writeAgenda(MarshallerWriteContext context) throws IOException {
- InternalWorkingMemory wm = context.wm;
- DefaultAgenda agenda = (DefaultAgenda) wm.getAgenda();
-
- Map<String, ActivationGroup> activationGroups = agenda.getActivationGroupsMap();
-
- AgendaGroup[] agendaGroups = (AgendaGroup[]) agenda.getAgendaGroupsMap().values().toArray( new AgendaGroup[agenda.getAgendaGroupsMap().size()] );
- Arrays.sort( agendaGroups,
- AgendaGroupSorter.instance );
-
- for ( AgendaGroup group : agendaGroups ) {
- context.writeShort( PersisterEnums.AGENDA_GROUP );
- context.writeUTF( group.getName() );
- context.writeBoolean( group.isActive() );
- }
- context.writeShort( PersisterEnums.END );
-
- LinkedList<AgendaGroup> focusStack = agenda.getStackList();
- for ( Iterator<AgendaGroup> it = focusStack.iterator(); it.hasNext(); ) {
- AgendaGroup group = it.next();
- context.writeShort( PersisterEnums.AGENDA_GROUP );
- context.writeUTF( group.getName() );
- }
- context.writeShort( PersisterEnums.END );
-
- RuleFlowGroupImpl[] ruleFlowGroups = (RuleFlowGroupImpl[]) agenda.getRuleFlowGroupsMap().values().toArray( new RuleFlowGroupImpl[agenda.getRuleFlowGroupsMap().size()] );
- Arrays.sort( ruleFlowGroups,
- RuleFlowGroupSorter.instance );
-
- for ( RuleFlowGroupImpl group : ruleFlowGroups ) {
- context.writeShort( PersisterEnums.RULE_FLOW_GROUP );
- //group.write( context );
- context.writeUTF( group.getName() );
- context.writeBoolean( group.isActive() );
- context.writeBoolean( group.isAutoDeactivate() );
- }
- context.writeShort( PersisterEnums.END );
- }
-
- public static class AgendaGroupSorter
- implements
- Comparator<AgendaGroup> {
- public static final AgendaGroupSorter instance = new AgendaGroupSorter();
-
- public int compare(AgendaGroup group1,
- AgendaGroup group2) {
- return group1.getName().compareTo( group2.getName() );
- }
- }
-
- public static class RuleFlowGroupSorter
- implements
- Comparator<RuleFlowGroup> {
- public static final RuleFlowGroupSorter instance = new RuleFlowGroupSorter();
-
- public int compare(RuleFlowGroup group1,
- RuleFlowGroup group2) {
- return group1.getName().compareTo( group2.getName() );
- }
- }
-
- public static void writeActionQueue(MarshallerWriteContext context) throws IOException {
- ReteooWorkingMemory wm = (ReteooWorkingMemory) context.wm;
-
- WorkingMemoryAction[] queue = wm.getActionQueue().toArray( new WorkingMemoryAction[wm.getActionQueue().size()] );
- for ( int i = queue.length - 1; i >= 0; i-- ) {
- context.writeShort( PersisterEnums.WORKING_MEMORY_ACTION );
- queue[i].write( context );
- }
- context.writeShort( PersisterEnums.END );
- }
-
- public static void writeTruthMaintenanceSystem(MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
-
- ObjectHashMap assertMap = context.wm.getTruthMaintenanceSystem().getAssertMap();
-
- EqualityKey[] keys = new EqualityKey[assertMap.size()];
- org.drools.util.Iterator it = assertMap.iterator();
- int i = 0;
- for ( org.drools.util.ObjectHashMap.ObjectEntry entry = (org.drools.util.ObjectHashMap.ObjectEntry) it.next(); entry != null; entry = (org.drools.util.ObjectHashMap.ObjectEntry) it.next() ) {
- EqualityKey key = (EqualityKey) entry.getKey();
- keys[i++] = key;
- }
-
- Arrays.sort( keys,
- EqualityKeySorter.instance );
-
- // write the assert map of Equality keys
- for ( EqualityKey key : keys ) {
- stream.writeShort( PersisterEnums.EQUALITY_KEY );
- stream.writeInt( key.getStatus() );
- InternalFactHandle handle = key.getFactHandle();
- stream.writeInt( handle.getId() );
-// context.out.println( "EqualityKey int:" + key.getStatus() + " int:" + handle.getId() );
- if ( key.getOtherFactHandle() != null && !key.getOtherFactHandle().isEmpty() ) {
- for ( InternalFactHandle handle2 : key.getOtherFactHandle() ) {
- stream.writeShort( PersisterEnums.FACT_HANDLE );
- stream.writeInt( handle2.getId() );
-// context.out.println( "OtherHandle int:" + handle2.getId() );
- }
- }
- stream.writeShort( PersisterEnums.END );
- }
- stream.writeShort( PersisterEnums.END );
- }
-
- public static class EqualityKeySorter
- implements
- Comparator<EqualityKey> {
- public static final EqualityKeySorter instance = new EqualityKeySorter();
-
- public int compare(EqualityKey key1,
- EqualityKey key2) {
- return key1.getFactHandle().getId() - key2.getFactHandle().getId();
- }
- }
-
- public static void writeFactHandles(MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
- InternalWorkingMemory wm = context.wm;
- PlaceholderResolverStrategyFactory resolverStrategyFactory = context.resolverStrategyFactory;
-
- writeInitialFactHandleRightTuples( context );
-
- stream.writeInt( wm.getObjectStore().size() );
-
- // Write out FactHandles
- for ( InternalFactHandle handle : orderFacts( wm.getObjectStore() ) ) {
- //stream.writeShort( PersisterEnums.FACT_HANDLE );
- //InternalFactHandle handle = (InternalFactHandle) it.next();
- writeFactHandle( context,
- stream,
- resolverStrategyFactory,
- handle );
-
- writeRightTuples( handle,
- context );
- }
-
- writeInitialFactHandleLeftTuples( context );
-
- writeLeftTuples( context );
-
- writePropagationContexts( context );
-
- writeActivations( context );
- }
-
- private static void writeFactHandle(MarshallerWriteContext context,
- ObjectOutputStream stream,
- PlaceholderResolverStrategyFactory resolverStrategyFactory,
- InternalFactHandle handle) throws IOException {
- stream.writeInt( handle.getId() );
- stream.writeLong( handle.getRecency() );
-
-// context.out.println( "Object : int:" + handle.getId() + " long:" + handle.getRecency() );
-// context.out.println( handle.getObject() );
-
- Object object = handle.getObject();
-
- PlaceholderResolverStrategy strategy = resolverStrategyFactory.getStrategy( object );
-
- stream.writeInt( strategy.getIndex() );
-
- strategy.write( stream,
- object );
- }
-
- public static InternalFactHandle[] orderFacts(ObjectStore objectStore) {
- // this method is just needed for testing purposes, to allow round tripping
- int size = objectStore.size();
- InternalFactHandle[] handles = new InternalFactHandle[size];
- int i = 0;
- for ( Iterator it = objectStore.iterateFactHandles(); it.hasNext(); ) {
- handles[i++] = (InternalFactHandle) it.next();
- }
-
- Arrays.sort( handles,
- new HandleSorter() );
-
- return handles;
- }
-
- public static class HandleSorter
- implements
- Comparator<InternalFactHandle> {
- public int compare(InternalFactHandle h1,
- InternalFactHandle h2) {
- return h1.getId() - h2.getId();
- }
- }
-
- public static void writeInitialFactHandleRightTuples(MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
- InternalRuleBase ruleBase = context.ruleBase;
-
- ObjectTypeNode initialFactNode = ruleBase.getRete().getEntryPointNode( EntryPoint.DEFAULT ).getObjectTypeNodes().get( new ClassObjectType( InitialFact.class ) );
-
- // do we write the fact to the objecttypenode memory
- if ( initialFactNode != null ) {
- ObjectHashSet initialFactMemory = (ObjectHashSet) context.wm.getNodeMemory( initialFactNode );
- if ( initialFactMemory != null && !initialFactMemory.isEmpty() ) {
-// context.out.println( "InitialFactMemory true int:" + initialFactNode.getId() );
- stream.writeBoolean( true );
- stream.writeInt( initialFactNode.getId() );
-
-// context.out.println( "InitialFact RightTuples" );
- writeRightTuples( context.wm.getInitialFactHandle(),
- context );
- } else {
-// context.out.println( "InitialFactMemory false " );
- stream.writeBoolean( false );
- }
- } else {
-// context.out.println( "InitialFactMemory false " );
- stream.writeBoolean( false );
- }
- }
-
- public static void writeInitialFactHandleLeftTuples(MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
-
-// context.out.println( "InitialFact LeftTuples Start" );
- InternalFactHandle handle = context.wm.getInitialFactHandle();
- for ( LeftTuple leftTuple = getLeftTuple( handle.getLeftTuple() ); leftTuple != null; leftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
- stream.writeShort( PersisterEnums.LEFT_TUPLE );
-
- stream.writeInt( leftTuple.getLeftTupleSink().getId() );
-// context.out.println( "LeftTuple sinkId:" + leftTuple.getLeftTupleSink().getId() );
- writeLeftTuple( leftTuple,
- context,
- true );
- }
- stream.writeShort( PersisterEnums.END );
-// context.out.println( "InitialFact LeftTuples End" );
- }
-
- public static void writeRightTuples(InternalFactHandle handle,
- MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
-// context.out.println( "RightTuples Start" );
-
- RightTuple rightTuple = handle.getRightTuple();
- for ( RightTuple tempRightTuple = rightTuple; tempRightTuple != null; tempRightTuple = (RightTuple) tempRightTuple.getHandleNext() ) {
- rightTuple = tempRightTuple;
- }
- for ( ; rightTuple != null; rightTuple = (RightTuple) rightTuple.getHandlePrevious() ) {
- stream.writeShort( PersisterEnums.RIGHT_TUPLE );
- writeRightTuple( rightTuple,
- context );
- }
- stream.writeShort( PersisterEnums.END );
-// context.out.println( "RightTuples END" );
- }
-
- public static void writeRightTuple(RightTuple rightTuple,
- MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
- InternalWorkingMemory wm = context.wm;
- stream.writeInt( rightTuple.getRightTupleSink().getId() );
-// context.out.println( "RightTuple sinkId:" + rightTuple.getRightTupleSink().getId() );
- }
-
- public static void writeLeftTuples(MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
- InternalWorkingMemory wm = context.wm;
-
- // Write out LeftTuples
-// context.out.println( "LeftTuples Start" );
- for ( InternalFactHandle handle : orderFacts( wm.getObjectStore() ) ) {
- //InternalFactHandle handle = (InternalFactHandle) it.next();
-
- for ( LeftTuple leftTuple = getLeftTuple( handle.getLeftTuple() ); leftTuple != null; leftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
- stream.writeShort( PersisterEnums.LEFT_TUPLE );
-
- stream.writeInt( leftTuple.getLeftTupleSink().getId() );
- stream.writeInt( handle.getId() );
-
-// context.out.println( "LeftTuple sinkId:" + leftTuple.getLeftTupleSink().getId() + " handleId:" + handle.getId() );
- writeLeftTuple( leftTuple,
- context,
- true );
- }
- }
- stream.writeShort( PersisterEnums.END );
-// context.out.println( "LeftTuples End" );
- }
-
- public static void writeLeftTuple(LeftTuple leftTuple,
- MarshallerWriteContext context,
- boolean recurse) throws IOException {
- ObjectOutputStream stream = context.stream;
- InternalRuleBase ruleBase = context.ruleBase;
- InternalWorkingMemory wm = context.wm;
-
- LeftTupleSink sink = leftTuple.getLeftTupleSink();
-
- switch ( sink.getType() ) {
- case NodeTypeEnums.JoinNode : {
-// context.out.println( "JoinNode" );
- for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
- stream.writeShort( PersisterEnums.RIGHT_TUPLE );
- stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
- stream.writeInt( childLeftTuple.getRightParent().getFactHandle().getId() );
-// context.out.println( "RightTuple int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
- writeLeftTuple( childLeftTuple,
- context,
- recurse );
- }
- stream.writeShort( PersisterEnums.END );
-// context.out.println( "JoinNode --- END" );
- break;
- }
- case NodeTypeEnums.EvalConditionNode : {
-// context.out.println( "EvalConditionNode" );
- for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
- stream.writeShort( PersisterEnums.LEFT_TUPLE );
- stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
- writeLeftTuple( childLeftTuple,
- context,
- recurse );
- }
- stream.writeShort( PersisterEnums.END );
- break;
- }
- case NodeTypeEnums.NotNode : {
- if ( leftTuple.getBlocker() == null ) {
- // is not blocked so has children
- stream.writeShort( PersisterEnums.LEFT_TUPLE_NOT_BLOCKED );
-
- for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
- stream.writeShort( PersisterEnums.LEFT_TUPLE );
- stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
- writeLeftTuple( childLeftTuple,
- context,
- recurse );
- }
- stream.writeShort( PersisterEnums.END );
-
- } else {
- stream.writeShort( PersisterEnums.LEFT_TUPLE_BLOCKED );
- stream.writeInt( leftTuple.getBlocker().getFactHandle().getId() );
- }
- break;
- }
- case NodeTypeEnums.ExistsNode : {
- if ( leftTuple.getBlocker() == null ) {
- // is blocked so has children
- stream.writeShort( PersisterEnums.LEFT_TUPLE_NOT_BLOCKED );
- } else {
- stream.writeShort( PersisterEnums.LEFT_TUPLE_BLOCKED );
- stream.writeInt( leftTuple.getBlocker().getFactHandle().getId() );
-
- for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
- stream.writeShort( PersisterEnums.LEFT_TUPLE );
- stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
- writeLeftTuple( childLeftTuple,
- context,
- recurse );
- }
- stream.writeShort( PersisterEnums.END );
- }
- break;
- }
- case NodeTypeEnums.AccumulateNode : {
-// context.out.println( "AccumulateNode" );
- // accumulate nodes generate new facts on-demand and need special procedures when serializing to persistent storage
- AccumulateMemory memory = (AccumulateMemory) context.wm.getNodeMemory( (BetaNode) sink );
- AccumulateContext accctx = (AccumulateContext) memory.betaMemory.getCreatedHandles().get( leftTuple );
- // first we serialize the generated fact handle
- writeFactHandle( context,
- stream,
- context.resolverStrategyFactory,
- accctx.result.getFactHandle() );
- // then we serialize the associated accumulation context
- stream.writeObject( accctx.context );
- // then we serialize the boolean propagated flag
- stream.writeBoolean( accctx.propagated );
-
- // then we serialize all the propagated tuples
- for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
- if( leftTuple.getLeftTupleSink().getId() == childLeftTuple.getLeftTupleSink().getId()) {
- // this is a matching record, so, associate the right tuples
-// context.out.println( "RightTuple(match) int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
- stream.writeShort( PersisterEnums.RIGHT_TUPLE );
- stream.writeInt( childLeftTuple.getRightParent().getFactHandle().getId() );
- } else {
- // this is a propagation record
-// context.out.println( "RightTuple(propagation) int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
- stream.writeShort( PersisterEnums.LEFT_TUPLE );
- stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
- writeLeftTuple( childLeftTuple,
- context,
- recurse );
- }
- }
- stream.writeShort( PersisterEnums.END );
-// context.out.println( "AccumulateNode --- END" );
- break;
- }
- case NodeTypeEnums.CollectNode : {
-// context.out.println( "CollectNode" );
- // collect nodes generate new facts on-demand and need special procedures when serializing to persistent storage
- CollectMemory memory = (CollectMemory) context.wm.getNodeMemory( (BetaNode) sink );
- CollectContext colctx = (CollectContext) memory.betaMemory.getCreatedHandles().get( leftTuple );
- // first we serialize the generated fact handle
- writeFactHandle( context,
- stream,
- context.resolverStrategyFactory,
- colctx.resultTuple.getFactHandle() );
- // then we serialize the boolean propagated flag
- stream.writeBoolean( colctx.propagated );
-
- // then we serialize all the propagated tuples
- for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
- if( leftTuple.getLeftTupleSink().getId() == childLeftTuple.getLeftTupleSink().getId()) {
- // this is a matching record, so, associate the right tuples
-// context.out.println( "RightTuple(match) int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
- stream.writeShort( PersisterEnums.RIGHT_TUPLE );
- stream.writeInt( childLeftTuple.getRightParent().getFactHandle().getId() );
- } else {
- // this is a propagation record
-// context.out.println( "RightTuple(propagation) int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
- stream.writeShort( PersisterEnums.LEFT_TUPLE );
- stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
- writeLeftTuple( childLeftTuple,
- context,
- recurse );
- }
- }
- stream.writeShort( PersisterEnums.END );
-// context.out.println( "CollectNode --- END" );
- break;
- }
- case NodeTypeEnums.RightInputAdaterNode : {
-// context.out.println( "RightInputAdapterNode" );
- // RIANs generate new fact handles on-demand to wrap tuples and need special procedures when serializing to persistent storage
- ObjectHashMap memory = (ObjectHashMap) context.wm.getNodeMemory( (NodeMemory) sink );
- InternalFactHandle ifh = (InternalFactHandle) memory.get( leftTuple );
- // first we serialize the generated fact handle ID
-// context.out.println( "FactHandle id:"+ifh.getId() );
- stream.writeInt( ifh.getId() );
- stream.writeLong( ifh.getRecency() );
-
- writeRightTuples( ifh, context );
-
- stream.writeShort( PersisterEnums.END );
-// context.out.println( "RightInputAdapterNode --- END" );
- break;
- }
- case NodeTypeEnums.RuleTerminalNode : {
-// context.out.println( "RuleTerminalNode" );
- int pos = context.terminalTupleMap.size();
- context.terminalTupleMap.put( leftTuple,
- pos );
- break;
- }
- }
- }
-
- public static LeftTuple getLeftTuple(LeftTuple leftTuple) {
- for ( LeftTuple tempLeftTuple = leftTuple; tempLeftTuple != null; tempLeftTuple = (LeftTuple) tempLeftTuple.getLeftParentNext() ) {
- leftTuple = tempLeftTuple;
- }
- return leftTuple;
- }
-
- public static void writeActivations(MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
-
- Entry<LeftTuple, Integer>[] entries = context.terminalTupleMap.entrySet().toArray( new Entry[context.terminalTupleMap.size()] );
- Arrays.sort( entries,
- TupleSorter.instance );
-
- //Map<LeftTuple, Integer> tuples = context.terminalTupleMap;
- if ( entries.length != 0 ) {
- for ( Entry<LeftTuple, Integer> entry : entries ) {
- if (entry.getKey().getActivation() != null) {
- LeftTuple leftTuple = entry.getKey();
- stream.writeShort(PersisterEnums.ACTIVATION);
- writeActivation(context, leftTuple, (AgendaItem) leftTuple
- .getActivation(), (RuleTerminalNode) leftTuple
- .getLeftTupleSink());
- }
- }
- }
- stream.writeShort( PersisterEnums.END );
- }
-
- public static class TupleSorter
- implements
- Comparator<Entry<LeftTuple, Integer>> {
- public static final TupleSorter instance = new TupleSorter();
-
- public int compare(Entry<LeftTuple, Integer> e1,
- Entry<LeftTuple, Integer> e2) {
- return e1.getValue() - e2.getValue();
- }
- }
-
- public static void writeActivation(MarshallerWriteContext context,
- LeftTuple leftTuple,
- AgendaItem agendaItem,
- RuleTerminalNode ruleTerminalNode) throws IOException {
- ObjectOutputStream stream = context.stream;
-
- stream.writeLong( agendaItem.getActivationNumber() );
-
- stream.writeInt( context.terminalTupleMap.get( leftTuple ) );
-
- stream.writeInt( agendaItem.getSalience() );
-
- Rule rule = agendaItem.getRule();
- stream.writeUTF( rule.getPackage() );
- stream.writeUTF( rule.getName() );
-
-// context.out.println( "Rule " + rule.getPackage() + "." + rule.getName() );
-
-// context.out.println( "AgendaItem long:" + agendaItem.getPropagationContext().getPropagationNumber() );
- stream.writeLong( agendaItem.getPropagationContext().getPropagationNumber() );
-
- if ( agendaItem.getActivationGroupNode() != null ) {
- stream.writeBoolean( true );
-// context.out.println( "ActivationGroup bool:" + true );
- stream.writeUTF( agendaItem.getActivationGroupNode().getActivationGroup().getName() );
-// context.out.println( "ActivationGroup string:" + agendaItem.getActivationGroupNode().getActivationGroup().getName() );
- } else {
- stream.writeBoolean( false );
-// context.out.println( "ActivationGroup bool:" + false );
- }
-
- stream.writeBoolean( agendaItem.isActivated() );
-// context.out.println( "AgendaItem bool:" + agendaItem.isActivated() );
-
- org.drools.util.LinkedList list = agendaItem.getLogicalDependencies();
- if ( list != null && !list.isEmpty() ) {
- for ( LogicalDependency node = (LogicalDependency) list.getFirst(); node != null; node = (LogicalDependency) node.getNext() ) {
- stream.writeShort( PersisterEnums.LOGICAL_DEPENDENCY );
- stream.writeInt( ((InternalFactHandle) node.getFactHandle()).getId() );
-// context.out.println( "Logical Depenency : int " + ((InternalFactHandle) node.getFactHandle()).getId() );
- }
- }
- stream.writeShort( PersisterEnums.END );
- }
-
- public static void writePropagationContexts(MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
-
- Entry<LeftTuple, Integer>[] entries = context.terminalTupleMap.entrySet().toArray( new Entry[context.terminalTupleMap.size()] );
- Arrays.sort( entries,
- TupleSorter.instance );
-
- //Map<LeftTuple, Integer> tuples = context.terminalTupleMap;
- if ( entries.length != 0 ) {
- Map<Long, PropagationContext> pcMap = new HashMap<Long, PropagationContext>();
- for ( Entry<LeftTuple, Integer> entry : entries ) {
- LeftTuple leftTuple = entry.getKey();
- if (leftTuple.getActivation() != null) {
- PropagationContext pc = leftTuple.getActivation()
- .getPropagationContext();
- if (!pcMap.containsKey(pc.getPropagationNumber())) {
- stream.writeShort(PersisterEnums.PROPAGATION_CONTEXT);
- writePropagationContext(context, pc);
- pcMap.put(pc.getPropagationNumber(), pc);
- }
- }
- }
- }
-
- stream.writeShort( PersisterEnums.END );
- }
-
- public static void writePropagationContext(MarshallerWriteContext context,
- PropagationContext pc) throws IOException {
- ObjectOutputStream stream = context.stream;
- Map<LeftTuple, Integer> tuples = context.terminalTupleMap;
-
- stream.writeInt( pc.getType() );
-
- Rule ruleOrigin = pc.getRuleOrigin();
- if ( ruleOrigin != null ) {
- stream.writeBoolean( true );
- stream.writeUTF( ruleOrigin.getPackage() );
- stream.writeUTF( ruleOrigin.getName() );
- } else {
- stream.writeBoolean( false );
- }
-
- LeftTuple tupleOrigin = pc.getLeftTupleOrigin();
- if ( tupleOrigin != null && tuples.containsKey( tupleOrigin )) {
- stream.writeBoolean( true );
- stream.writeInt( tuples.get( tupleOrigin ) );
- } else {
- stream.writeBoolean( false );
- }
-
- stream.writeLong( pc.getPropagationNumber() );
- if ( pc.getFactHandleOrigin() != null ) {
- stream.writeInt( ((InternalFactHandle)pc.getFactHandleOrigin()).getId() );
- } else {
- stream.writeInt( -1 );
- }
-
- stream.writeInt( pc.getActiveActivations() );
- stream.writeInt( pc.getDormantActivations() );
-
- stream.writeUTF( pc.getEntryPoint().getEntryPointId() );
- }
-
- public static void writeProcessInstances(MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
- List<org.drools.runtime.process.ProcessInstance> processInstances = new ArrayList<org.drools.runtime.process.ProcessInstance>( context.wm.getProcessInstances() );
- Collections.sort( processInstances,
- new Comparator<org.drools.runtime.process.ProcessInstance>() {
- public int compare(org.drools.runtime.process.ProcessInstance o1,
- org.drools.runtime.process.ProcessInstance o2) {
- return (int) (o1.getId() - o2.getId());
- }
- } );
- for ( org.drools.runtime.process.ProcessInstance processInstance : processInstances ) {
- stream.writeShort( PersisterEnums.PROCESS_INSTANCE );
- writeProcessInstance( context,
- (RuleFlowProcessInstance) processInstance );
- }
- stream.writeShort( PersisterEnums.END );
- }
-
- public static void writeProcessInstance(MarshallerWriteContext context,
- RuleFlowProcessInstance processInstance) throws IOException {
- ObjectOutputStream stream = context.stream;
- stream.writeLong( processInstance.getId() );
- stream.writeUTF( processInstance.getProcessId() );
- stream.writeInt( processInstance.getState() );
- stream.writeLong( processInstance.getNodeInstanceCounter() );
-
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
- Map<String, Object> variables = variableScopeInstance.getVariables();
- List<String> keys = new ArrayList<String>( variables.keySet() );
- Collections.sort( keys,
- new Comparator<String>() {
- public int compare(String o1,
- String o2) {
- return o1.compareTo( o2 );
- }
- } );
- stream.writeInt( keys.size() );
- for ( String key : keys ) {
- stream.writeUTF( key );
- stream.writeObject( variables.get( key ) );
- }
-
- SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) processInstance.getContextInstance( SwimlaneContext.SWIMLANE_SCOPE );
- Map<String, String> swimlaneActors = swimlaneContextInstance.getSwimlaneActors();
- stream.writeInt( swimlaneActors.size() );
- for ( Map.Entry<String, String> entry : swimlaneActors.entrySet() ) {
- stream.writeUTF( entry.getKey() );
- stream.writeUTF( entry.getValue() );
- }
-
- List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( processInstance.getNodeInstances() );
- Collections.sort( nodeInstances,
- new Comparator<NodeInstance>() {
- public int compare(NodeInstance o1,
- NodeInstance o2) {
- return (int) (o1.getId() - o2.getId());
- }
- } );
- for ( NodeInstance nodeInstance : nodeInstances ) {
- stream.writeShort( PersisterEnums.NODE_INSTANCE );
- writeNodeInstance( context,
- nodeInstance );
- }
- stream.writeShort( PersisterEnums.END );
- }
-
- public static void writeNodeInstance(MarshallerWriteContext context,
- NodeInstance nodeInstance) throws IOException {
- ObjectOutputStream stream = context.stream;
- stream.writeLong( nodeInstance.getId() );
- stream.writeLong( nodeInstance.getNodeId() );
- if ( nodeInstance instanceof RuleSetNodeInstance ) {
- stream.writeShort( PersisterEnums.RULE_SET_NODE_INSTANCE );
- } else if ( nodeInstance instanceof HumanTaskNodeInstance ) {
- stream.writeShort( PersisterEnums.HUMAN_TASK_NODE_INSTANCE );
- stream.writeLong( ((HumanTaskNodeInstance) nodeInstance).getWorkItem().getId() );
- } else if ( nodeInstance instanceof WorkItemNodeInstance ) {
- stream.writeShort( PersisterEnums.WORK_ITEM_NODE_INSTANCE );
- stream.writeLong( ((WorkItemNodeInstance) nodeInstance).getWorkItem().getId() );
- } else if ( nodeInstance instanceof SubProcessNodeInstance ) {
- stream.writeShort( PersisterEnums.SUB_PROCESS_NODE_INSTANCE );
- stream.writeLong( ((SubProcessNodeInstance) nodeInstance).getProcessInstanceId() );
- } else if ( nodeInstance instanceof MilestoneNodeInstance ) {
- stream.writeShort( PersisterEnums.MILESTONE_NODE_INSTANCE );
- List<Long> timerInstances =
- ((MilestoneNodeInstance) nodeInstance).getTimerInstances();
- if (timerInstances != null) {
- stream.writeInt(timerInstances.size());
- for (Long id: timerInstances) {
- stream.writeLong(id);
- }
- } else {
- stream.writeInt(0);
- }
- } else if ( nodeInstance instanceof TimerNodeInstance ) {
- stream.writeShort( PersisterEnums.TIMER_NODE_INSTANCE );
- stream.writeLong( ((TimerNodeInstance) nodeInstance).getTimerId() );
- } else if ( nodeInstance instanceof JoinInstance ) {
- stream.writeShort( PersisterEnums.JOIN_NODE_INSTANCE );
- Map<Long, Integer> triggers = ((JoinInstance) nodeInstance).getTriggers();
- stream.writeInt( triggers.size() );
- List<Long> keys = new ArrayList<Long>( triggers.keySet() );
- Collections.sort( keys,
- new Comparator<Long>() {
- public int compare(Long o1,
- Long o2) {
- return o1.compareTo( o2 );
- }
- } );
- for ( Long key : keys ) {
- stream.writeLong( key );
- stream.writeInt( triggers.get( key ) );
- }
- } else if ( nodeInstance instanceof CompositeContextNodeInstance ) {
- stream.writeShort( PersisterEnums.COMPOSITE_NODE_INSTANCE );
- CompositeContextNodeInstance compositeNodeInstance = (CompositeContextNodeInstance) nodeInstance;
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance) compositeNodeInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
- Map<String, Object> variables = variableScopeInstance.getVariables();
- List<String> keys = new ArrayList<String>( variables.keySet() );
- Collections.sort( keys,
- new Comparator<String>() {
- public int compare(String o1,
- String o2) {
- return o1.compareTo( o2 );
- }
- } );
- stream.writeInt( keys.size() );
- for ( String key : keys ) {
- stream.writeUTF( key );
- stream.writeObject( variables.get( key ) );
- }
- List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( compositeNodeInstance.getNodeInstances() );
- Collections.sort( nodeInstances,
- new Comparator<NodeInstance>() {
- public int compare(NodeInstance o1,
- NodeInstance o2) {
- return (int) (o1.getId() - o2.getId());
- }
- } );
- for ( NodeInstance subNodeInstance : nodeInstances ) {
- stream.writeShort( PersisterEnums.NODE_INSTANCE );
- writeNodeInstance( context,
- subNodeInstance );
- }
- stream.writeShort( PersisterEnums.END );
- } else if ( nodeInstance instanceof ForEachNodeInstance ) {
- stream.writeShort( PersisterEnums.FOR_EACH_NODE_INSTANCE );
- ForEachNodeInstance forEachNodeInstance = (ForEachNodeInstance) nodeInstance;
- List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( forEachNodeInstance.getNodeInstances() );
- Collections.sort( nodeInstances,
- new Comparator<NodeInstance>() {
- public int compare(NodeInstance o1,
- NodeInstance o2) {
- return (int) (o1.getId() - o2.getId());
- }
- } );
- for ( NodeInstance subNodeInstance : nodeInstances ) {
- if ( subNodeInstance instanceof CompositeContextNodeInstance ) {
- stream.writeShort( PersisterEnums.NODE_INSTANCE );
- writeNodeInstance( context,
- subNodeInstance );
- }
- }
- stream.writeShort( PersisterEnums.END );
- } else {
- // TODO ForEachNodeInstance
- // TODO timer manager
- throw new IllegalArgumentException( "Unknown node instance type: " + nodeInstance );
- }
- }
-
- public static void writeWorkItems(MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
-
- List<WorkItem> workItems = new ArrayList<WorkItem>(
- ((WorkItemManager) context.wm.getWorkItemManager()).getWorkItems() );
- Collections.sort( workItems,
- new Comparator<WorkItem>() {
- public int compare(WorkItem o1,
- WorkItem o2) {
- return (int) (o2.getId() - o1.getId());
- }
- } );
- for ( WorkItem workItem : workItems ) {
- stream.writeShort( PersisterEnums.WORK_ITEM );
- writeWorkItem( context,
- workItem );
- }
- stream.writeShort( PersisterEnums.END );
- }
-
- public static void writeWorkItem(MarshallerWriteContext context,
- WorkItem workItem) throws IOException {
- ObjectOutputStream stream = context.stream;
- stream.writeLong( workItem.getId() );
- stream.writeLong( workItem.getProcessInstanceId() );
- stream.writeUTF( workItem.getName() );
- stream.writeInt( workItem.getState() );
- Map<String, Object> parameters = workItem.getParameters();
- stream.writeInt( parameters.size() );
- for ( Map.Entry<String, Object> entry : parameters.entrySet() ) {
- stream.writeUTF( entry.getKey() );
- stream.writeObject( entry.getValue() );
- }
- }
-
- public static void writeTimers(MarshallerWriteContext context) throws IOException {
- ObjectOutputStream stream = context.stream;
-
- TimerManager timerManager = context.wm.getTimerManager();
- long timerId = timerManager.internalGetTimerId();
- stream.writeLong( timerId );
-
- // need to think on how to fix this
- // stream.writeObject( timerManager.getTimerService() );
-
- List<TimerInstance> timers = new ArrayList<TimerInstance>( timerManager.getTimers() );
- Collections.sort( timers,
- new Comparator<TimerInstance>() {
- public int compare(TimerInstance o1,
- TimerInstance o2) {
- return (int) (o2.getId() - o1.getId());
- }
- } );
- for ( TimerInstance timer : timers ) {
- stream.writeShort( PersisterEnums.TIMER );
- writeTimer( context,
- timer );
- }
- stream.writeShort( PersisterEnums.END );
- }
-
- public static void writeTimer(MarshallerWriteContext context,
- TimerInstance timer) throws IOException {
- ObjectOutputStream stream = context.stream;
- stream.writeLong( timer.getId() );
- stream.writeLong( timer.getTimerId() );
- stream.writeLong( timer.getDelay() );
- stream.writeLong( timer.getPeriod() );
- stream.writeLong( timer.getProcessInstanceId() );
- stream.writeLong( timer.getActivated().getTime() );
- Date lastTriggered = timer.getLastTriggered();
- if ( lastTriggered != null ) {
- stream.writeBoolean( true );
- stream.writeLong( timer.getLastTriggered().getTime() );
- } else {
- stream.writeBoolean( false );
- }
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterEnums.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterEnums.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterEnums.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,43 +0,0 @@
-package org.drools.marshalling;
-
-public class PersisterEnums {
- public static final short REPEAT = 0;
- public static final short END = 1;
- public static final short FACT_HANDLE = 2;
- public static final short LEFT_TUPLE = 3;
- public static final short RIGHT_TUPLE = 4;
-
- public static final short INITIAL_FACT_NODE = 5;
-
- public static final short LEFT_TUPLE_BLOCKED = 6;
- public static final short LEFT_TUPLE_NOT_BLOCKED = 7;
-
- public static final short ACTIVATION = 8;
- public static final short PROPAGATION_CONTEXT = 9;
-
- public static final short WORKING_MEMORY_ACTION = 10;
-
- public static final short EQUALITY_KEY = 11;
- public static final short LOGICAL_DEPENDENCY = 12;
-
- public static final short AGENDA_GROUP = 13;
- public static final short ACTIVATION_GROUP = 14;
-
- public static final short RULE_FLOW_GROUP = 15;
- public static final short RULE_FLOW_NODE = 16;
-
- public static final short PROCESS_INSTANCE = 17;
- public static final short NODE_INSTANCE = 18;
- public static final short WORK_ITEM = 19;
- public static final short RULE_SET_NODE_INSTANCE = 20;
- public static final short WORK_ITEM_NODE_INSTANCE = 21;
- public static final short SUB_PROCESS_NODE_INSTANCE = 22;
- public static final short MILESTONE_NODE_INSTANCE = 23;
- public static final short TIMER_NODE_INSTANCE = 24;
- public static final short JOIN_NODE_INSTANCE = 25;
- public static final short COMPOSITE_NODE_INSTANCE = 26;
- public static final short HUMAN_TASK_NODE_INSTANCE = 27;
- public static final short FOR_EACH_NODE_INSTANCE = 28;
- public static final short TIMER = 29;
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterHelper.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterHelper.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,39 +0,0 @@
-package org.drools.marshalling;
-
-import java.io.IOException;
-
-import org.drools.common.WorkingMemoryAction;
-import org.drools.common.RuleFlowGroupImpl.DeactivateCallback;
-import org.drools.common.TruthMaintenanceSystem.LogicalRetractCallback;
-import org.drools.process.instance.event.DefaultSignalManager.SignalProcessInstanceAction;
-import org.drools.reteoo.PropagationQueuingNode.PropagateAction;
-import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
-
-public class PersisterHelper {
- public static WorkingMemoryAction readWorkingMemoryAction(MarshallerReaderContext context) throws IOException, ClassNotFoundException {
- int type = context.readInt();
- switch(type) {
- case WorkingMemoryAction.WorkingMemoryReteAssertAction : {
- return new WorkingMemoryReteAssertAction(context);
- }
- case WorkingMemoryAction.DeactivateCallback : {
- return new DeactivateCallback(context);
- }
- case WorkingMemoryAction.PropagateAction : {
- return new PropagateAction(context);
- }
- case WorkingMemoryAction.LogicalRetractCallback : {
- return new LogicalRetractCallback(context);
- }
-
- case WorkingMemoryAction.SignalProcessInstanceAction : {
- return new SignalProcessInstanceAction(context);
- }
- }
- return null;
- }
-
- public void write(MarshallerWriteContext context) throws IOException {
-
- }
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterKey.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterKey.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterKey.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,7 +0,0 @@
-package org.drools.marshalling;
-
-public interface PersisterKey {
- public boolean equal(Object object1, Object object2);
-
- public int hashCode(Object object);
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategy.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategy.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategy.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,19 +0,0 @@
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-
-public interface PlaceholderResolverStrategy {
-
- public void setIndex(int id);
-
- public int getIndex();
-
- public boolean accept(Object object);
-
- public void write(ObjectOutputStream os,
- Object object) throws IOException;
-
- public ObjectPlaceholder read(ObjectInputStream os) throws IOException, ClassNotFoundException;
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategyAcceptor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategyAcceptor.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategyAcceptor.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,5 +0,0 @@
-package org.drools.marshalling;
-
-public interface PlaceholderResolverStrategyAcceptor {
- public boolean accept(Object object);
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategyFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategyFactory.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategyFactory.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,30 +0,0 @@
-package org.drools.marshalling;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class PlaceholderResolverStrategyFactory {
- List<PlaceholderResolverStrategy> strategiesList;
-
- public PlaceholderResolverStrategyFactory() {
- this.strategiesList = new ArrayList<PlaceholderResolverStrategy>();
- }
-
- public void addStrategy(PlaceholderResolverStrategy strategy) {
- strategy.setIndex( this.strategiesList.size() );
- this.strategiesList.add( strategy );
- }
-
- public PlaceholderResolverStrategy getStrategy(int index) {
- return this.strategiesList.get( index );
- }
-
- public PlaceholderResolverStrategy getStrategy(Object object) {
- for ( PlaceholderResolverStrategy strategy: strategiesList ) {
- if ( strategy.accept( object ) ) {
- return strategy;
- }
- }
- throw new RuntimeException( "Unable to info PlaceholderResolverStrategy for class : " + object.getClass() + " object : " + object );
- }
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Placeholders.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Placeholders.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Placeholders.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,129 +0,0 @@
-package org.drools.marshalling;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.drools.util.AbstractHashTable;
-import org.drools.util.Entry;
-
-public class Placeholders extends AbstractHashTable {
- private List<Object> ids;
-
- public Placeholders() {
- super();
- this.ids = new ArrayList<Object>();
- }
-
- public PlaceholderEntry lookupPlaceholder(Object object, PersisterKey key) {
- final int hashCode = key.hashCode( object );
- final int index = indexOf( hashCode,
- this.table.length );
-
- PlaceholderEntry current = (PlaceholderEntry) this.table[index];
- while ( current != null ) {
- if ( hashCode == current.hashCode && current.key == key && key.equal( object,
- current.object ) ) {
- return current;
- }
- current = (PlaceholderEntry) current.getNext();
- }
- return null;
- }
-
- public PlaceholderEntry assignPlaceholder(Object object,
- PersisterKey key) {
- final int hashCode = key.hashCode( object );
- final int index = indexOf( hashCode,
- this.table.length );
-
- int id = ids.size();
- this.ids.add( object );
- PlaceholderEntry entry = new PlaceholderEntry( object,
- id,
- key );
-
- entry.next = this.table[index];
- this.table[index] = entry;
-
- if ( this.size++ >= this.threshold ) {
- resize( 2 * this.table.length );
- }
-
- return entry;
- }
-
- public Object lookupObject(int id) {
- return this.ids.get( id );
- }
-
- public static class PlaceholderEntry
- implements
- Entry {
-
- private static final long serialVersionUID = 400L;
-
- public Object object;
-
- public int id;
-
- public PersisterKey key;
-
- public int hashCode;
-
- public Entry next;
-
- // private LinkedList list;
-
- public PlaceholderEntry(final Object object,
- final int id,
- final PersisterKey key) {
- this.object = object;
- this.id = id;
- this.key = key;
- this.hashCode = key.hashCode( object );
- }
-
- // public PlaceholderEntry(final InternalFactHandle handle,
- // final int hashCode) {
- // this.handle = handle;
- // this.hashCode = hashCode;
- // // this.list = new LinkedList();
- // }
-
- public Entry getNext() {
- return this.next;
- }
-
- public void setNext(final Entry next) {
- this.next = next;
- }
-
- public int hashCode() {
- return this.hashCode;
- }
-
- public String toString() {
- return "Placeholder( object=" + this.object + " id = " + this.id + " hashcode=" + this.hashCode + " next=" + this.next + " )";
- }
-
- public Object getObject() {
- return object;
- }
-
- public int getId() {
- return id;
- }
-
- public PersisterKey getKey() {
- return key;
- }
-
- }
-
- @Override
- public Entry getBucket(Object object) {
- // TODO Auto-generated method stub
- return null;
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ProcessInstanceMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ProcessInstanceMarshaller.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ProcessInstanceMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,39 +0,0 @@
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-
-import org.drools.runtime.process.NodeInstance;
-import org.drools.runtime.process.NodeInstanceContainer;
-import org.drools.runtime.process.ProcessInstance;
-import org.drools.workflow.instance.WorkflowProcessInstance;
-import org.drools.workflow.instance.impl.NodeInstanceImpl;
-
-/**
- * A ProcessInstanceMarshaller must contain all the write/read logic for nodes
- * of a specific ProcessInstance. It colaborates with OutputMarshaller and
- * InputMarshaller, that delegates in a ProcessInstanceMarshaller to stream in/out runtime
- * information.
- *
- * @see OutPutMarshaller
- * @see InputMarshaller
- * @see ProcessMarshallerRegistry
- *
- * @author mfossati, salaboy
- */
-
-public interface ProcessInstanceMarshaller {
-
- public void writeProcessInstance(MarshallerWriteContext context,
- ProcessInstance processInstance) throws IOException;
-
- public void writeNodeInstance(MarshallerWriteContext context,
- NodeInstance nodeInstance) throws IOException;
-
- public ProcessInstance readProcessInstance(MarshallerReaderContext context)
- throws IOException;
-
- public NodeInstance readNodeInstance(MarshallerReaderContext context,
- NodeInstanceContainer nodeInstanceContainer,
- WorkflowProcessInstance processInstance) throws IOException;
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ProcessMarshallerRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ProcessMarshallerRegistry.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ProcessMarshallerRegistry.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,38 +0,0 @@
-package org.drools.marshalling;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.drools.process.instance.impl.ProcessInstanceImpl;
-import org.drools.ruleflow.core.RuleFlowProcess;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
-
-/**
-* Registry for Process/ProcessMarshaller
-*/
-public class ProcessMarshallerRegistry {
-
- public static ProcessMarshallerRegistry INSTANCE = new ProcessMarshallerRegistry();
-
- private Map<String , ProcessInstanceMarshaller> registry;
-
- private ProcessMarshallerRegistry() {
- this.registry = new HashMap<String, ProcessInstanceMarshaller >();
-
- // default logic that used to be in OutPutMarshaller:
- register( RuleFlowProcess.RULEFLOW_TYPE,
- RuleFlowProcessInstanceMarshaller.INSTANCE );
- }
-
- public void register(String cls,
- ProcessInstanceMarshaller marchaller) {
- this.registry.put(cls, marchaller);
- }
-
- @SuppressWarnings("unchecked")
- public ProcessInstanceMarshaller getMarshaller(String type) {
- return this.registry.get(type);
- }
-
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RightTupleKey.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RightTupleKey.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RightTupleKey.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,48 +0,0 @@
-/**
- *
- */
-package org.drools.marshalling;
-
-import org.drools.reteoo.Sink;
-
-public class RightTupleKey {
- private final int id;
- private final Sink sink;
-
- public RightTupleKey(int id,
- Sink sink) {
- super();
- this.id = id;
- this.sink = sink;
- }
-
- public int getId() {
- return id;
- }
-
- public Sink getSink() {
- return sink;
- }
-
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + id;
- result = prime * result + sink.getId();
- return result;
- }
-
- public boolean equals(Object obj) {
- if ( this == obj ) return true;
- if ( obj == null ) return false;
- if ( getClass() != obj.getClass() ) return false;
-
- final RightTupleKey other = (RightTupleKey) obj;
- if ( id != other.id ) return false;
- if ( sink == null ) {
- if ( other.sink != null ) return false;
- } else if ( sink.getId() != other.sink.getId() ) return false;
- return true;
- }
-
-}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RuleBaseNodes.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RuleBaseNodes.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RuleBaseNodes.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,79 +0,0 @@
-package org.drools.marshalling;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.drools.common.BaseNode;
-import org.drools.common.InternalRuleBase;
-import org.drools.reteoo.LeftTupleSink;
-import org.drools.reteoo.LeftTupleSource;
-import org.drools.reteoo.ObjectSink;
-import org.drools.reteoo.ObjectSource;
-import org.drools.reteoo.ObjectTypeNode;
-import org.drools.reteoo.RuleTerminalNode;
-
-public class RuleBaseNodes {
- public static Map<Integer, BaseNode> getNodeMap(InternalRuleBase ruleBase) {
- Map<Integer, BaseNode> nodes = new HashMap<Integer, BaseNode>();
- buildNodeMap( ruleBase, nodes );
- return nodes;
- }
-
- private static void buildNodeMap(InternalRuleBase ruleBase,
- Map<Integer, BaseNode> nodes) {
- for ( ObjectTypeNode sink : ruleBase.getRete().getObjectTypeNodes() ) {
- nodes.put( sink.getId(),
- sink );
- addObjectSink( ruleBase,
- sink,
- nodes );
- }
- }
-
- private static void addObjectSink(InternalRuleBase ruleBase,
- ObjectSink sink,
- Map<Integer, BaseNode> nodes) {
- // we don't need to store alpha nodes, as they have no state to serialise
- if ( sink instanceof LeftTupleSource ) {
- LeftTupleSource node = (LeftTupleSource) sink;
- for ( LeftTupleSink leftTupleSink : node.getSinkPropagator().getSinks() ) {
- addLeftTupleSink( ruleBase,
- leftTupleSink,
- nodes );
- }
- } else {
- ObjectSource node = ( ObjectSource ) sink;
- for ( ObjectSink objectSink : node.getSinkPropagator().getSinks() ) {
- addObjectSink( ruleBase,
- objectSink,
- nodes );
- }
- }
- }
-
- private static void addLeftTupleSink(InternalRuleBase ruleBase,
- LeftTupleSink sink,
- Map<Integer, BaseNode> nodes) {
- if ( sink instanceof LeftTupleSource ) {
- nodes.put( sink.getId(),
- (LeftTupleSource) sink );
- for ( LeftTupleSink leftTupleSink : ((LeftTupleSource) sink).getSinkPropagator().getSinks() ) {
- addLeftTupleSink( ruleBase,
- leftTupleSink,
- nodes );
- }
- } else if ( sink instanceof ObjectSource ) {
- // it may be a RIAN
- nodes.put( sink.getId(),
- (ObjectSource) sink );
- for ( ObjectSink objectSink : ((ObjectSource)sink).getSinkPropagator().getSinks() ) {
- addObjectSink( ruleBase,
- objectSink,
- nodes );
- }
- } else if ( sink instanceof RuleTerminalNode ) {
- nodes.put( sink.getId(),
- (RuleTerminalNode) sink );
- }
- }
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RuleFlowProcessInstanceMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RuleFlowProcessInstanceMarshaller.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RuleFlowProcessInstanceMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,85 +0,0 @@
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-
-import org.drools.common.InternalRuleBase;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.process.core.context.swimlane.SwimlaneContext;
-import org.drools.process.core.context.variable.VariableScope;
-import org.drools.process.instance.context.swimlane.SwimlaneContextInstance;
-import org.drools.process.instance.context.variable.VariableScopeInstance;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
-import org.drools.runtime.process.NodeInstance;
-import org.drools.runtime.process.ProcessInstance;
-import org.drools.workflow.instance.impl.NodeInstanceImpl;
-
-/**
- * Marshaller class for RuleFlowProcessInstances
- *
- * @author mfossati
- */
-
-public class RuleFlowProcessInstanceMarshaller extends
- AbstractProcessInstanceMarshaller {
-
- public static RuleFlowProcessInstanceMarshaller INSTANCE = new RuleFlowProcessInstanceMarshaller();
-
- private RuleFlowProcessInstanceMarshaller() {
- }
-
- public ProcessInstance readProcessInstance(MarshallerReaderContext context)
- throws IOException {
- ObjectInputStream stream = context.stream;
- InternalRuleBase ruleBase = context.ruleBase;
- InternalWorkingMemory wm = context.wm;
-
- RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance();
- processInstance.setId(stream.readLong());
- String processId = stream.readUTF();
- processInstance.setProcessId(processId);
- if (ruleBase != null) {
- processInstance.setProcess(ruleBase.getProcess(processId));
- }
- processInstance.setState(stream.readInt());
- long nodeInstanceCounter = stream.readLong();
- processInstance.setWorkingMemory(wm);
-
- int nbVariables = stream.readInt();
- if (nbVariables > 0) {
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance
- .getContextInstance(VariableScope.VARIABLE_SCOPE);
- for (int i = 0; i < nbVariables; i++) {
- String name = stream.readUTF();
- try {
- Object value = stream.readObject();
- variableScopeInstance.setVariable(name, value);
- } catch (ClassNotFoundException e) {
- throw new IllegalArgumentException(
- "Could not reload variable " + name);
- }
- }
- }
-
- int nbSwimlanes = stream.readInt();
- if (nbSwimlanes > 0) {
- SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) processInstance
- .getContextInstance(SwimlaneContext.SWIMLANE_SCOPE);
- for (int i = 0; i < nbSwimlanes; i++) {
- String name = stream.readUTF();
- String value = stream.readUTF();
- swimlaneContextInstance.setActorId(name, value);
- }
- }
-
- while (stream.readShort() == PersisterEnums.NODE_INSTANCE) {
- readNodeInstance(context, processInstance, processInstance);
- }
-
- processInstance.internalSetNodeInstanceCounter(nodeInstanceCounter);
- if (wm != null) {
- processInstance.reconnect();
- }
- return processInstance;
- }
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/SerializablePlaceholder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/SerializablePlaceholder.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/SerializablePlaceholder.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,14 +0,0 @@
-package org.drools.marshalling;
-
-public class SerializablePlaceholder implements ObjectPlaceholder {
- private final Object object;
-
- public SerializablePlaceholder(Object object) {
- this.object = object;
- }
-
- public Object resolveObject() {
- return object;
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/SerializablePlaceholderResolverStrategy.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/SerializablePlaceholderResolverStrategy.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/SerializablePlaceholderResolverStrategy.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,41 +0,0 @@
-package org.drools.marshalling;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-
-public class SerializablePlaceholderResolverStrategy
- implements
- PlaceholderResolverStrategy {
-
- private int index;
-
- private PlaceholderResolverStrategyAcceptor acceptor;
-
- public SerializablePlaceholderResolverStrategy(PlaceholderResolverStrategyAcceptor acceptor) {
- this.acceptor = acceptor;
- }
-
- public int getIndex() {
- return this.index;
- }
-
- public void setIndex(int index) {
- this.index = index;
- }
-
- public ObjectPlaceholder read(ObjectInputStream os) throws IOException,
- ClassNotFoundException {
- return new SerializablePlaceholder( os.readObject() );
- }
-
- public void write(ObjectOutputStream os,
- Object object) throws IOException {
- os.writeObject( object );
- }
-
- public boolean accept(Object object) {
- return acceptor.accept( object );
- }
-
-}
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/AbstractProcessInstanceMarshaller.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/AbstractProcessInstanceMarshaller.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/AbstractProcessInstanceMarshaller.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/AbstractProcessInstanceMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,344 @@
+package org.drools.marshalling.impl;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.process.core.context.swimlane.SwimlaneContext;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.context.swimlane.SwimlaneContextInstance;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.process.instance.impl.ProcessInstanceImpl;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.NodeInstanceContainer;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.workflow.instance.WorkflowProcessInstance;
+import org.drools.workflow.instance.impl.NodeInstanceImpl;
+import org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl;
+import org.drools.workflow.instance.node.CompositeContextNodeInstance;
+import org.drools.workflow.instance.node.ForEachNodeInstance;
+import org.drools.workflow.instance.node.HumanTaskNodeInstance;
+import org.drools.workflow.instance.node.JoinInstance;
+import org.drools.workflow.instance.node.MilestoneNodeInstance;
+import org.drools.workflow.instance.node.RuleSetNodeInstance;
+import org.drools.workflow.instance.node.SubProcessNodeInstance;
+import org.drools.workflow.instance.node.TimerNodeInstance;
+import org.drools.workflow.instance.node.WorkItemNodeInstance;
+
+/* Author: mfossati, salaboy */
+public abstract class AbstractProcessInstanceMarshaller implements
+ ProcessInstanceMarshaller {
+
+ // Output methods
+
+ public void writeProcessInstance(MarshallerWriteContext context,
+ ProcessInstance processInstance) throws IOException {
+
+ WorkflowProcessInstanceImpl workFlow = (WorkflowProcessInstanceImpl) processInstance;
+ ObjectOutputStream stream = context.stream;
+ stream.writeLong(workFlow.getId());
+ stream.writeUTF(workFlow.getProcessId());
+ stream.writeInt(workFlow.getState());
+ stream.writeLong(workFlow.getNodeInstanceCounter());
+
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) workFlow.getContextInstance( VariableScope.VARIABLE_SCOPE );
+ Map<String, Object> variables = variableScopeInstance.getVariables();
+ List<String> keys = new ArrayList<String>( variables.keySet() );
+ Collections.sort( keys,
+ new Comparator<String>() {
+ public int compare(String o1,
+ String o2) {
+ return o1.compareTo( o2 );
+ }
+ } );
+ stream.writeInt( keys.size() );
+ for ( String key : keys ) {
+ stream.writeUTF( key );
+ stream.writeObject( variables.get( key ) );
+ }
+
+ SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) workFlow.getContextInstance( SwimlaneContext.SWIMLANE_SCOPE );
+
+ if (swimlaneContextInstance!=null) {
+ Map<String, String> swimlaneActors = swimlaneContextInstance
+ .getSwimlaneActors();
+ stream.writeInt(swimlaneActors.size());
+ for (Map.Entry<String, String> entry : swimlaneActors.entrySet()) {
+ stream.writeUTF(entry.getKey());
+ stream.writeUTF(entry.getValue());
+ }
+ }
+ List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( workFlow.getNodeInstances() );
+ Collections.sort( nodeInstances,
+ new Comparator<NodeInstance>() {
+ public int compare(NodeInstance o1,
+ NodeInstance o2) {
+ return (int) (o1.getId() - o2.getId());
+ }
+ } );
+ for ( NodeInstance nodeInstance : nodeInstances ) {
+ stream.writeShort( PersisterEnums.NODE_INSTANCE );
+ writeNodeInstance( context,
+ nodeInstance );
+ }
+ stream.writeShort( PersisterEnums.END );
+ }
+
+ public void writeNodeInstance(MarshallerWriteContext context,
+ NodeInstance nodeInstance) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ stream.writeLong(nodeInstance.getId());
+ stream.writeLong(nodeInstance.getNodeId());
+ writeNodeInstanceContent(stream, nodeInstance, context);
+ }
+
+ protected void writeNodeInstanceContent(ObjectOutputStream stream,
+ NodeInstance nodeInstance, MarshallerWriteContext context)
+ throws IOException {
+ if ( nodeInstance instanceof RuleSetNodeInstance ) {
+ stream.writeShort( PersisterEnums.RULE_SET_NODE_INSTANCE );
+ } else if ( nodeInstance instanceof HumanTaskNodeInstance ) {
+ stream.writeShort( PersisterEnums.HUMAN_TASK_NODE_INSTANCE );
+ stream.writeLong( ((HumanTaskNodeInstance) nodeInstance).getWorkItem().getId() );
+ } else if ( nodeInstance instanceof WorkItemNodeInstance ) {
+ stream.writeShort( PersisterEnums.WORK_ITEM_NODE_INSTANCE );
+ stream.writeLong( ((WorkItemNodeInstance) nodeInstance).getWorkItem().getId() );
+ } else if ( nodeInstance instanceof SubProcessNodeInstance ) {
+ stream.writeShort( PersisterEnums.SUB_PROCESS_NODE_INSTANCE );
+ stream.writeLong( ((SubProcessNodeInstance) nodeInstance).getProcessInstanceId() );
+ } else if ( nodeInstance instanceof MilestoneNodeInstance ) {
+ stream.writeShort( PersisterEnums.MILESTONE_NODE_INSTANCE );
+ List<Long> timerInstances =
+ ((MilestoneNodeInstance) nodeInstance).getTimerInstances();
+ if (timerInstances != null) {
+ stream.writeInt(timerInstances.size());
+ for (Long id: timerInstances) {
+ stream.writeLong(id);
+ }
+ } else {
+ stream.writeInt(0);
+ }
+ } else if ( nodeInstance instanceof TimerNodeInstance ) {
+ stream.writeShort( PersisterEnums.TIMER_NODE_INSTANCE );
+ stream.writeLong( ((TimerNodeInstance) nodeInstance).getTimerId() );
+ } else if ( nodeInstance instanceof JoinInstance ) {
+ stream.writeShort( PersisterEnums.JOIN_NODE_INSTANCE );
+ Map<Long, Integer> triggers = ((JoinInstance) nodeInstance).getTriggers();
+ stream.writeInt( triggers.size() );
+ List<Long> keys = new ArrayList<Long>( triggers.keySet() );
+ Collections.sort( keys,
+ new Comparator<Long>() {
+ public int compare(Long o1,
+ Long o2) {
+ return o1.compareTo( o2 );
+ }
+ } );
+ for ( Long key : keys ) {
+ stream.writeLong( key );
+ stream.writeInt( triggers.get( key ) );
+ }
+ } else if ( nodeInstance instanceof CompositeContextNodeInstance ) {
+ stream.writeShort( PersisterEnums.COMPOSITE_NODE_INSTANCE );
+ CompositeContextNodeInstance compositeNodeInstance = (CompositeContextNodeInstance) nodeInstance;
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) compositeNodeInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
+ Map<String, Object> variables = variableScopeInstance.getVariables();
+ List<String> keys = new ArrayList<String>( variables.keySet() );
+ Collections.sort( keys,
+ new Comparator<String>() {
+ public int compare(String o1,
+ String o2) {
+ return o1.compareTo( o2 );
+ }
+ } );
+ stream.writeInt( keys.size() );
+ for ( String key : keys ) {
+ stream.writeUTF( key );
+ stream.writeObject( variables.get( key ) );
+ }
+ List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( compositeNodeInstance.getNodeInstances() );
+ Collections.sort( nodeInstances,
+ new Comparator<NodeInstance>() {
+ public int compare(NodeInstance o1,
+ NodeInstance o2) {
+ return (int) (o1.getId() - o2.getId());
+ }
+ } );
+ for ( NodeInstance subNodeInstance : nodeInstances ) {
+ stream.writeShort( PersisterEnums.NODE_INSTANCE );
+ writeNodeInstance( context,
+ subNodeInstance );
+ }
+ stream.writeShort( PersisterEnums.END );
+ } else if ( nodeInstance instanceof ForEachNodeInstance ) {
+ stream.writeShort( PersisterEnums.FOR_EACH_NODE_INSTANCE );
+ ForEachNodeInstance forEachNodeInstance = (ForEachNodeInstance) nodeInstance;
+ List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( forEachNodeInstance.getNodeInstances() );
+ Collections.sort( nodeInstances,
+ new Comparator<NodeInstance>() {
+ public int compare(NodeInstance o1,
+ NodeInstance o2) {
+ return (int) (o1.getId() - o2.getId());
+ }
+ } );
+ for ( NodeInstance subNodeInstance : nodeInstances ) {
+ if ( subNodeInstance instanceof CompositeContextNodeInstance ) {
+ stream.writeShort( PersisterEnums.NODE_INSTANCE );
+ writeNodeInstance( context,
+ subNodeInstance );
+ }
+ }
+ stream.writeShort( PersisterEnums.END );
+ } else {
+ // TODO ForEachNodeInstance
+ // TODO timer manager
+ throw new IllegalArgumentException( "Unknown node instance type: " + nodeInstance );
+ }
+ }
+
+ // Input methods
+
+ public ProcessInstance readProcessInstance(MarshallerReaderContext context)
+ throws IOException {
+ ObjectInputStream stream = context.stream;
+ InternalRuleBase ruleBase = context.ruleBase;
+ InternalWorkingMemory wm = context.wm;
+
+ RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance();
+ processInstance.setId( stream.readLong() );
+ String processId = stream.readUTF();
+ processInstance.setProcessId( processId );
+ if ( ruleBase != null ) {
+ processInstance.setProcess( ruleBase.getProcess( processId ) );
+ }
+ processInstance.setState( stream.readInt() );
+ long nodeInstanceCounter = stream.readLong();
+ processInstance.setWorkingMemory( wm );
+
+ int nbVariables = stream.readInt();
+ if ( nbVariables > 0 ) {
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
+ for ( int i = 0; i < nbVariables; i++ ) {
+ String name = stream.readUTF();
+ try {
+ Object value = stream.readObject();
+ variableScopeInstance.setVariable( name,
+ value );
+ } catch ( ClassNotFoundException e ) {
+ throw new IllegalArgumentException( "Could not reload variable " + name );
+ }
+ }
+ }
+
+ int nbSwimlanes = stream.readInt();
+ if ( nbSwimlanes > 0 ) {
+ SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) processInstance.getContextInstance( SwimlaneContext.SWIMLANE_SCOPE );
+ for ( int i = 0; i < nbSwimlanes; i++ ) {
+ String name = stream.readUTF();
+ String value = stream.readUTF();
+ swimlaneContextInstance.setActorId( name,
+ value );
+ }
+ }
+
+ while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
+ readNodeInstance( context,
+ processInstance,
+ processInstance );
+ }
+
+ processInstance.internalSetNodeInstanceCounter( nodeInstanceCounter );
+ if ( wm != null ) {
+ processInstance.reconnect();
+ }
+ return processInstance;
+ }
+
+ public NodeInstance readNodeInstance(MarshallerReaderContext context,
+ NodeInstanceContainer nodeInstanceContainer,
+ WorkflowProcessInstance processInstance) throws IOException {
+ ObjectInputStream stream = context.stream;
+ long id = stream.readLong();
+ long nodeId = stream.readLong();
+ int nodeType = stream.readShort();
+ NodeInstanceImpl nodeInstance = readNodeInstanceContent(nodeType,
+ stream, context, processInstance);
+
+ nodeInstance.setNodeId(nodeId);
+ nodeInstance.setNodeInstanceContainer(nodeInstanceContainer);
+ nodeInstance.setProcessInstance(processInstance);
+ nodeInstance.setId(id);
+
+ return nodeInstance;
+ }
+
+ protected NodeInstanceImpl readNodeInstanceContent(int nodeType,
+ ObjectInputStream stream, MarshallerReaderContext context,
+ WorkflowProcessInstance processInstance) throws IOException {
+ NodeInstanceImpl nodeInstance = null;
+ switch ( nodeType ) {
+ case PersisterEnums.RULE_SET_NODE_INSTANCE :
+ nodeInstance = new RuleSetNodeInstance();
+ break;
+ case PersisterEnums.HUMAN_TASK_NODE_INSTANCE :
+ nodeInstance = new HumanTaskNodeInstance();
+ ((HumanTaskNodeInstance) nodeInstance).internalSetWorkItemId( stream.readLong() );
+ break;
+ case PersisterEnums.WORK_ITEM_NODE_INSTANCE :
+ nodeInstance = new WorkItemNodeInstance();
+ ((WorkItemNodeInstance) nodeInstance).internalSetWorkItemId( stream.readLong() );
+ break;
+ case PersisterEnums.SUB_PROCESS_NODE_INSTANCE :
+ nodeInstance = new SubProcessNodeInstance();
+ ((SubProcessNodeInstance) nodeInstance).internalSetProcessInstanceId( stream.readLong() );
+ break;
+ case PersisterEnums.MILESTONE_NODE_INSTANCE :
+ nodeInstance = new MilestoneNodeInstance();
+ int nbTimerInstances = stream.readInt();
+ if (nbTimerInstances > 0) {
+ List<Long> timerInstances = new ArrayList<Long>();
+ for (int i = 0; i < nbTimerInstances; i++) {
+ timerInstances.add(stream.readLong());
+ }
+ ((MilestoneNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances);
+ }
+ break;
+ case PersisterEnums.TIMER_NODE_INSTANCE :
+ nodeInstance = new TimerNodeInstance();
+ ((TimerNodeInstance) nodeInstance).internalSetTimerId( stream.readLong() );
+ break;
+ case PersisterEnums.JOIN_NODE_INSTANCE :
+ nodeInstance = new JoinInstance();
+ int number = stream.readInt();
+ if ( number > 0 ) {
+ Map<Long, Integer> triggers = new HashMap<Long, Integer>();
+ for ( int i = 0; i < number; i++ ) {
+ long l = stream.readLong();
+ int count = stream.readInt();
+ triggers.put( l,
+ count );
+ }
+ ((JoinInstance) nodeInstance).internalSetTriggers( triggers );
+ }
+ break;
+ case PersisterEnums.COMPOSITE_NODE_INSTANCE :
+ nodeInstance = new CompositeContextNodeInstance();
+ break;
+ case PersisterEnums.FOR_EACH_NODE_INSTANCE :
+ nodeInstance = new ForEachNodeInstance();
+ break;
+ default :
+ throw new IllegalArgumentException( "Unknown node type: " + nodeType );
+ }
+ return nodeInstance;
+
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/AbstractProcessInstanceMarshaller.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ClassObjectMarshallingStrategyAcceptor.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ClassPlaceholderResolverStrategyAcceptor.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ClassObjectMarshallingStrategyAcceptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ClassObjectMarshallingStrategyAcceptor.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,34 @@
+package org.drools.marshalling.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.marshalling.ObjectMarshallingStrategyAcceptor;
+import org.drools.util.ClassUtils;
+
+public class ClassObjectMarshallingStrategyAcceptor implements ObjectMarshallingStrategyAcceptor {
+ public static final ClassObjectMarshallingStrategyAcceptor DEFAULT = new ClassObjectMarshallingStrategyAcceptor(new String[] { "*.*" } );
+
+ private final Map<String, Object> patterns;
+
+ public ClassObjectMarshallingStrategyAcceptor(String[] patterns) {
+ this.patterns = new HashMap<String, Object>();
+ for (String pattern : patterns ) {
+ addPattern( pattern );
+ }
+ }
+
+ public ClassObjectMarshallingStrategyAcceptor() {
+ this.patterns = new HashMap<String, Object>();
+ }
+
+ private void addPattern(String pattern) {
+
+ ClassUtils.addImportStylePatterns( this.patterns, pattern );
+ }
+
+ public boolean accept(Object object) {
+ return ClassUtils.isMatched( this.patterns, object.getClass().getName() );
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ClassObjectMarshallingStrategyAcceptor.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/DefaultMarshaller.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/DefaultMarshaller.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/DefaultMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,121 @@
+package org.drools.marshalling.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBaseConfiguration;
+import org.drools.SessionConfiguration;
+import org.drools.StatefulSession;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.concurrent.CommandExecutor;
+import org.drools.concurrent.ExecutorService;
+import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.marshalling.Marshaller;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.runtime.Environment;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.spi.ExecutorServiceFactory;
+import org.drools.spi.GlobalResolver;
+
+public class DefaultMarshaller
+ implements
+ Marshaller {
+ KnowledgeBase kbase;
+ GlobalResolver globalResolver;
+ RuleBaseConfiguration ruleBaseConfig;
+ MarshallingConfiguration marshallingConfig;
+ ObjectMarshallingStrategyStore strategyStore;
+
+ public DefaultMarshaller(KnowledgeBase kbase,
+ MarshallingConfiguration marshallingConfig) {
+ this.kbase = kbase;
+ this.ruleBaseConfig = (ruleBaseConfig != null) ? ruleBaseConfig : new RuleBaseConfiguration();
+ this.marshallingConfig = marshallingConfig;
+ this.strategyStore = this.marshallingConfig.getObjectMarshallingStrategyStore();
+ }
+
+
+ public StatefulKnowledgeSession unmarshall(final InputStream stream) throws IOException,
+ ClassNotFoundException {
+ return unmarshall( stream, null, null );
+ }
+ /* (non-Javadoc)
+ * @see org.drools.marshalling.Marshaller#read(java.io.InputStream, org.drools.common.InternalRuleBase, int, org.drools.concurrent.ExecutorService)
+ */
+ public StatefulKnowledgeSession unmarshall(final InputStream stream,
+ KnowledgeSessionConfiguration config,
+ Environment environment) throws IOException,
+ ClassNotFoundException {
+ if ( config == null ) {
+ config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ }
+
+ if ( environment == null ) {
+ environment = KnowledgeBaseFactory.newEnvironment();
+ }
+
+ MarshallerReaderContext context = new MarshallerReaderContext( stream,
+ (InternalRuleBase) ((KnowledgeBaseImpl) kbase).ruleBase,
+ RuleBaseNodes.getNodeMap( (InternalRuleBase) ((KnowledgeBaseImpl) kbase).ruleBase ),
+ this.strategyStore,
+ this.marshallingConfig.isMarshallProcessInstances(),
+ this.marshallingConfig.isMarshallWorkItems() );
+
+ int id = ((ReteooRuleBase) ((KnowledgeBaseImpl) this.kbase).ruleBase).nextWorkingMemoryCounter();
+ RuleBaseConfiguration conf = ((ReteooRuleBase) ((KnowledgeBaseImpl) this.kbase).ruleBase).getConfiguration();
+ ExecutorService executor = ExecutorServiceFactory.createExecutorService( conf.getExecutorService() );
+
+ ReteooStatefulSession session = InputMarshaller.readSession( context,
+ id,
+ executor,
+ environment,
+ (SessionConfiguration) config );
+ executor.setCommandExecutor( new CommandExecutor( session ) );
+ context.close();
+ if ( ((SessionConfiguration) config).isKeepReference() ) {
+ ((ReteooRuleBase)((KnowledgeBaseImpl)this.kbase).ruleBase).addStatefulSession( session );
+ }
+ return new StatefulKnowledgeSessionImpl( session );
+
+ }
+
+ public void unmarshall(final InputStream stream,
+ final StatefulKnowledgeSession ksession) throws IOException,
+ ClassNotFoundException {
+ MarshallerReaderContext context = new MarshallerReaderContext( stream,
+ (InternalRuleBase) ((KnowledgeBaseImpl) kbase).ruleBase,
+ RuleBaseNodes.getNodeMap( (InternalRuleBase) ((KnowledgeBaseImpl) kbase).ruleBase ),
+ this.strategyStore,
+ this.marshallingConfig.isMarshallProcessInstances(),
+ marshallingConfig.isMarshallWorkItems() );
+
+ InputMarshaller.readSession( (ReteooStatefulSession) ((StatefulKnowledgeSessionImpl)ksession).session,
+ context );
+ context.close();
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.marshalling.Marshaller#write(java.io.OutputStream, org.drools.common.InternalRuleBase, org.drools.StatefulSession)
+ */
+ public void marshall(final OutputStream stream,
+ final StatefulKnowledgeSession session) throws IOException {
+ MarshallerWriteContext context = new MarshallerWriteContext( stream,
+ (InternalRuleBase) ((KnowledgeBaseImpl) kbase).ruleBase,
+ (InternalWorkingMemory) ((StatefulKnowledgeSessionImpl) session).session,
+ RuleBaseNodes.getNodeMap( (InternalRuleBase) ((KnowledgeBaseImpl) kbase).ruleBase ),
+ this.strategyStore,
+ this.marshallingConfig.isMarshallProcessInstances(),
+ this.marshallingConfig.isMarshallWorkItems() );
+ OutputMarshaller.writeSession( context );
+ context.close();
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/DefaultMarshaller.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/IdentityPlaceholderResolverStrategy.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/IdentityPlaceholderResolverStrategy.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/IdentityPlaceholderResolverStrategy.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/IdentityPlaceholderResolverStrategy.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,48 @@
+package org.drools.marshalling.impl;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+import java.util.Map;
+
+import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.marshalling.ObjectMarshallingStrategyAcceptor;
+
+public class IdentityPlaceholderResolverStrategy
+ implements
+ ObjectMarshallingStrategy {
+
+ private Map<Integer, Object> ids;
+ private Map<Object, Integer> objects;
+
+ private ObjectMarshallingStrategyAcceptor acceptor;
+
+ public IdentityPlaceholderResolverStrategy(ObjectMarshallingStrategyAcceptor acceptor) {
+ this.acceptor = acceptor;
+ this.ids = new HashMap<Integer, Object>();
+ this.objects = new IdentityHashMap<Object, Integer>();
+ }
+
+ public Object read(ObjectInputStream os) throws IOException,
+ ClassNotFoundException {
+ int id = os.readInt();
+ return ids.get( id );
+ }
+
+ public void write(ObjectOutputStream os,
+ Object object) throws IOException {
+ Integer id = ( Integer ) objects.get( object );
+ if ( id == null ) {
+ id = ids.size();
+ ids.put( id, object );
+ objects.put( object, id );
+ }
+ os.writeInt( id );
+ }
+
+ public boolean accept(Object object) {
+ return this.acceptor.accept( object );
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/IdentityPlaceholderResolverStrategy.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,1020 @@
+package org.drools.marshalling.impl;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Queue;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.SessionConfiguration;
+import org.drools.base.ClassObjectType;
+import org.drools.common.AgendaItem;
+import org.drools.common.BaseNode;
+import org.drools.common.BinaryHeapQueueAgendaGroup;
+import org.drools.common.DefaultAgenda;
+import org.drools.common.DefaultFactHandle;
+import org.drools.common.EqualityKey;
+import org.drools.common.InternalAgendaGroup;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalRuleFlowGroup;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.common.NodeMemory;
+import org.drools.common.PropagationContextImpl;
+import org.drools.common.RuleFlowGroupImpl;
+import org.drools.common.TruthMaintenanceSystem;
+import org.drools.concurrent.ExecutorService;
+import org.drools.impl.EnvironmentFactory;
+import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.process.core.context.swimlane.SwimlaneContext;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.process.instance.context.swimlane.SwimlaneContextInstance;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.process.instance.impl.WorkItemImpl;
+import org.drools.process.instance.timer.TimerInstance;
+import org.drools.process.instance.timer.TimerManager;
+import org.drools.reteoo.BetaMemory;
+import org.drools.reteoo.BetaNode;
+import org.drools.reteoo.EntryPointNode;
+import org.drools.reteoo.EvalConditionNode;
+import org.drools.reteoo.InitialFactHandle;
+import org.drools.reteoo.InitialFactHandleDummyObject;
+import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.NodeTypeEnums;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.reteoo.RightTuple;
+import org.drools.reteoo.RightTupleSink;
+import org.drools.reteoo.RuleTerminalNode;
+import org.drools.reteoo.AccumulateNode.AccumulateContext;
+import org.drools.reteoo.AccumulateNode.AccumulateMemory;
+import org.drools.reteoo.CollectNode.CollectContext;
+import org.drools.reteoo.CollectNode.CollectMemory;
+import org.drools.reteoo.EvalConditionNode.EvalMemory;
+import org.drools.reteoo.RuleTerminalNode.TerminalNodeMemory;
+import org.drools.rule.EntryPoint;
+import org.drools.rule.GroupElement;
+import org.drools.rule.Package;
+import org.drools.rule.Rule;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+import org.drools.runtime.Environment;
+import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.NodeInstanceContainer;
+import org.drools.spi.Activation;
+import org.drools.spi.AgendaGroup;
+import org.drools.spi.FactHandleFactory;
+import org.drools.spi.ObjectType;
+import org.drools.spi.PropagationContext;
+import org.drools.spi.RuleFlowGroup;
+import org.drools.util.ObjectHashMap;
+import org.drools.util.ObjectHashSet;
+import org.drools.workflow.instance.impl.NodeInstanceImpl;
+import org.drools.workflow.instance.node.CompositeContextNodeInstance;
+import org.drools.workflow.instance.node.ForEachNodeInstance;
+import org.drools.workflow.instance.node.HumanTaskNodeInstance;
+import org.drools.workflow.instance.node.JoinInstance;
+import org.drools.workflow.instance.node.MilestoneNodeInstance;
+import org.drools.workflow.instance.node.RuleSetNodeInstance;
+import org.drools.workflow.instance.node.SubProcessNodeInstance;
+import org.drools.workflow.instance.node.TimerNodeInstance;
+import org.drools.workflow.instance.node.WorkItemNodeInstance;
+
+public class InputMarshaller {
+ /**
+ * Stream the data into an existing session
+ *
+ * @param session
+ * @param context
+ * @param id
+ * @param executor
+ * @return
+ * @throws IOException
+ * @throws ClassNotFoundException
+ */
+ public static ReteooStatefulSession readSession(ReteooStatefulSession session,
+ MarshallerReaderContext context) throws IOException,
+ ClassNotFoundException {
+ boolean multithread = context.readBoolean();
+ int handleId = context.readInt();
+ long handleCounter = context.readLong();
+ long propagationCounter = context.readLong();
+
+ // these are for the InitialFactHandle, on a reset we just ignore
+ context.readInt();
+ context.readLong();
+
+ session.reset( handleId,
+ handleCounter,
+ propagationCounter );
+ DefaultAgenda agenda = (DefaultAgenda) session.getAgenda();
+
+ readAgenda( context,
+ agenda );
+
+ context.wm = session;
+
+ readFactHandles( context );
+
+ readActionQueue( context );
+
+ if ( context.readBoolean() ) {
+ readTruthMaintenanceSystem( context );
+ }
+
+ if ( context.marshalProcessInstances ) {
+ readProcessInstances( context );
+ }
+
+ if ( context.marshalWorkItems ) {
+ readWorkItems( context );
+ }
+
+ readTimers( context );
+
+ if( multithread ) {
+ session.startPartitionManagers();
+ }
+
+ return session;
+ }
+
+ /**
+ * Create a new session into which to read the stream data
+ * @param context
+ * @param id
+ * @param executor
+ * @return
+ * @throws IOException
+ * @throws ClassNotFoundException
+ */
+ public static ReteooStatefulSession readSession(MarshallerReaderContext context,
+ int id,
+ ExecutorService executor) throws IOException,
+ ClassNotFoundException {
+ return readSession( context, id, executor, EnvironmentFactory.newEnvironment(), new SessionConfiguration() );
+ }
+
+ public static ReteooStatefulSession readSession(MarshallerReaderContext context,
+ int id,
+ ExecutorService executor,
+ Environment environment,
+ SessionConfiguration config) throws IOException,
+ ClassNotFoundException {
+
+ boolean multithread = context.readBoolean();
+
+ FactHandleFactory handleFactory = context.ruleBase.newFactHandleFactory( context.readInt(),
+ context.readLong() );
+
+ InitialFactHandle initialFactHandle = new InitialFactHandle( new DefaultFactHandle( context.readInt(), //id
+ new InitialFactHandleDummyObject(),
+ context.readLong() ) ); //recency
+ context.handles.put( initialFactHandle.getId(),
+ initialFactHandle );
+
+ long propagationCounter = context.readLong();
+
+ DefaultAgenda agenda = new DefaultAgenda( context.ruleBase,
+ false );
+ readAgenda( context,
+ agenda );
+ ReteooStatefulSession session = new ReteooStatefulSession( id,
+ context.ruleBase,
+ executor,
+ handleFactory,
+ initialFactHandle,
+ propagationCounter,
+ config,
+ agenda,
+ environment );
+
+ // RuleFlowGroups need to reference the session
+ for ( RuleFlowGroup group : agenda.getRuleFlowGroupsMap().values() ) {
+ ((RuleFlowGroupImpl) group).setWorkingMemory( session );
+ }
+ context.wm = session;
+
+ readFactHandles( context );
+
+ readActionQueue( context );
+
+ if ( context.readBoolean() ) {
+ readTruthMaintenanceSystem( context );
+ }
+
+ if ( context.marshalProcessInstances ) {
+ readProcessInstances( context );
+ }
+
+ if ( context.marshalWorkItems ) {
+ readWorkItems( context );
+ }
+
+ readTimers( context );
+
+ if( multithread ) {
+ session.startPartitionManagers();
+ }
+
+ return session;
+ }
+
+ public static void readAgenda(MarshallerReaderContext context,
+ DefaultAgenda agenda) throws IOException {
+ ObjectInputStream stream = context.stream;
+ while ( stream.readShort() == PersisterEnums.AGENDA_GROUP ) {
+ BinaryHeapQueueAgendaGroup group = new BinaryHeapQueueAgendaGroup( stream.readUTF(),
+ context.ruleBase );
+ group.setActive( stream.readBoolean() );
+ agenda.getAgendaGroupsMap().put( group.getName(),
+ group );
+ }
+
+ while ( stream.readShort() == PersisterEnums.AGENDA_GROUP ) {
+ String agendaGroupName = stream.readUTF();
+ agenda.getStackList().add( agenda.getAgendaGroup( agendaGroupName ) );
+ }
+
+ while ( stream.readShort() == PersisterEnums.RULE_FLOW_GROUP ) {
+ String rfgName = stream.readUTF();
+ boolean active = stream.readBoolean();
+ boolean autoDeactivate = stream.readBoolean();
+ RuleFlowGroup rfg = new RuleFlowGroupImpl( rfgName,
+ active,
+ autoDeactivate );
+ agenda.getRuleFlowGroupsMap().put( rfgName,
+ rfg );
+ }
+
+ }
+
+ public static void readActionQueue(MarshallerReaderContext context) throws IOException, ClassNotFoundException {
+ ReteooWorkingMemory wm = (ReteooWorkingMemory) context.wm;
+ Queue actionQueue = wm.getActionQueue();
+ while ( context.readShort() == PersisterEnums.WORKING_MEMORY_ACTION ) {
+ actionQueue.offer( PersisterHelper.readWorkingMemoryAction( context ) );
+ }
+ }
+
+ public static void readTruthMaintenanceSystem(MarshallerReaderContext context) throws IOException {
+ ObjectInputStream stream = context.stream;
+
+ TruthMaintenanceSystem tms = context.wm.getTruthMaintenanceSystem();
+ while ( stream.readShort() == PersisterEnums.EQUALITY_KEY ) {
+ int status = stream.readInt();
+ int factHandleId = stream.readInt();
+ InternalFactHandle handle = (InternalFactHandle) context.handles.get( factHandleId );
+ EqualityKey key = new EqualityKey( handle,
+ status );
+ handle.setEqualityKey( key );
+ while ( stream.readShort() == PersisterEnums.FACT_HANDLE ) {
+ factHandleId = stream.readInt();
+ handle = (InternalFactHandle) context.handles.get( factHandleId );
+ key.addFactHandle( handle );
+ handle.setEqualityKey( key );
+ }
+ tms.put( key );
+ }
+ }
+
+ public static void readFactHandles(MarshallerReaderContext context) throws IOException,
+ ClassNotFoundException {
+ ObjectInputStream stream = context.stream;
+ InternalRuleBase ruleBase = context.ruleBase;
+ ObjectMarshallingStrategyStore resolverStrategyFactory = context.resolverStrategyFactory;
+ InternalWorkingMemory wm = context.wm;
+
+ if ( stream.readBoolean() ) {
+ InternalFactHandle initialFactHandle = wm.getInitialFactHandle();
+ int sinkId = stream.readInt();
+ ObjectTypeNode initialFactNode = (ObjectTypeNode) context.sinks.get( sinkId );
+ ObjectHashSet initialFactMemory = (ObjectHashSet) context.wm.getNodeMemory( initialFactNode );
+
+ initialFactMemory.add( initialFactHandle );
+ readRightTuples( initialFactHandle,
+ context );
+ }
+
+ int size = stream.readInt();
+
+ // load the handles
+ InternalFactHandle[] handles = new InternalFactHandle[size];
+ for ( int i = 0; i < size; i++ ) {
+ InternalFactHandle handle = readFactHandle( context );
+
+ context.handles.put( handle.getId(),
+ handle );
+ handles[i] = handle;
+
+ context.wm.getObjectStore().addHandle( handle,
+ handle.getObject() );
+
+ readRightTuples( handle,
+ context );
+ }
+
+ EntryPointNode node = ruleBase.getRete().getEntryPointNode( EntryPoint.DEFAULT );
+ Map<ObjectType, ObjectTypeNode> objectTypeNodes = node.getObjectTypeNodes();
+
+ // add handles to object type nodes
+ for ( InternalFactHandle handle : handles ) {
+ Object object = handle.getObject();
+ ClassObjectType objectType = new ClassObjectType( object.getClass() );
+ ObjectTypeNode objectTypeNode = objectTypeNodes.get( objectType );
+ ObjectHashSet set = (ObjectHashSet) context.wm.getNodeMemory( objectTypeNode );
+ set.add( handle,
+ false );
+ }
+
+ InternalFactHandle handle = wm.getInitialFactHandle();
+ while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
+ LeftTupleSink sink = (LeftTupleSink) context.sinks.get( stream.readInt() );
+ LeftTuple leftTuple = new LeftTuple( handle,
+ sink,
+ true );
+ readLeftTuple( leftTuple,
+ context );
+ }
+
+ readLeftTuples( context );
+
+ readPropagationContexts( context );
+
+ readActivations( context );
+ }
+
+ public static InternalFactHandle readFactHandle(MarshallerReaderContext context) throws IOException,
+ ClassNotFoundException {
+ int id = context.stream.readInt();
+ long recency = context.stream.readLong();
+
+ int strategyIndex = context.stream.readInt();
+ ObjectMarshallingStrategy strategy = context.resolverStrategyFactory.getStrategy( strategyIndex );
+ Object object = strategy.read( context.stream );
+
+ InternalFactHandle handle = new DefaultFactHandle( id,
+ object,
+ recency );
+ return handle;
+ }
+
+ public static void readRightTuples(InternalFactHandle factHandle,
+ MarshallerReaderContext context) throws IOException {
+ ObjectInputStream stream = context.stream;
+ while ( stream.readShort() == PersisterEnums.RIGHT_TUPLE ) {
+ readRightTuple( context,
+ factHandle );
+ }
+ }
+
+ public static void readRightTuple(MarshallerReaderContext context,
+ InternalFactHandle factHandle) throws IOException {
+ ObjectInputStream stream = context.stream;
+
+ RightTupleSink sink = (RightTupleSink) context.sinks.get( stream.readInt() );
+
+ RightTuple rightTuple = new RightTuple( factHandle,
+ sink );
+ context.rightTuples.put( new RightTupleKey( factHandle.getId(),
+ sink ),
+ rightTuple );
+
+ BetaMemory memory = null;
+ switch ( sink.getType() ) {
+ case NodeTypeEnums.AccumulateNode : {
+ memory = ((AccumulateMemory) context.wm.getNodeMemory( (BetaNode) sink )).betaMemory;
+ break;
+ }
+ case NodeTypeEnums.CollectNode : {
+ memory = ((CollectMemory) context.wm.getNodeMemory( (BetaNode) sink )).betaMemory;
+ break;
+ }
+ default : {
+ memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ break;
+ }
+ }
+ memory.getRightTupleMemory().add( rightTuple );
+ }
+
+ public static void readLeftTuples(MarshallerReaderContext context) throws IOException,
+ ClassNotFoundException {
+ ObjectInputStream stream = context.stream;
+
+ while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
+ LeftTupleSink sink = (LeftTupleSink) context.sinks.get( stream.readInt() );
+ int factHandleId = stream.readInt();
+ LeftTuple leftTuple = new LeftTuple( context.handles.get( factHandleId ),
+ sink,
+ true );
+ readLeftTuple( leftTuple,
+ context );
+ }
+ }
+
+ public static void readLeftTuple(LeftTuple parentLeftTuple,
+ MarshallerReaderContext context) throws IOException,
+ ClassNotFoundException {
+ ObjectInputStream stream = context.stream;
+ InternalWorkingMemory wm = context.wm;
+ Map<Integer, BaseNode> sinks = context.sinks;
+
+ LeftTupleSink sink = parentLeftTuple.getLeftTupleSink();
+
+ switch ( sink.getType() ) {
+ case NodeTypeEnums.JoinNode : {
+ BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ memory.getLeftTupleMemory().add( parentLeftTuple );
+
+ while ( stream.readShort() == PersisterEnums.RIGHT_TUPLE ) {
+ LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
+ int factHandleId = stream.readInt();
+ RightTupleKey key = new RightTupleKey( factHandleId,
+ sink );
+ RightTuple rightTuple = context.rightTuples.get( key );
+ LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
+ rightTuple,
+ childSink,
+ true );
+ readLeftTuple( childLeftTuple,
+ context );
+ }
+ break;
+
+ }
+ case NodeTypeEnums.EvalConditionNode : {
+ final EvalMemory memory = (EvalMemory) context.wm.getNodeMemory( (EvalConditionNode) sink );
+ memory.tupleMemory.add( parentLeftTuple );
+ while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
+ LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
+ LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
+ childSink,
+ true );
+ readLeftTuple( childLeftTuple,
+ context );
+ }
+ break;
+ }
+ case NodeTypeEnums.NotNode : {
+ BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ int type = stream.readShort();
+ if ( type == PersisterEnums.LEFT_TUPLE_NOT_BLOCKED ) {
+ memory.getLeftTupleMemory().add( parentLeftTuple );
+
+ while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
+ LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
+ LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
+ childSink,
+ true );
+ readLeftTuple( childLeftTuple,
+ context );
+ }
+
+ } else {
+ int factHandleId = stream.readInt();
+ RightTupleKey key = new RightTupleKey( factHandleId,
+ sink );
+ RightTuple rightTuple = context.rightTuples.get( key );
+
+ parentLeftTuple.setBlocker( rightTuple );
+ rightTuple.setBlocked( parentLeftTuple );
+ }
+ break;
+ }
+ case NodeTypeEnums.ExistsNode : {
+ BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ int type = stream.readShort();
+ if ( type == PersisterEnums.LEFT_TUPLE_NOT_BLOCKED ) {
+ memory.getLeftTupleMemory().add( parentLeftTuple );
+ } else {
+ int factHandleId = stream.readInt();
+ RightTupleKey key = new RightTupleKey( factHandleId,
+ sink );
+ RightTuple rightTuple = context.rightTuples.get( key );
+
+ parentLeftTuple.setBlocker( rightTuple );
+ rightTuple.setBlocked( parentLeftTuple );
+
+ while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
+ LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
+ LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
+ childSink,
+ true );
+ readLeftTuple( childLeftTuple,
+ context );
+ }
+ }
+ break;
+ }
+ case NodeTypeEnums.AccumulateNode : {
+ // accumulate nodes generate new facts on-demand and need special procedures when de-serializing from persistent storage
+ AccumulateMemory memory = (AccumulateMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ memory.betaMemory.getLeftTupleMemory().add( parentLeftTuple );
+
+ AccumulateContext accctx = new AccumulateContext();
+ memory.betaMemory.getCreatedHandles().put( parentLeftTuple,
+ accctx,
+ false );
+ // first we de-serialize the generated fact handle
+ InternalFactHandle handle = readFactHandle( context );
+ accctx.result = new RightTuple( handle,
+ (RightTupleSink) sink );
+
+ // then we de-serialize the associated accumulation context
+ accctx.context = (Serializable) stream.readObject();
+ // then we de-serialize the boolean propagated flag
+ accctx.propagated = stream.readBoolean();
+
+ // then we de-serialize all the propagated tuples
+ short head = -1;
+ while ( (head = stream.readShort()) != PersisterEnums.END ) {
+ switch ( head ) {
+ case PersisterEnums.RIGHT_TUPLE : {
+ int factHandleId = stream.readInt();
+ RightTupleKey key = new RightTupleKey( factHandleId,
+ sink );
+ RightTuple rightTuple = context.rightTuples.get( key );
+ // just wiring up the match record
+ new LeftTuple( parentLeftTuple,
+ rightTuple,
+ sink,
+ true );
+ break;
+ }
+ case PersisterEnums.LEFT_TUPLE : {
+ LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
+ LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
+ accctx.result,
+ childSink,
+ true );
+ readLeftTuple( childLeftTuple,
+ context );
+ break;
+ }
+ default : {
+ throw new RuntimeDroolsException( "Marshalling error. This is a bug. Please contact the development team." );
+ }
+ }
+ }
+ break;
+ }
+ case NodeTypeEnums.CollectNode : {
+ // accumulate nodes generate new facts on-demand and need special procedures when de-serializing from persistent storage
+ CollectMemory memory = (CollectMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ memory.betaMemory.getLeftTupleMemory().add( parentLeftTuple );
+
+ CollectContext colctx = new CollectContext();
+ memory.betaMemory.getCreatedHandles().put( parentLeftTuple,
+ colctx,
+ false );
+ // first we de-serialize the generated fact handle
+ InternalFactHandle handle = readFactHandle( context );
+ colctx.resultTuple = new RightTuple( handle,
+ (RightTupleSink) sink );
+
+ // then we de-serialize the boolean propagated flag
+ colctx.propagated = stream.readBoolean();
+
+ // then we de-serialize all the propagated tuples
+ short head = -1;
+ while ( (head = stream.readShort()) != PersisterEnums.END ) {
+ switch ( head ) {
+ case PersisterEnums.RIGHT_TUPLE : {
+ int factHandleId = stream.readInt();
+ RightTupleKey key = new RightTupleKey( factHandleId,
+ sink );
+ RightTuple rightTuple = context.rightTuples.get( key );
+ // just wiring up the match record
+ new LeftTuple( parentLeftTuple,
+ rightTuple,
+ sink,
+ true );
+ break;
+ }
+ case PersisterEnums.LEFT_TUPLE : {
+ LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
+ LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
+ colctx.resultTuple,
+ childSink,
+ true );
+ readLeftTuple( childLeftTuple,
+ context );
+ break;
+ }
+ default : {
+ throw new RuntimeDroolsException( "Marshalling error. This is a bug. Please contact the development team." );
+ }
+ }
+ }
+ break;
+ }
+ case NodeTypeEnums.RightInputAdaterNode : {
+ // RIANs generate new fact handles on-demand to wrap tuples and need special procedures when de-serializing from persistent storage
+ ObjectHashMap memory = (ObjectHashMap) context.wm.getNodeMemory( (NodeMemory) sink );
+ // create fact handle
+ int id = stream.readInt();
+ long recency = stream.readLong();
+ InternalFactHandle handle = new DefaultFactHandle( id,
+ parentLeftTuple,
+ recency );
+ memory.put( parentLeftTuple, handle );
+
+ readRightTuples( handle, context );
+
+ stream.readShort(); // Persistence.END
+ break;
+ }
+ case NodeTypeEnums.RuleTerminalNode : {
+ RuleTerminalNode ruleTerminalNode = (RuleTerminalNode) sink;
+ TerminalNodeMemory memory = (TerminalNodeMemory) wm.getNodeMemory( ruleTerminalNode );
+ memory.getTupleMemory().add( parentLeftTuple );
+
+ int pos = context.terminalTupleMap.size();
+ context.terminalTupleMap.put( pos,
+ parentLeftTuple );
+ break;
+ }
+ }
+ }
+
+ public static void readActivations(MarshallerReaderContext context) throws IOException {
+ ObjectInputStream stream = context.stream;
+
+ while ( stream.readShort() == PersisterEnums.ACTIVATION ) {
+ readActivation( context );
+ }
+ }
+
+ public static Activation readActivation(MarshallerReaderContext context) throws IOException {
+ ObjectInputStream stream = context.stream;
+ InternalRuleBase ruleBase = context.ruleBase;
+ InternalWorkingMemory wm = context.wm;
+
+ long activationNumber = stream.readLong();
+
+ int pos = stream.readInt();
+ LeftTuple leftTuple = context.terminalTupleMap.get( pos );
+
+ int salience = stream.readInt();
+
+ //PropagationContext context,
+ String pkgName = stream.readUTF();
+ String ruleName = stream.readUTF();
+ Package pkg = ruleBase.getPackage( pkgName );
+ Rule rule = pkg.getRule( ruleName );
+
+ RuleTerminalNode ruleTerminalNode = (RuleTerminalNode) leftTuple.getLeftTupleSink();
+ GroupElement subRule = ruleTerminalNode.getSubRule();
+
+ PropagationContext pc = context.propagationContexts.get( stream.readLong() );
+
+ AgendaItem activation = new AgendaItem( activationNumber,
+ leftTuple,
+ salience,
+ pc,
+ rule,
+ subRule );
+
+ leftTuple.setActivation( activation );
+
+ if ( stream.readBoolean() ) {
+ String activationGroupName = stream.readUTF();
+ ((DefaultAgenda) wm.getAgenda()).getActivationGroup( activationGroupName ).addActivation( activation );
+ }
+
+ boolean activated = stream.readBoolean();
+ activation.setActivated( activated );
+
+ InternalAgendaGroup agendaGroup;
+ if ( rule.getAgendaGroup() == null || rule.getAgendaGroup().equals( "" ) || rule.getAgendaGroup().equals( AgendaGroup.MAIN ) ) {
+ // Is the Rule AgendaGroup undefined? If it is use MAIN,
+ // which is added to the Agenda by default
+ agendaGroup = (InternalAgendaGroup) ((DefaultAgenda) wm.getAgenda()).getAgendaGroup( AgendaGroup.MAIN );
+ } else {
+ // AgendaGroup is defined, so try and get the AgendaGroup
+ // from the Agenda
+ agendaGroup = (InternalAgendaGroup) ((DefaultAgenda) wm.getAgenda()).getAgendaGroup( rule.getAgendaGroup() );
+ }
+
+ activation.setAgendaGroup( agendaGroup );
+
+ if ( activated ) {
+ if ( rule.getRuleFlowGroup() == null ) {
+ agendaGroup.add( activation );
+ } else {
+ InternalRuleFlowGroup rfg = (InternalRuleFlowGroup) ((DefaultAgenda) wm.getAgenda()).getRuleFlowGroup( rule.getRuleFlowGroup() );
+ rfg.addActivation( activation );
+ }
+ }
+
+ TruthMaintenanceSystem tms = context.wm.getTruthMaintenanceSystem();
+ while ( stream.readShort() == PersisterEnums.LOGICAL_DEPENDENCY ) {
+ int factHandleId = stream.readInt();
+ InternalFactHandle handle = (InternalFactHandle) context.handles.get( factHandleId );
+ tms.addLogicalDependency( handle,
+ activation,
+ pc,
+ rule );
+ }
+
+ return activation;
+ }
+
+ public static void readPropagationContexts(MarshallerReaderContext context) throws IOException {
+ ObjectInputStream stream = context.stream;
+
+ while ( stream.readShort() == PersisterEnums.PROPAGATION_CONTEXT ) {
+ readPropagationContext( context );
+ }
+
+ }
+
+ public static void readPropagationContext(MarshallerReaderContext context) throws IOException {
+ ObjectInputStream stream = context.stream;
+ InternalRuleBase ruleBase = context.ruleBase;
+
+ int type = stream.readInt();
+
+ Rule rule = null;
+ if ( stream.readBoolean() ) {
+ String pkgName = stream.readUTF();
+ String ruleName = stream.readUTF();
+ Package pkg = ruleBase.getPackage( pkgName );
+ rule = pkg.getRule( ruleName );
+ }
+
+ LeftTuple leftTuple = null;
+ if ( stream.readBoolean() ) {
+ int tuplePos = stream.readInt();
+ leftTuple = (LeftTuple) context.terminalTupleMap.get( tuplePos );
+ }
+
+ long propagationNumber = stream.readLong();
+
+ int factHandleId = stream.readInt();
+ InternalFactHandle factHandle = context.handles.get( factHandleId );
+
+ int activeActivations = stream.readInt();
+ int dormantActivations = stream.readInt();
+ String entryPointId = stream.readUTF();
+
+ EntryPoint entryPoint = context.entryPoints.get( entryPointId );
+ if ( entryPoint == null ) {
+ entryPoint = new EntryPoint( entryPointId );
+ context.entryPoints.put( entryPointId,
+ entryPoint );
+ }
+
+ PropagationContext pc = new PropagationContextImpl( propagationNumber,
+ type,
+ rule,
+ leftTuple,
+ factHandle,
+ activeActivations,
+ dormantActivations,
+ entryPoint );
+ context.propagationContexts.put( propagationNumber,
+ pc );
+ }
+
+ public static void readProcessInstances(MarshallerReaderContext context) throws IOException {
+ ObjectInputStream stream = context.stream;
+ while ( stream.readShort() == PersisterEnums.PROCESS_INSTANCE ) {
+ readProcessInstance( context );
+ }
+ }
+
+ public static ProcessInstance readProcessInstance(MarshallerReaderContext context) throws IOException {
+ ObjectInputStream stream = context.stream;
+ InternalRuleBase ruleBase = context.ruleBase;
+ InternalWorkingMemory wm = context.wm;
+
+ RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance();
+ processInstance.setId( stream.readLong() );
+ String processId = stream.readUTF();
+ processInstance.setProcessId( processId );
+ if ( ruleBase != null ) {
+ processInstance.setProcess( ruleBase.getProcess( processId ) );
+ }
+ processInstance.setState( stream.readInt() );
+ long nodeInstanceCounter = stream.readLong();
+ processInstance.setWorkingMemory( wm );
+
+ int nbVariables = stream.readInt();
+ if ( nbVariables > 0 ) {
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
+ for ( int i = 0; i < nbVariables; i++ ) {
+ String name = stream.readUTF();
+ try {
+ Object value = stream.readObject();
+ variableScopeInstance.setVariable( name,
+ value );
+ } catch ( ClassNotFoundException e ) {
+ throw new IllegalArgumentException( "Could not reload variable " + name );
+ }
+ }
+ }
+
+ int nbSwimlanes = stream.readInt();
+ if ( nbSwimlanes > 0 ) {
+ SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) processInstance.getContextInstance( SwimlaneContext.SWIMLANE_SCOPE );
+ for ( int i = 0; i < nbSwimlanes; i++ ) {
+ String name = stream.readUTF();
+ String value = stream.readUTF();
+ swimlaneContextInstance.setActorId( name,
+ value );
+ }
+ }
+
+ while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
+ readNodeInstance( context,
+ processInstance,
+ processInstance );
+ }
+
+ processInstance.internalSetNodeInstanceCounter( nodeInstanceCounter );
+ if ( wm != null ) {
+ processInstance.reconnect();
+ }
+ return processInstance;
+ }
+
+ public static NodeInstance readNodeInstance(MarshallerReaderContext context,
+ NodeInstanceContainer nodeInstanceContainer,
+ RuleFlowProcessInstance processInstance) throws IOException {
+ ObjectInputStream stream = context.stream;
+ NodeInstanceImpl nodeInstance = null;
+ long id = stream.readLong();
+ long nodeId = stream.readLong();
+ int nodeType = stream.readShort();
+ switch ( nodeType ) {
+ case PersisterEnums.RULE_SET_NODE_INSTANCE :
+ nodeInstance = new RuleSetNodeInstance();
+ break;
+ case PersisterEnums.HUMAN_TASK_NODE_INSTANCE :
+ nodeInstance = new HumanTaskNodeInstance();
+ ((HumanTaskNodeInstance) nodeInstance).internalSetWorkItemId( stream.readLong() );
+ break;
+ case PersisterEnums.WORK_ITEM_NODE_INSTANCE :
+ nodeInstance = new WorkItemNodeInstance();
+ ((WorkItemNodeInstance) nodeInstance).internalSetWorkItemId( stream.readLong() );
+ break;
+ case PersisterEnums.SUB_PROCESS_NODE_INSTANCE :
+ nodeInstance = new SubProcessNodeInstance();
+ ((SubProcessNodeInstance) nodeInstance).internalSetProcessInstanceId( stream.readLong() );
+ break;
+ case PersisterEnums.MILESTONE_NODE_INSTANCE :
+ nodeInstance = new MilestoneNodeInstance();
+ int nbTimerInstances = stream.readInt();
+ if (nbTimerInstances > 0) {
+ List<Long> timerInstances = new ArrayList<Long>();
+ for (int i = 0; i < nbTimerInstances; i++) {
+ timerInstances.add(stream.readLong());
+ }
+ ((MilestoneNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances);
+ }
+ break;
+ case PersisterEnums.TIMER_NODE_INSTANCE :
+ nodeInstance = new TimerNodeInstance();
+ ((TimerNodeInstance) nodeInstance).internalSetTimerId( stream.readLong() );
+ break;
+ case PersisterEnums.JOIN_NODE_INSTANCE :
+ nodeInstance = new JoinInstance();
+ int number = stream.readInt();
+ if ( number > 0 ) {
+ Map<Long, Integer> triggers = new HashMap<Long, Integer>();
+ for ( int i = 0; i < number; i++ ) {
+ long l = stream.readLong();
+ int count = stream.readInt();
+ triggers.put( l,
+ count );
+ }
+ ((JoinInstance) nodeInstance).internalSetTriggers( triggers );
+ }
+ break;
+ case PersisterEnums.COMPOSITE_NODE_INSTANCE :
+ nodeInstance = new CompositeContextNodeInstance();
+ break;
+ case PersisterEnums.FOR_EACH_NODE_INSTANCE :
+ nodeInstance = new ForEachNodeInstance();
+ break;
+ default :
+ throw new IllegalArgumentException( "Unknown node type: " + nodeType );
+ }
+ nodeInstance.setNodeId( nodeId );
+ nodeInstance.setNodeInstanceContainer( nodeInstanceContainer );
+ nodeInstance.setProcessInstance( processInstance );
+ nodeInstance.setId( id );
+ switch ( nodeType ) {
+ case PersisterEnums.COMPOSITE_NODE_INSTANCE :
+ int nbVariables = stream.readInt();
+ if ( nbVariables > 0 ) {
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((CompositeContextNodeInstance) nodeInstance).getContextInstance( VariableScope.VARIABLE_SCOPE );
+ for ( int i = 0; i < nbVariables; i++ ) {
+ String name = stream.readUTF();
+ try {
+ Object value = stream.readObject();
+ variableScopeInstance.setVariable( name,
+ value );
+ } catch ( ClassNotFoundException e ) {
+ throw new IllegalArgumentException( "Could not reload variable " + name );
+ }
+ }
+ }
+ while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
+ readNodeInstance( context,
+ (CompositeContextNodeInstance) nodeInstance,
+ processInstance );
+ }
+ break;
+ case PersisterEnums.FOR_EACH_NODE_INSTANCE :
+ while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
+ readNodeInstance( context,
+ (ForEachNodeInstance) nodeInstance,
+ processInstance );
+ }
+ break;
+ default :
+ // do nothing
+ }
+ return nodeInstance;
+ }
+
+ public static void readWorkItems(MarshallerReaderContext context) throws IOException {
+ InternalWorkingMemory wm = context.wm;
+ ObjectInputStream stream = context.stream;
+ while ( stream.readShort() == PersisterEnums.WORK_ITEM ) {
+ WorkItem workItem = readWorkItem( context );
+ ((WorkItemManager) wm.getWorkItemManager()).internalAddWorkItem( workItem );
+ }
+ }
+
+ public static WorkItem readWorkItem(MarshallerReaderContext context) throws IOException {
+ ObjectInputStream stream = context.stream;
+
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setId( stream.readLong() );
+ workItem.setProcessInstanceId( stream.readLong() );
+ workItem.setName( stream.readUTF() );
+ workItem.setState( stream.readInt() );
+
+ int nbParameters = stream.readInt();
+
+ for ( int i = 0; i < nbParameters; i++ ) {
+ String name = stream.readUTF();
+ try {
+ Object value = stream.readObject();
+ workItem.setParameter( name,
+ value );
+ } catch ( ClassNotFoundException e ) {
+ throw new IllegalArgumentException( "Could not reload parameter " + name );
+ }
+ }
+
+ return workItem;
+ }
+
+ public static void readTimers(MarshallerReaderContext context) throws IOException, ClassNotFoundException {
+ InternalWorkingMemory wm = context.wm;
+ ObjectInputStream stream = context.stream;
+
+ TimerManager timerManager = wm.getTimerManager();
+ timerManager.internalSetTimerId( stream.readLong() );
+
+ // still need to think on how to fix this.
+// TimerService service = (TimerService) stream.readObject();
+// timerManager.setTimerService( service );
+
+ while ( stream.readShort() == PersisterEnums.TIMER ) {
+ TimerInstance timer = readTimer( context );
+ timerManager.internalAddTimer( timer );
+ }
+ }
+
+ public static TimerInstance readTimer(MarshallerReaderContext context) throws IOException {
+ ObjectInputStream stream = context.stream;
+
+ TimerInstance timer = new TimerInstance();
+ timer.setId( stream.readLong() );
+ timer.setTimerId( stream.readLong() );
+ timer.setDelay( stream.readLong() );
+ timer.setPeriod( stream.readLong() );
+ timer.setProcessInstanceId( stream.readLong() );
+ timer.setActivated( new Date( stream.readLong() ) );
+ if ( stream.readBoolean() ) {
+ timer.setLastTriggered( new Date( stream.readLong() ) );
+ }
+ return timer;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java
___________________________________________________________________
Name: svn:mergeinfo
+
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerProviderImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerProviderImpl.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,44 @@
+package org.drools.marshalling.impl;
+
+import org.drools.KnowledgeBase;
+import org.drools.marshalling.Marshaller;
+import org.drools.marshalling.MarshallerProvider;
+import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.marshalling.ObjectMarshallingStrategyAcceptor;
+
+public class MarshallerProviderImpl implements MarshallerProvider {
+
+ public ObjectMarshallingStrategyAcceptor newClassFilterAcceptor(String[] patterns) {
+ return new ClassObjectMarshallingStrategyAcceptor( patterns );
+ }
+
+ public ObjectMarshallingStrategy newIdentityMarshallingStrategy() {
+ return new IdentityPlaceholderResolverStrategy( ClassObjectMarshallingStrategyAcceptor.DEFAULT );
+ }
+
+ public ObjectMarshallingStrategy newIdentityMarshallingStrategy(ObjectMarshallingStrategyAcceptor acceptor) {
+ return new IdentityPlaceholderResolverStrategy( acceptor );
+ }
+
+
+
+ public ObjectMarshallingStrategy newSerializeMarshallingStrategy() {
+ return new SerializablePlaceholderResolverStrategy( ClassObjectMarshallingStrategyAcceptor.DEFAULT );
+ }
+
+ public ObjectMarshallingStrategy newSerializeMarshallingStrategy(ObjectMarshallingStrategyAcceptor acceptor) {
+ return new SerializablePlaceholderResolverStrategy( acceptor );
+ }
+
+ public Marshaller newMarshaller(KnowledgeBase kbase) {
+ return newMarshaller(kbase, new ObjectMarshallingStrategy[] { newSerializeMarshallingStrategy() } );
+ }
+
+ public Marshaller newMarshaller(KnowledgeBase kbase, ObjectMarshallingStrategy[] strategies) {
+ if ( strategies == null ) {
+ throw new IllegalArgumentException( "Strategies should not be null" );
+ }
+ return new DefaultMarshaller( kbase , new MarshallingConfigurationImpl( strategies, true, true ) );
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerReaderContext.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerReaderContext.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerReaderContext.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,71 @@
+/**
+ *
+ */
+package org.drools.marshalling.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.common.BaseNode;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.RightTuple;
+import org.drools.rule.EntryPoint;
+import org.drools.spi.PropagationContext;
+
+public class MarshallerReaderContext extends ObjectInputStream {
+ public final MarshallerReaderContext stream;
+ public final InternalRuleBase ruleBase;
+ public InternalWorkingMemory wm;
+ public final Map<Integer, BaseNode> sinks;
+
+ public Map<Integer, InternalFactHandle> handles;
+
+ public final Map<RightTupleKey, RightTuple> rightTuples;
+ public final Map<Integer, LeftTuple> terminalTupleMap;
+
+ public final ObjectMarshallingStrategyStore resolverStrategyFactory;
+ public final Map<String, EntryPoint> entryPoints;
+
+ public final Map<Long, PropagationContext> propagationContexts;
+
+ public final boolean marshalProcessInstances;
+ public final boolean marshalWorkItems;
+
+ public MarshallerReaderContext(InputStream stream,
+ InternalRuleBase ruleBase,
+ Map<Integer, BaseNode> sinks,
+ ObjectMarshallingStrategyStore resolverStrategyFactory) throws IOException {
+ this( stream,
+ ruleBase,
+ sinks,
+ resolverStrategyFactory,
+ true,
+ true );
+ }
+
+ public MarshallerReaderContext(InputStream stream,
+ InternalRuleBase ruleBase,
+ Map<Integer, BaseNode> sinks,
+ ObjectMarshallingStrategyStore resolverStrategyFactory,
+ boolean marshalProcessInstances,
+ boolean marshalWorkItems) throws IOException {
+ super( stream );
+ this.stream = this;
+ this.ruleBase = ruleBase;
+ this.sinks = sinks;
+ this.handles = new HashMap<Integer, InternalFactHandle>();
+ this.rightTuples = new HashMap<RightTupleKey, RightTuple>();
+ this.terminalTupleMap = new HashMap<Integer, LeftTuple>();
+ this.entryPoints = new HashMap<String, EntryPoint>();
+ this.propagationContexts = new HashMap<Long, PropagationContext>();
+ this.resolverStrategyFactory = resolverStrategyFactory;
+ this.marshalProcessInstances = marshalProcessInstances;
+ this.marshalWorkItems = marshalWorkItems;
+ }
+}
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerReaderContext.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerWriteContext.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerWriteContext.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerWriteContext.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,67 @@
+/**
+ *
+ */
+package org.drools.marshalling.impl;
+
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.IdentityHashMap;
+import java.util.Map;
+
+import org.drools.common.BaseNode;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.LeftTuple;
+
+public class MarshallerWriteContext extends ObjectOutputStream {
+ public final MarshallerWriteContext stream;
+ public final InternalRuleBase ruleBase;
+ public final InternalWorkingMemory wm;
+ public final Map<Integer, BaseNode> sinks;
+
+ public final PrintStream out = System.out;
+
+ public final ObjectMarshallingStrategyStore objectMarshallingStrategyStore;
+
+ public final Map<LeftTuple, Integer> terminalTupleMap;
+
+ public final boolean marshalProcessInstances;
+ public final boolean marshalWorkItems;
+
+ public MarshallerWriteContext(OutputStream stream,
+ InternalRuleBase ruleBase,
+ InternalWorkingMemory wm,
+ Map<Integer, BaseNode> sinks,
+ ObjectMarshallingStrategyStore resolverStrategyFactory) throws IOException {
+ this( stream,
+ ruleBase,
+ wm,
+ sinks,
+ resolverStrategyFactory,
+ true,
+ true );
+ }
+
+ public MarshallerWriteContext(OutputStream stream,
+ InternalRuleBase ruleBase,
+ InternalWorkingMemory wm,
+ Map<Integer, BaseNode> sinks,
+ ObjectMarshallingStrategyStore resolverStrategyFactory,
+ boolean marshalProcessInstances,
+ boolean marshalWorkItems) throws IOException {
+ super( stream );
+ this.stream = this;
+ this.ruleBase = ruleBase;
+ this.wm = wm;
+ this.sinks = sinks;
+
+ this.objectMarshallingStrategyStore = resolverStrategyFactory;
+
+ this.terminalTupleMap = new IdentityHashMap<LeftTuple, Integer>();
+
+ this.marshalProcessInstances = marshalProcessInstances;
+ this.marshalWorkItems = marshalWorkItems;
+ }
+}
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallerWriteContext.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallingConfiguration.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallingConfiguration.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallingConfiguration.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,9 @@
+package org.drools.marshalling.impl;
+
+public interface MarshallingConfiguration {
+ ObjectMarshallingStrategyStore getObjectMarshallingStrategyStore();
+
+ boolean isMarshallProcessInstances();
+
+ boolean isMarshallWorkItems();
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallingConfiguration.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallingConfigurationImpl.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallingConfigurationImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallingConfigurationImpl.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,50 @@
+package org.drools.marshalling.impl;
+
+import org.drools.marshalling.ObjectMarshallingStrategy;
+
+public class MarshallingConfigurationImpl
+ implements
+ MarshallingConfiguration {
+ private ObjectMarshallingStrategyStore objectMarshallingStrategyStore;
+ private boolean marshallProcessInstances;
+ private boolean marshallWorkItems;
+
+ public MarshallingConfigurationImpl() {
+ this( null,
+ true,
+ true );
+ }
+
+ public MarshallingConfigurationImpl(ObjectMarshallingStrategy[] strategies,
+ boolean marshallProcessInstances,
+ boolean marshallWorkItems) {
+ this.objectMarshallingStrategyStore = new ObjectMarshallingStrategyStore( strategies );
+ this.marshallProcessInstances = marshallProcessInstances;
+ this.marshallWorkItems = marshallWorkItems;
+ }
+
+ public boolean isMarshallProcessInstances() {
+ return this.marshallProcessInstances;
+ }
+
+ public void setMarshallProcessInstances(boolean marshallProcessInstances) {
+ this.marshallProcessInstances = marshallProcessInstances;
+ }
+
+ public boolean isMarshallWorkItems() {
+ return this.marshallWorkItems;
+ }
+
+ public void setMarshallWorkItems(boolean marshallWorkItems) {
+ this.marshallWorkItems = marshallWorkItems;
+ }
+
+ public ObjectMarshallingStrategyStore getObjectMarshallingStrategyStore() {
+ return this.objectMarshallingStrategyStore;
+ }
+
+ public void setPlaceholderResolverStrategyFactory(ObjectMarshallingStrategyStore placeholderResolverStrategyFactory) {
+ this.objectMarshallingStrategyStore = placeholderResolverStrategyFactory;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/MarshallingConfigurationImpl.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ObjectMarshallingStrategyStore.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PlaceholderResolverStrategyFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ObjectMarshallingStrategyStore.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ObjectMarshallingStrategyStore.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,28 @@
+package org.drools.marshalling.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.marshalling.ObjectMarshallingStrategy;
+
+public class ObjectMarshallingStrategyStore {
+ private ObjectMarshallingStrategy[] strategiesList;
+
+ ObjectMarshallingStrategyStore(ObjectMarshallingStrategy[] strategiesList) {
+ this.strategiesList = strategiesList;
+ }
+
+ public ObjectMarshallingStrategy getStrategy(int index) {
+ return this.strategiesList[ index ];
+ }
+
+ public int getStrategy(Object object) {
+ for ( int i = 0, length = this.strategiesList.length; i < length; i++ ) {
+ if ( strategiesList[i].accept( object ) ) {
+ return i;
+ }
+ }
+ throw new RuntimeException( "Unable to find PlaceholderResolverStrategy for class : " + object.getClass() + " object : " + object );
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ObjectMarshallingStrategyStore.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,986 @@
+package org.drools.marshalling.impl;
+
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.drools.InitialFact;
+import org.drools.base.ClassObjectType;
+import org.drools.common.AgendaItem;
+import org.drools.common.DefaultAgenda;
+import org.drools.common.EqualityKey;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.common.LogicalDependency;
+import org.drools.common.NodeMemory;
+import org.drools.common.ObjectStore;
+import org.drools.common.RuleFlowGroupImpl;
+import org.drools.common.WorkingMemoryAction;
+import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.process.core.context.swimlane.SwimlaneContext;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.process.instance.context.swimlane.SwimlaneContextInstance;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.process.instance.timer.TimerInstance;
+import org.drools.process.instance.timer.TimerManager;
+import org.drools.reteoo.BetaNode;
+import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.NodeTypeEnums;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.reteoo.RightTuple;
+import org.drools.reteoo.RuleTerminalNode;
+import org.drools.reteoo.AccumulateNode.AccumulateContext;
+import org.drools.reteoo.AccumulateNode.AccumulateMemory;
+import org.drools.reteoo.CollectNode.CollectContext;
+import org.drools.reteoo.CollectNode.CollectMemory;
+import org.drools.rule.EntryPoint;
+import org.drools.rule.Rule;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.WorkItem;
+import org.drools.spi.ActivationGroup;
+import org.drools.spi.AgendaGroup;
+import org.drools.spi.PropagationContext;
+import org.drools.spi.RuleFlowGroup;
+import org.drools.util.ObjectHashMap;
+import org.drools.util.ObjectHashSet;
+import org.drools.workflow.instance.node.CompositeContextNodeInstance;
+import org.drools.workflow.instance.node.ForEachNodeInstance;
+import org.drools.workflow.instance.node.HumanTaskNodeInstance;
+import org.drools.workflow.instance.node.JoinInstance;
+import org.drools.workflow.instance.node.MilestoneNodeInstance;
+import org.drools.workflow.instance.node.RuleSetNodeInstance;
+import org.drools.workflow.instance.node.SubProcessNodeInstance;
+import org.drools.workflow.instance.node.TimerNodeInstance;
+import org.drools.workflow.instance.node.WorkItemNodeInstance;
+
+public class OutputMarshaller {
+ public static void writeSession(MarshallerWriteContext context) throws IOException {
+ ReteooWorkingMemory wm = (ReteooWorkingMemory) context.wm;
+
+ final boolean multithread = wm.isPartitionManagersActive();
+ // is multi-thread active?
+ if( multithread ) {
+ context.writeBoolean( true );
+ wm.stopPartitionManagers();
+ } else {
+ context.writeBoolean( false );
+ }
+
+ context.writeInt( wm.getFactHandleFactory().getId() );
+ context.writeLong( wm.getFactHandleFactory().getRecency() );
+// context.out.println( "FactHandleFactory int:" + wm.getFactHandleFactory().getId() + " long:" + wm.getFactHandleFactory().getRecency() );
+
+ InternalFactHandle handle = context.wm.getInitialFactHandle();
+ context.writeInt( handle.getId() );
+ context.writeLong( handle.getRecency() );
+// context.out.println( "InitialFact int:" + handle.getId() + " long:" + handle.getRecency() );
+
+ context.writeLong( wm.getPropagationIdCounter() );
+// context.out.println( "PropagationCounter long:" + wm.getPropagationIdCounter() );
+
+ writeAgenda( context );
+
+ writeFactHandles( context );
+
+ writeActionQueue( context );
+
+ if ( wm.getTruthMaintenanceSystem() != null ) {
+ context.writeBoolean( true );
+ writeTruthMaintenanceSystem( context );
+ } else {
+ context.writeBoolean( false );
+ }
+
+ if ( context.marshalProcessInstances ) {
+ writeProcessInstances( context );
+ }
+
+ if ( context.marshalWorkItems ) {
+ writeWorkItems( context );
+ }
+
+ writeTimers( context );
+
+ if( multithread ) {
+ wm.startPartitionManagers();
+ }
+ }
+
+ public static void writeAgenda(MarshallerWriteContext context) throws IOException {
+ InternalWorkingMemory wm = context.wm;
+ DefaultAgenda agenda = (DefaultAgenda) wm.getAgenda();
+
+ Map<String, ActivationGroup> activationGroups = agenda.getActivationGroupsMap();
+
+ AgendaGroup[] agendaGroups = (AgendaGroup[]) agenda.getAgendaGroupsMap().values().toArray( new AgendaGroup[agenda.getAgendaGroupsMap().size()] );
+ Arrays.sort( agendaGroups,
+ AgendaGroupSorter.instance );
+
+ for ( AgendaGroup group : agendaGroups ) {
+ context.writeShort( PersisterEnums.AGENDA_GROUP );
+ context.writeUTF( group.getName() );
+ context.writeBoolean( group.isActive() );
+ }
+ context.writeShort( PersisterEnums.END );
+
+ LinkedList<AgendaGroup> focusStack = agenda.getStackList();
+ for ( Iterator<AgendaGroup> it = focusStack.iterator(); it.hasNext(); ) {
+ AgendaGroup group = it.next();
+ context.writeShort( PersisterEnums.AGENDA_GROUP );
+ context.writeUTF( group.getName() );
+ }
+ context.writeShort( PersisterEnums.END );
+
+ RuleFlowGroupImpl[] ruleFlowGroups = (RuleFlowGroupImpl[]) agenda.getRuleFlowGroupsMap().values().toArray( new RuleFlowGroupImpl[agenda.getRuleFlowGroupsMap().size()] );
+ Arrays.sort( ruleFlowGroups,
+ RuleFlowGroupSorter.instance );
+
+ for ( RuleFlowGroupImpl group : ruleFlowGroups ) {
+ context.writeShort( PersisterEnums.RULE_FLOW_GROUP );
+ //group.write( context );
+ context.writeUTF( group.getName() );
+ context.writeBoolean( group.isActive() );
+ context.writeBoolean( group.isAutoDeactivate() );
+ }
+ context.writeShort( PersisterEnums.END );
+ }
+
+ public static class AgendaGroupSorter
+ implements
+ Comparator<AgendaGroup> {
+ public static final AgendaGroupSorter instance = new AgendaGroupSorter();
+
+ public int compare(AgendaGroup group1,
+ AgendaGroup group2) {
+ return group1.getName().compareTo( group2.getName() );
+ }
+ }
+
+ public static class RuleFlowGroupSorter
+ implements
+ Comparator<RuleFlowGroup> {
+ public static final RuleFlowGroupSorter instance = new RuleFlowGroupSorter();
+
+ public int compare(RuleFlowGroup group1,
+ RuleFlowGroup group2) {
+ return group1.getName().compareTo( group2.getName() );
+ }
+ }
+
+ public static void writeActionQueue(MarshallerWriteContext context) throws IOException {
+ ReteooWorkingMemory wm = (ReteooWorkingMemory) context.wm;
+
+ WorkingMemoryAction[] queue = wm.getActionQueue().toArray( new WorkingMemoryAction[wm.getActionQueue().size()] );
+ for ( int i = queue.length - 1; i >= 0; i-- ) {
+ context.writeShort( PersisterEnums.WORKING_MEMORY_ACTION );
+ queue[i].write( context );
+ }
+ context.writeShort( PersisterEnums.END );
+ }
+
+ public static void writeTruthMaintenanceSystem(MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+
+ ObjectHashMap assertMap = context.wm.getTruthMaintenanceSystem().getAssertMap();
+
+ EqualityKey[] keys = new EqualityKey[assertMap.size()];
+ org.drools.util.Iterator it = assertMap.iterator();
+ int i = 0;
+ for ( org.drools.util.ObjectHashMap.ObjectEntry entry = (org.drools.util.ObjectHashMap.ObjectEntry) it.next(); entry != null; entry = (org.drools.util.ObjectHashMap.ObjectEntry) it.next() ) {
+ EqualityKey key = (EqualityKey) entry.getKey();
+ keys[i++] = key;
+ }
+
+ Arrays.sort( keys,
+ EqualityKeySorter.instance );
+
+ // write the assert map of Equality keys
+ for ( EqualityKey key : keys ) {
+ stream.writeShort( PersisterEnums.EQUALITY_KEY );
+ stream.writeInt( key.getStatus() );
+ InternalFactHandle handle = key.getFactHandle();
+ stream.writeInt( handle.getId() );
+// context.out.println( "EqualityKey int:" + key.getStatus() + " int:" + handle.getId() );
+ if ( key.getOtherFactHandle() != null && !key.getOtherFactHandle().isEmpty() ) {
+ for ( InternalFactHandle handle2 : key.getOtherFactHandle() ) {
+ stream.writeShort( PersisterEnums.FACT_HANDLE );
+ stream.writeInt( handle2.getId() );
+// context.out.println( "OtherHandle int:" + handle2.getId() );
+ }
+ }
+ stream.writeShort( PersisterEnums.END );
+ }
+ stream.writeShort( PersisterEnums.END );
+ }
+
+ public static class EqualityKeySorter
+ implements
+ Comparator<EqualityKey> {
+ public static final EqualityKeySorter instance = new EqualityKeySorter();
+
+ public int compare(EqualityKey key1,
+ EqualityKey key2) {
+ return key1.getFactHandle().getId() - key2.getFactHandle().getId();
+ }
+ }
+
+ public static void writeFactHandles(MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ InternalWorkingMemory wm = context.wm;
+ ObjectMarshallingStrategyStore objectMarshallingStrategyStore = context.objectMarshallingStrategyStore;
+
+ writeInitialFactHandleRightTuples( context );
+
+ stream.writeInt( wm.getObjectStore().size() );
+
+ // Write out FactHandles
+ for ( InternalFactHandle handle : orderFacts( wm.getObjectStore() ) ) {
+ //stream.writeShort( PersisterEnums.FACT_HANDLE );
+ //InternalFactHandle handle = (InternalFactHandle) it.next();
+ writeFactHandle( context,
+ stream,
+ objectMarshallingStrategyStore,
+ handle );
+
+ writeRightTuples( handle,
+ context );
+ }
+
+ writeInitialFactHandleLeftTuples( context );
+
+ writeLeftTuples( context );
+
+ writePropagationContexts( context );
+
+ writeActivations( context );
+ }
+
+ private static void writeFactHandle(MarshallerWriteContext context,
+ ObjectOutputStream stream,
+ ObjectMarshallingStrategyStore objectMarshallingStrategyStore,
+ InternalFactHandle handle) throws IOException {
+ stream.writeInt( handle.getId() );
+ stream.writeLong( handle.getRecency() );
+
+// context.out.println( "Object : int:" + handle.getId() + " long:" + handle.getRecency() );
+// context.out.println( handle.getObject() );
+
+ Object object = handle.getObject();
+
+ int index = objectMarshallingStrategyStore.getStrategy( object );
+
+ ObjectMarshallingStrategy strategy = objectMarshallingStrategyStore.getStrategy( index );
+
+ stream.writeInt( index );
+
+ strategy.write( stream,
+ object );
+ }
+
+ public static InternalFactHandle[] orderFacts(ObjectStore objectStore) {
+ // this method is just needed for testing purposes, to allow round tripping
+ int size = objectStore.size();
+ InternalFactHandle[] handles = new InternalFactHandle[size];
+ int i = 0;
+ for ( Iterator it = objectStore.iterateFactHandles(); it.hasNext(); ) {
+ handles[i++] = (InternalFactHandle) it.next();
+ }
+
+ Arrays.sort( handles,
+ new HandleSorter() );
+
+ return handles;
+ }
+
+ public static class HandleSorter
+ implements
+ Comparator<InternalFactHandle> {
+ public int compare(InternalFactHandle h1,
+ InternalFactHandle h2) {
+ return h1.getId() - h2.getId();
+ }
+ }
+
+ public static void writeInitialFactHandleRightTuples(MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ InternalRuleBase ruleBase = context.ruleBase;
+
+ ObjectTypeNode initialFactNode = ruleBase.getRete().getEntryPointNode( EntryPoint.DEFAULT ).getObjectTypeNodes().get( new ClassObjectType( InitialFact.class ) );
+
+ // do we write the fact to the objecttypenode memory
+ if ( initialFactNode != null ) {
+ ObjectHashSet initialFactMemory = (ObjectHashSet) context.wm.getNodeMemory( initialFactNode );
+ if ( initialFactMemory != null && !initialFactMemory.isEmpty() ) {
+// context.out.println( "InitialFactMemory true int:" + initialFactNode.getId() );
+ stream.writeBoolean( true );
+ stream.writeInt( initialFactNode.getId() );
+
+// context.out.println( "InitialFact RightTuples" );
+ writeRightTuples( context.wm.getInitialFactHandle(),
+ context );
+ } else {
+// context.out.println( "InitialFactMemory false " );
+ stream.writeBoolean( false );
+ }
+ } else {
+// context.out.println( "InitialFactMemory false " );
+ stream.writeBoolean( false );
+ }
+ }
+
+ public static void writeInitialFactHandleLeftTuples(MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+
+// context.out.println( "InitialFact LeftTuples Start" );
+ InternalFactHandle handle = context.wm.getInitialFactHandle();
+ for ( LeftTuple leftTuple = getLeftTuple( handle.getLeftTuple() ); leftTuple != null; leftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
+
+ stream.writeInt( leftTuple.getLeftTupleSink().getId() );
+// context.out.println( "LeftTuple sinkId:" + leftTuple.getLeftTupleSink().getId() );
+ writeLeftTuple( leftTuple,
+ context,
+ true );
+ }
+ stream.writeShort( PersisterEnums.END );
+// context.out.println( "InitialFact LeftTuples End" );
+ }
+
+ public static void writeRightTuples(InternalFactHandle handle,
+ MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+// context.out.println( "RightTuples Start" );
+
+ RightTuple rightTuple = handle.getRightTuple();
+ for ( RightTuple tempRightTuple = rightTuple; tempRightTuple != null; tempRightTuple = (RightTuple) tempRightTuple.getHandleNext() ) {
+ rightTuple = tempRightTuple;
+ }
+ for ( ; rightTuple != null; rightTuple = (RightTuple) rightTuple.getHandlePrevious() ) {
+ stream.writeShort( PersisterEnums.RIGHT_TUPLE );
+ writeRightTuple( rightTuple,
+ context );
+ }
+ stream.writeShort( PersisterEnums.END );
+// context.out.println( "RightTuples END" );
+ }
+
+ public static void writeRightTuple(RightTuple rightTuple,
+ MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ InternalWorkingMemory wm = context.wm;
+ stream.writeInt( rightTuple.getRightTupleSink().getId() );
+// context.out.println( "RightTuple sinkId:" + rightTuple.getRightTupleSink().getId() );
+ }
+
+ public static void writeLeftTuples(MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ InternalWorkingMemory wm = context.wm;
+
+ // Write out LeftTuples
+// context.out.println( "LeftTuples Start" );
+ for ( InternalFactHandle handle : orderFacts( wm.getObjectStore() ) ) {
+ //InternalFactHandle handle = (InternalFactHandle) it.next();
+
+ for ( LeftTuple leftTuple = getLeftTuple( handle.getLeftTuple() ); leftTuple != null; leftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
+
+ stream.writeInt( leftTuple.getLeftTupleSink().getId() );
+ stream.writeInt( handle.getId() );
+
+// context.out.println( "LeftTuple sinkId:" + leftTuple.getLeftTupleSink().getId() + " handleId:" + handle.getId() );
+ writeLeftTuple( leftTuple,
+ context,
+ true );
+ }
+ }
+ stream.writeShort( PersisterEnums.END );
+// context.out.println( "LeftTuples End" );
+ }
+
+ public static void writeLeftTuple(LeftTuple leftTuple,
+ MarshallerWriteContext context,
+ boolean recurse) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ InternalRuleBase ruleBase = context.ruleBase;
+ InternalWorkingMemory wm = context.wm;
+
+ LeftTupleSink sink = leftTuple.getLeftTupleSink();
+
+ switch ( sink.getType() ) {
+ case NodeTypeEnums.JoinNode : {
+// context.out.println( "JoinNode" );
+ for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
+ stream.writeShort( PersisterEnums.RIGHT_TUPLE );
+ stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
+ stream.writeInt( childLeftTuple.getRightParent().getFactHandle().getId() );
+// context.out.println( "RightTuple int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
+ writeLeftTuple( childLeftTuple,
+ context,
+ recurse );
+ }
+ stream.writeShort( PersisterEnums.END );
+// context.out.println( "JoinNode --- END" );
+ break;
+ }
+ case NodeTypeEnums.EvalConditionNode : {
+// context.out.println( "EvalConditionNode" );
+ for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
+ stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
+ writeLeftTuple( childLeftTuple,
+ context,
+ recurse );
+ }
+ stream.writeShort( PersisterEnums.END );
+ break;
+ }
+ case NodeTypeEnums.NotNode : {
+ if ( leftTuple.getBlocker() == null ) {
+ // is not blocked so has children
+ stream.writeShort( PersisterEnums.LEFT_TUPLE_NOT_BLOCKED );
+
+ for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
+ stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
+ writeLeftTuple( childLeftTuple,
+ context,
+ recurse );
+ }
+ stream.writeShort( PersisterEnums.END );
+
+ } else {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE_BLOCKED );
+ stream.writeInt( leftTuple.getBlocker().getFactHandle().getId() );
+ }
+ break;
+ }
+ case NodeTypeEnums.ExistsNode : {
+ if ( leftTuple.getBlocker() == null ) {
+ // is blocked so has children
+ stream.writeShort( PersisterEnums.LEFT_TUPLE_NOT_BLOCKED );
+ } else {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE_BLOCKED );
+ stream.writeInt( leftTuple.getBlocker().getFactHandle().getId() );
+
+ for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
+ stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
+ writeLeftTuple( childLeftTuple,
+ context,
+ recurse );
+ }
+ stream.writeShort( PersisterEnums.END );
+ }
+ break;
+ }
+ case NodeTypeEnums.AccumulateNode : {
+// context.out.println( "AccumulateNode" );
+ // accumulate nodes generate new facts on-demand and need special procedures when serializing to persistent storage
+ AccumulateMemory memory = (AccumulateMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ AccumulateContext accctx = (AccumulateContext) memory.betaMemory.getCreatedHandles().get( leftTuple );
+ // first we serialize the generated fact handle
+ writeFactHandle( context,
+ stream,
+ context.objectMarshallingStrategyStore,
+ accctx.result.getFactHandle() );
+ // then we serialize the associated accumulation context
+ stream.writeObject( accctx.context );
+ // then we serialize the boolean propagated flag
+ stream.writeBoolean( accctx.propagated );
+
+ // then we serialize all the propagated tuples
+ for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
+ if( leftTuple.getLeftTupleSink().getId() == childLeftTuple.getLeftTupleSink().getId()) {
+ // this is a matching record, so, associate the right tuples
+// context.out.println( "RightTuple(match) int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
+ stream.writeShort( PersisterEnums.RIGHT_TUPLE );
+ stream.writeInt( childLeftTuple.getRightParent().getFactHandle().getId() );
+ } else {
+ // this is a propagation record
+// context.out.println( "RightTuple(propagation) int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
+ stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
+ writeLeftTuple( childLeftTuple,
+ context,
+ recurse );
+ }
+ }
+ stream.writeShort( PersisterEnums.END );
+// context.out.println( "AccumulateNode --- END" );
+ break;
+ }
+ case NodeTypeEnums.CollectNode : {
+// context.out.println( "CollectNode" );
+ // collect nodes generate new facts on-demand and need special procedures when serializing to persistent storage
+ CollectMemory memory = (CollectMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ CollectContext colctx = (CollectContext) memory.betaMemory.getCreatedHandles().get( leftTuple );
+ // first we serialize the generated fact handle
+ writeFactHandle( context,
+ stream,
+ context.objectMarshallingStrategyStore,
+ colctx.resultTuple.getFactHandle() );
+ // then we serialize the boolean propagated flag
+ stream.writeBoolean( colctx.propagated );
+
+ // then we serialize all the propagated tuples
+ for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
+ if( leftTuple.getLeftTupleSink().getId() == childLeftTuple.getLeftTupleSink().getId()) {
+ // this is a matching record, so, associate the right tuples
+// context.out.println( "RightTuple(match) int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
+ stream.writeShort( PersisterEnums.RIGHT_TUPLE );
+ stream.writeInt( childLeftTuple.getRightParent().getFactHandle().getId() );
+ } else {
+ // this is a propagation record
+// context.out.println( "RightTuple(propagation) int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
+ stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
+ writeLeftTuple( childLeftTuple,
+ context,
+ recurse );
+ }
+ }
+ stream.writeShort( PersisterEnums.END );
+// context.out.println( "CollectNode --- END" );
+ break;
+ }
+ case NodeTypeEnums.RightInputAdaterNode : {
+// context.out.println( "RightInputAdapterNode" );
+ // RIANs generate new fact handles on-demand to wrap tuples and need special procedures when serializing to persistent storage
+ ObjectHashMap memory = (ObjectHashMap) context.wm.getNodeMemory( (NodeMemory) sink );
+ InternalFactHandle ifh = (InternalFactHandle) memory.get( leftTuple );
+ // first we serialize the generated fact handle ID
+// context.out.println( "FactHandle id:"+ifh.getId() );
+ stream.writeInt( ifh.getId() );
+ stream.writeLong( ifh.getRecency() );
+
+ writeRightTuples( ifh, context );
+
+ stream.writeShort( PersisterEnums.END );
+// context.out.println( "RightInputAdapterNode --- END" );
+ break;
+ }
+ case NodeTypeEnums.RuleTerminalNode : {
+// context.out.println( "RuleTerminalNode" );
+ int pos = context.terminalTupleMap.size();
+ context.terminalTupleMap.put( leftTuple,
+ pos );
+ break;
+ }
+ }
+ }
+
+ public static LeftTuple getLeftTuple(LeftTuple leftTuple) {
+ for ( LeftTuple tempLeftTuple = leftTuple; tempLeftTuple != null; tempLeftTuple = (LeftTuple) tempLeftTuple.getLeftParentNext() ) {
+ leftTuple = tempLeftTuple;
+ }
+ return leftTuple;
+ }
+
+ public static void writeActivations(MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+
+ Entry<LeftTuple, Integer>[] entries = context.terminalTupleMap.entrySet().toArray( new Entry[context.terminalTupleMap.size()] );
+ Arrays.sort( entries,
+ TupleSorter.instance );
+
+ //Map<LeftTuple, Integer> tuples = context.terminalTupleMap;
+ if ( entries.length != 0 ) {
+ for ( Entry<LeftTuple, Integer> entry : entries ) {
+ if (entry.getKey().getActivation() != null) {
+ LeftTuple leftTuple = entry.getKey();
+ stream.writeShort(PersisterEnums.ACTIVATION);
+ writeActivation(context, leftTuple, (AgendaItem) leftTuple
+ .getActivation(), (RuleTerminalNode) leftTuple
+ .getLeftTupleSink());
+ }
+ }
+ }
+ stream.writeShort( PersisterEnums.END );
+ }
+
+ public static class TupleSorter
+ implements
+ Comparator<Entry<LeftTuple, Integer>> {
+ public static final TupleSorter instance = new TupleSorter();
+
+ public int compare(Entry<LeftTuple, Integer> e1,
+ Entry<LeftTuple, Integer> e2) {
+ return e1.getValue() - e2.getValue();
+ }
+ }
+
+ public static void writeActivation(MarshallerWriteContext context,
+ LeftTuple leftTuple,
+ AgendaItem agendaItem,
+ RuleTerminalNode ruleTerminalNode) throws IOException {
+ ObjectOutputStream stream = context.stream;
+
+ stream.writeLong( agendaItem.getActivationNumber() );
+
+ stream.writeInt( context.terminalTupleMap.get( leftTuple ) );
+
+ stream.writeInt( agendaItem.getSalience() );
+
+ Rule rule = agendaItem.getRule();
+ stream.writeUTF( rule.getPackage() );
+ stream.writeUTF( rule.getName() );
+
+// context.out.println( "Rule " + rule.getPackage() + "." + rule.getName() );
+
+// context.out.println( "AgendaItem long:" + agendaItem.getPropagationContext().getPropagationNumber() );
+ stream.writeLong( agendaItem.getPropagationContext().getPropagationNumber() );
+
+ if ( agendaItem.getActivationGroupNode() != null ) {
+ stream.writeBoolean( true );
+// context.out.println( "ActivationGroup bool:" + true );
+ stream.writeUTF( agendaItem.getActivationGroupNode().getActivationGroup().getName() );
+// context.out.println( "ActivationGroup string:" + agendaItem.getActivationGroupNode().getActivationGroup().getName() );
+ } else {
+ stream.writeBoolean( false );
+// context.out.println( "ActivationGroup bool:" + false );
+ }
+
+ stream.writeBoolean( agendaItem.isActivated() );
+// context.out.println( "AgendaItem bool:" + agendaItem.isActivated() );
+
+ org.drools.util.LinkedList list = agendaItem.getLogicalDependencies();
+ if ( list != null && !list.isEmpty() ) {
+ for ( LogicalDependency node = (LogicalDependency) list.getFirst(); node != null; node = (LogicalDependency) node.getNext() ) {
+ stream.writeShort( PersisterEnums.LOGICAL_DEPENDENCY );
+ stream.writeInt( ((InternalFactHandle) node.getFactHandle()).getId() );
+// context.out.println( "Logical Depenency : int " + ((InternalFactHandle) node.getFactHandle()).getId() );
+ }
+ }
+ stream.writeShort( PersisterEnums.END );
+ }
+
+ public static void writePropagationContexts(MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+
+ Entry<LeftTuple, Integer>[] entries = context.terminalTupleMap.entrySet().toArray( new Entry[context.terminalTupleMap.size()] );
+ Arrays.sort( entries,
+ TupleSorter.instance );
+
+ //Map<LeftTuple, Integer> tuples = context.terminalTupleMap;
+ if ( entries.length != 0 ) {
+ Map<Long, PropagationContext> pcMap = new HashMap<Long, PropagationContext>();
+ for ( Entry<LeftTuple, Integer> entry : entries ) {
+ LeftTuple leftTuple = entry.getKey();
+ if (leftTuple.getActivation() != null) {
+ PropagationContext pc = leftTuple.getActivation()
+ .getPropagationContext();
+ if (!pcMap.containsKey(pc.getPropagationNumber())) {
+ stream.writeShort(PersisterEnums.PROPAGATION_CONTEXT);
+ writePropagationContext(context, pc);
+ pcMap.put(pc.getPropagationNumber(), pc);
+ }
+ }
+ }
+ }
+
+ stream.writeShort( PersisterEnums.END );
+ }
+
+ public static void writePropagationContext(MarshallerWriteContext context,
+ PropagationContext pc) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ Map<LeftTuple, Integer> tuples = context.terminalTupleMap;
+
+ stream.writeInt( pc.getType() );
+
+ Rule ruleOrigin = pc.getRuleOrigin();
+ if ( ruleOrigin != null ) {
+ stream.writeBoolean( true );
+ stream.writeUTF( ruleOrigin.getPackage() );
+ stream.writeUTF( ruleOrigin.getName() );
+ } else {
+ stream.writeBoolean( false );
+ }
+
+ LeftTuple tupleOrigin = pc.getLeftTupleOrigin();
+ if ( tupleOrigin != null && tuples.containsKey( tupleOrigin )) {
+ stream.writeBoolean( true );
+ stream.writeInt( tuples.get( tupleOrigin ) );
+ } else {
+ stream.writeBoolean( false );
+ }
+
+ stream.writeLong( pc.getPropagationNumber() );
+ if ( pc.getFactHandleOrigin() != null ) {
+ stream.writeInt( ((InternalFactHandle)pc.getFactHandleOrigin()).getId() );
+ } else {
+ stream.writeInt( -1 );
+ }
+
+ stream.writeInt( pc.getActiveActivations() );
+ stream.writeInt( pc.getDormantActivations() );
+
+ stream.writeUTF( pc.getEntryPoint().getEntryPointId() );
+ }
+
+ public static void writeProcessInstances(MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ List<org.drools.runtime.process.ProcessInstance> processInstances = new ArrayList<org.drools.runtime.process.ProcessInstance>( context.wm.getProcessInstances() );
+ Collections.sort( processInstances,
+ new Comparator<org.drools.runtime.process.ProcessInstance>() {
+ public int compare(org.drools.runtime.process.ProcessInstance o1,
+ org.drools.runtime.process.ProcessInstance o2) {
+ return (int) (o1.getId() - o2.getId());
+ }
+ } );
+ for ( org.drools.runtime.process.ProcessInstance processInstance : processInstances ) {
+ stream.writeShort( PersisterEnums.PROCESS_INSTANCE );
+ writeProcessInstance( context,
+ (RuleFlowProcessInstance) processInstance );
+ }
+ stream.writeShort( PersisterEnums.END );
+ }
+
+ public static void writeProcessInstance(MarshallerWriteContext context,
+ RuleFlowProcessInstance processInstance) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ stream.writeLong( processInstance.getId() );
+ stream.writeUTF( processInstance.getProcessId() );
+ stream.writeInt( processInstance.getState() );
+ stream.writeLong( processInstance.getNodeInstanceCounter() );
+
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
+ Map<String, Object> variables = variableScopeInstance.getVariables();
+ List<String> keys = new ArrayList<String>( variables.keySet() );
+ Collections.sort( keys,
+ new Comparator<String>() {
+ public int compare(String o1,
+ String o2) {
+ return o1.compareTo( o2 );
+ }
+ } );
+ stream.writeInt( keys.size() );
+ for ( String key : keys ) {
+ stream.writeUTF( key );
+ stream.writeObject( variables.get( key ) );
+ }
+
+ SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) processInstance.getContextInstance( SwimlaneContext.SWIMLANE_SCOPE );
+ Map<String, String> swimlaneActors = swimlaneContextInstance.getSwimlaneActors();
+ stream.writeInt( swimlaneActors.size() );
+ for ( Map.Entry<String, String> entry : swimlaneActors.entrySet() ) {
+ stream.writeUTF( entry.getKey() );
+ stream.writeUTF( entry.getValue() );
+ }
+
+ List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( processInstance.getNodeInstances() );
+ Collections.sort( nodeInstances,
+ new Comparator<NodeInstance>() {
+ public int compare(NodeInstance o1,
+ NodeInstance o2) {
+ return (int) (o1.getId() - o2.getId());
+ }
+ } );
+ for ( NodeInstance nodeInstance : nodeInstances ) {
+ stream.writeShort( PersisterEnums.NODE_INSTANCE );
+ writeNodeInstance( context,
+ nodeInstance );
+ }
+ stream.writeShort( PersisterEnums.END );
+ }
+
+ public static void writeNodeInstance(MarshallerWriteContext context,
+ NodeInstance nodeInstance) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ stream.writeLong( nodeInstance.getId() );
+ stream.writeLong( nodeInstance.getNodeId() );
+ if ( nodeInstance instanceof RuleSetNodeInstance ) {
+ stream.writeShort( PersisterEnums.RULE_SET_NODE_INSTANCE );
+ } else if ( nodeInstance instanceof HumanTaskNodeInstance ) {
+ stream.writeShort( PersisterEnums.HUMAN_TASK_NODE_INSTANCE );
+ stream.writeLong( ((HumanTaskNodeInstance) nodeInstance).getWorkItem().getId() );
+ } else if ( nodeInstance instanceof WorkItemNodeInstance ) {
+ stream.writeShort( PersisterEnums.WORK_ITEM_NODE_INSTANCE );
+ stream.writeLong( ((WorkItemNodeInstance) nodeInstance).getWorkItem().getId() );
+ } else if ( nodeInstance instanceof SubProcessNodeInstance ) {
+ stream.writeShort( PersisterEnums.SUB_PROCESS_NODE_INSTANCE );
+ stream.writeLong( ((SubProcessNodeInstance) nodeInstance).getProcessInstanceId() );
+ } else if ( nodeInstance instanceof MilestoneNodeInstance ) {
+ stream.writeShort( PersisterEnums.MILESTONE_NODE_INSTANCE );
+ List<Long> timerInstances =
+ ((MilestoneNodeInstance) nodeInstance).getTimerInstances();
+ if (timerInstances != null) {
+ stream.writeInt(timerInstances.size());
+ for (Long id: timerInstances) {
+ stream.writeLong(id);
+ }
+ } else {
+ stream.writeInt(0);
+ }
+ } else if ( nodeInstance instanceof TimerNodeInstance ) {
+ stream.writeShort( PersisterEnums.TIMER_NODE_INSTANCE );
+ stream.writeLong( ((TimerNodeInstance) nodeInstance).getTimerId() );
+ } else if ( nodeInstance instanceof JoinInstance ) {
+ stream.writeShort( PersisterEnums.JOIN_NODE_INSTANCE );
+ Map<Long, Integer> triggers = ((JoinInstance) nodeInstance).getTriggers();
+ stream.writeInt( triggers.size() );
+ List<Long> keys = new ArrayList<Long>( triggers.keySet() );
+ Collections.sort( keys,
+ new Comparator<Long>() {
+ public int compare(Long o1,
+ Long o2) {
+ return o1.compareTo( o2 );
+ }
+ } );
+ for ( Long key : keys ) {
+ stream.writeLong( key );
+ stream.writeInt( triggers.get( key ) );
+ }
+ } else if ( nodeInstance instanceof CompositeContextNodeInstance ) {
+ stream.writeShort( PersisterEnums.COMPOSITE_NODE_INSTANCE );
+ CompositeContextNodeInstance compositeNodeInstance = (CompositeContextNodeInstance) nodeInstance;
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) compositeNodeInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
+ Map<String, Object> variables = variableScopeInstance.getVariables();
+ List<String> keys = new ArrayList<String>( variables.keySet() );
+ Collections.sort( keys,
+ new Comparator<String>() {
+ public int compare(String o1,
+ String o2) {
+ return o1.compareTo( o2 );
+ }
+ } );
+ stream.writeInt( keys.size() );
+ for ( String key : keys ) {
+ stream.writeUTF( key );
+ stream.writeObject( variables.get( key ) );
+ }
+ List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( compositeNodeInstance.getNodeInstances() );
+ Collections.sort( nodeInstances,
+ new Comparator<NodeInstance>() {
+ public int compare(NodeInstance o1,
+ NodeInstance o2) {
+ return (int) (o1.getId() - o2.getId());
+ }
+ } );
+ for ( NodeInstance subNodeInstance : nodeInstances ) {
+ stream.writeShort( PersisterEnums.NODE_INSTANCE );
+ writeNodeInstance( context,
+ subNodeInstance );
+ }
+ stream.writeShort( PersisterEnums.END );
+ } else if ( nodeInstance instanceof ForEachNodeInstance ) {
+ stream.writeShort( PersisterEnums.FOR_EACH_NODE_INSTANCE );
+ ForEachNodeInstance forEachNodeInstance = (ForEachNodeInstance) nodeInstance;
+ List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( forEachNodeInstance.getNodeInstances() );
+ Collections.sort( nodeInstances,
+ new Comparator<NodeInstance>() {
+ public int compare(NodeInstance o1,
+ NodeInstance o2) {
+ return (int) (o1.getId() - o2.getId());
+ }
+ } );
+ for ( NodeInstance subNodeInstance : nodeInstances ) {
+ if ( subNodeInstance instanceof CompositeContextNodeInstance ) {
+ stream.writeShort( PersisterEnums.NODE_INSTANCE );
+ writeNodeInstance( context,
+ subNodeInstance );
+ }
+ }
+ stream.writeShort( PersisterEnums.END );
+ } else {
+ // TODO ForEachNodeInstance
+ // TODO timer manager
+ throw new IllegalArgumentException( "Unknown node instance type: " + nodeInstance );
+ }
+ }
+
+ public static void writeWorkItems(MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+
+ List<WorkItem> workItems = new ArrayList<WorkItem>(
+ ((WorkItemManager) context.wm.getWorkItemManager()).getWorkItems() );
+ Collections.sort( workItems,
+ new Comparator<WorkItem>() {
+ public int compare(WorkItem o1,
+ WorkItem o2) {
+ return (int) (o2.getId() - o1.getId());
+ }
+ } );
+ for ( WorkItem workItem : workItems ) {
+ stream.writeShort( PersisterEnums.WORK_ITEM );
+ writeWorkItem( context,
+ workItem );
+ }
+ stream.writeShort( PersisterEnums.END );
+ }
+
+ public static void writeWorkItem(MarshallerWriteContext context,
+ WorkItem workItem) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ stream.writeLong( workItem.getId() );
+ stream.writeLong( workItem.getProcessInstanceId() );
+ stream.writeUTF( workItem.getName() );
+ stream.writeInt( workItem.getState() );
+ Map<String, Object> parameters = workItem.getParameters();
+ stream.writeInt( parameters.size() );
+ for ( Map.Entry<String, Object> entry : parameters.entrySet() ) {
+ stream.writeUTF( entry.getKey() );
+ stream.writeObject( entry.getValue() );
+ }
+ }
+
+ public static void writeTimers(MarshallerWriteContext context) throws IOException {
+ ObjectOutputStream stream = context.stream;
+
+ TimerManager timerManager = context.wm.getTimerManager();
+ long timerId = timerManager.internalGetTimerId();
+ stream.writeLong( timerId );
+
+ // need to think on how to fix this
+ // stream.writeObject( timerManager.getTimerService() );
+
+ List<TimerInstance> timers = new ArrayList<TimerInstance>( timerManager.getTimers() );
+ Collections.sort( timers,
+ new Comparator<TimerInstance>() {
+ public int compare(TimerInstance o1,
+ TimerInstance o2) {
+ return (int) (o2.getId() - o1.getId());
+ }
+ } );
+ for ( TimerInstance timer : timers ) {
+ stream.writeShort( PersisterEnums.TIMER );
+ writeTimer( context,
+ timer );
+ }
+ stream.writeShort( PersisterEnums.END );
+ }
+
+ public static void writeTimer(MarshallerWriteContext context,
+ TimerInstance timer) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ stream.writeLong( timer.getId() );
+ stream.writeLong( timer.getTimerId() );
+ stream.writeLong( timer.getDelay() );
+ stream.writeLong( timer.getPeriod() );
+ stream.writeLong( timer.getProcessInstanceId() );
+ stream.writeLong( timer.getActivated().getTime() );
+ Date lastTriggered = timer.getLastTriggered();
+ if ( lastTriggered != null ) {
+ stream.writeBoolean( true );
+ stream.writeLong( timer.getLastTriggered().getTime() );
+ } else {
+ stream.writeBoolean( false );
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterEnums.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterEnums.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterEnums.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterEnums.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,43 @@
+package org.drools.marshalling.impl;
+
+public class PersisterEnums {
+ public static final short REPEAT = 0;
+ public static final short END = 1;
+ public static final short FACT_HANDLE = 2;
+ public static final short LEFT_TUPLE = 3;
+ public static final short RIGHT_TUPLE = 4;
+
+ public static final short INITIAL_FACT_NODE = 5;
+
+ public static final short LEFT_TUPLE_BLOCKED = 6;
+ public static final short LEFT_TUPLE_NOT_BLOCKED = 7;
+
+ public static final short ACTIVATION = 8;
+ public static final short PROPAGATION_CONTEXT = 9;
+
+ public static final short WORKING_MEMORY_ACTION = 10;
+
+ public static final short EQUALITY_KEY = 11;
+ public static final short LOGICAL_DEPENDENCY = 12;
+
+ public static final short AGENDA_GROUP = 13;
+ public static final short ACTIVATION_GROUP = 14;
+
+ public static final short RULE_FLOW_GROUP = 15;
+ public static final short RULE_FLOW_NODE = 16;
+
+ public static final short PROCESS_INSTANCE = 17;
+ public static final short NODE_INSTANCE = 18;
+ public static final short WORK_ITEM = 19;
+ public static final short RULE_SET_NODE_INSTANCE = 20;
+ public static final short WORK_ITEM_NODE_INSTANCE = 21;
+ public static final short SUB_PROCESS_NODE_INSTANCE = 22;
+ public static final short MILESTONE_NODE_INSTANCE = 23;
+ public static final short TIMER_NODE_INSTANCE = 24;
+ public static final short JOIN_NODE_INSTANCE = 25;
+ public static final short COMPOSITE_NODE_INSTANCE = 26;
+ public static final short HUMAN_TASK_NODE_INSTANCE = 27;
+ public static final short FOR_EACH_NODE_INSTANCE = 28;
+ public static final short TIMER = 29;
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterEnums.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterHelper.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterHelper.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterHelper.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterHelper.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,39 @@
+package org.drools.marshalling.impl;
+
+import java.io.IOException;
+
+import org.drools.common.WorkingMemoryAction;
+import org.drools.common.RuleFlowGroupImpl.DeactivateCallback;
+import org.drools.common.TruthMaintenanceSystem.LogicalRetractCallback;
+import org.drools.process.instance.event.DefaultSignalManager.SignalProcessInstanceAction;
+import org.drools.reteoo.PropagationQueuingNode.PropagateAction;
+import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
+
+public class PersisterHelper {
+ public static WorkingMemoryAction readWorkingMemoryAction(MarshallerReaderContext context) throws IOException, ClassNotFoundException {
+ int type = context.readInt();
+ switch(type) {
+ case WorkingMemoryAction.WorkingMemoryReteAssertAction : {
+ return new WorkingMemoryReteAssertAction(context);
+ }
+ case WorkingMemoryAction.DeactivateCallback : {
+ return new DeactivateCallback(context);
+ }
+ case WorkingMemoryAction.PropagateAction : {
+ return new PropagateAction(context);
+ }
+ case WorkingMemoryAction.LogicalRetractCallback : {
+ return new LogicalRetractCallback(context);
+ }
+
+ case WorkingMemoryAction.SignalProcessInstanceAction : {
+ return new SignalProcessInstanceAction(context);
+ }
+ }
+ return null;
+ }
+
+ public void write(MarshallerWriteContext context) throws IOException {
+
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterHelper.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterKey.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterKey.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterKey.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterKey.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,7 @@
+package org.drools.marshalling.impl;
+
+public interface PersisterKey {
+ public boolean equal(Object object1, Object object2);
+
+ public int hashCode(Object object);
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterKey.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/Placeholders.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/Placeholders.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/Placeholders.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/Placeholders.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,129 @@
+package org.drools.marshalling.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.util.AbstractHashTable;
+import org.drools.util.Entry;
+
+public class Placeholders extends AbstractHashTable {
+ private List<Object> ids;
+
+ public Placeholders() {
+ super();
+ this.ids = new ArrayList<Object>();
+ }
+
+ public PlaceholderEntry lookupPlaceholder(Object object, PersisterKey key) {
+ final int hashCode = key.hashCode( object );
+ final int index = indexOf( hashCode,
+ this.table.length );
+
+ PlaceholderEntry current = (PlaceholderEntry) this.table[index];
+ while ( current != null ) {
+ if ( hashCode == current.hashCode && current.key == key && key.equal( object,
+ current.object ) ) {
+ return current;
+ }
+ current = (PlaceholderEntry) current.getNext();
+ }
+ return null;
+ }
+
+ public PlaceholderEntry assignPlaceholder(Object object,
+ PersisterKey key) {
+ final int hashCode = key.hashCode( object );
+ final int index = indexOf( hashCode,
+ this.table.length );
+
+ int id = ids.size();
+ this.ids.add( object );
+ PlaceholderEntry entry = new PlaceholderEntry( object,
+ id,
+ key );
+
+ entry.next = this.table[index];
+ this.table[index] = entry;
+
+ if ( this.size++ >= this.threshold ) {
+ resize( 2 * this.table.length );
+ }
+
+ return entry;
+ }
+
+ public Object lookupObject(int id) {
+ return this.ids.get( id );
+ }
+
+ public static class PlaceholderEntry
+ implements
+ Entry {
+
+ private static final long serialVersionUID = 400L;
+
+ public Object object;
+
+ public int id;
+
+ public PersisterKey key;
+
+ public int hashCode;
+
+ public Entry next;
+
+ // private LinkedList list;
+
+ public PlaceholderEntry(final Object object,
+ final int id,
+ final PersisterKey key) {
+ this.object = object;
+ this.id = id;
+ this.key = key;
+ this.hashCode = key.hashCode( object );
+ }
+
+ // public PlaceholderEntry(final InternalFactHandle handle,
+ // final int hashCode) {
+ // this.handle = handle;
+ // this.hashCode = hashCode;
+ // // this.list = new LinkedList();
+ // }
+
+ public Entry getNext() {
+ return this.next;
+ }
+
+ public void setNext(final Entry next) {
+ this.next = next;
+ }
+
+ public int hashCode() {
+ return this.hashCode;
+ }
+
+ public String toString() {
+ return "Placeholder( object=" + this.object + " id = " + this.id + " hashcode=" + this.hashCode + " next=" + this.next + " )";
+ }
+
+ public Object getObject() {
+ return object;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public PersisterKey getKey() {
+ return key;
+ }
+
+ }
+
+ @Override
+ public Entry getBucket(Object object) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/Placeholders.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessInstanceMarshaller.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ProcessInstanceMarshaller.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessInstanceMarshaller.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessInstanceMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,39 @@
+package org.drools.marshalling.impl;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+
+import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.NodeInstanceContainer;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.workflow.instance.WorkflowProcessInstance;
+import org.drools.workflow.instance.impl.NodeInstanceImpl;
+
+/**
+ * A ProcessInstanceMarshaller must contain all the write/read logic for nodes
+ * of a specific ProcessInstance. It colaborates with OutputMarshaller and
+ * InputMarshaller, that delegates in a ProcessInstanceMarshaller to stream in/out runtime
+ * information.
+ *
+ * @see OutPutMarshaller
+ * @see InputMarshaller
+ * @see ProcessMarshallerRegistry
+ *
+ * @author mfossati, salaboy
+ */
+
+public interface ProcessInstanceMarshaller {
+
+ public void writeProcessInstance(MarshallerWriteContext context,
+ ProcessInstance processInstance) throws IOException;
+
+ public void writeNodeInstance(MarshallerWriteContext context,
+ NodeInstance nodeInstance) throws IOException;
+
+ public ProcessInstance readProcessInstance(MarshallerReaderContext context)
+ throws IOException;
+
+ public NodeInstance readNodeInstance(MarshallerReaderContext context,
+ NodeInstanceContainer nodeInstanceContainer,
+ WorkflowProcessInstance processInstance) throws IOException;
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessInstanceMarshaller.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerRegistry.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/ProcessMarshallerRegistry.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerRegistry.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerRegistry.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,38 @@
+package org.drools.marshalling.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.process.instance.impl.ProcessInstanceImpl;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+
+/**
+* Registry for Process/ProcessMarshaller
+*/
+public class ProcessMarshallerRegistry {
+
+ public static ProcessMarshallerRegistry INSTANCE = new ProcessMarshallerRegistry();
+
+ private Map<String , ProcessInstanceMarshaller> registry;
+
+ private ProcessMarshallerRegistry() {
+ this.registry = new HashMap<String, ProcessInstanceMarshaller >();
+
+ // default logic that used to be in OutPutMarshaller:
+ register( RuleFlowProcess.RULEFLOW_TYPE,
+ RuleFlowProcessInstanceMarshaller.INSTANCE );
+ }
+
+ public void register(String cls,
+ ProcessInstanceMarshaller marchaller) {
+ this.registry.put(cls, marchaller);
+ }
+
+ @SuppressWarnings("unchecked")
+ public ProcessInstanceMarshaller getMarshaller(String type) {
+ return this.registry.get(type);
+ }
+
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerRegistry.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RightTupleKey.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RightTupleKey.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RightTupleKey.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RightTupleKey.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,48 @@
+/**
+ *
+ */
+package org.drools.marshalling.impl;
+
+import org.drools.reteoo.Sink;
+
+public class RightTupleKey {
+ private final int id;
+ private final Sink sink;
+
+ public RightTupleKey(int id,
+ Sink sink) {
+ super();
+ this.id = id;
+ this.sink = sink;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public Sink getSink() {
+ return sink;
+ }
+
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + id;
+ result = prime * result + sink.getId();
+ return result;
+ }
+
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( obj == null ) return false;
+ if ( getClass() != obj.getClass() ) return false;
+
+ final RightTupleKey other = (RightTupleKey) obj;
+ if ( id != other.id ) return false;
+ if ( sink == null ) {
+ if ( other.sink != null ) return false;
+ } else if ( sink.getId() != other.sink.getId() ) return false;
+ return true;
+ }
+
+}
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RightTupleKey.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RuleBaseNodes.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RuleBaseNodes.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RuleBaseNodes.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RuleBaseNodes.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,79 @@
+package org.drools.marshalling.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.common.BaseNode;
+import org.drools.common.InternalRuleBase;
+import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.LeftTupleSource;
+import org.drools.reteoo.ObjectSink;
+import org.drools.reteoo.ObjectSource;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.reteoo.RuleTerminalNode;
+
+public class RuleBaseNodes {
+ public static Map<Integer, BaseNode> getNodeMap(InternalRuleBase ruleBase) {
+ Map<Integer, BaseNode> nodes = new HashMap<Integer, BaseNode>();
+ buildNodeMap( ruleBase, nodes );
+ return nodes;
+ }
+
+ private static void buildNodeMap(InternalRuleBase ruleBase,
+ Map<Integer, BaseNode> nodes) {
+ for ( ObjectTypeNode sink : ruleBase.getRete().getObjectTypeNodes() ) {
+ nodes.put( sink.getId(),
+ sink );
+ addObjectSink( ruleBase,
+ sink,
+ nodes );
+ }
+ }
+
+ private static void addObjectSink(InternalRuleBase ruleBase,
+ ObjectSink sink,
+ Map<Integer, BaseNode> nodes) {
+ // we don't need to store alpha nodes, as they have no state to serialise
+ if ( sink instanceof LeftTupleSource ) {
+ LeftTupleSource node = (LeftTupleSource) sink;
+ for ( LeftTupleSink leftTupleSink : node.getSinkPropagator().getSinks() ) {
+ addLeftTupleSink( ruleBase,
+ leftTupleSink,
+ nodes );
+ }
+ } else {
+ ObjectSource node = ( ObjectSource ) sink;
+ for ( ObjectSink objectSink : node.getSinkPropagator().getSinks() ) {
+ addObjectSink( ruleBase,
+ objectSink,
+ nodes );
+ }
+ }
+ }
+
+ private static void addLeftTupleSink(InternalRuleBase ruleBase,
+ LeftTupleSink sink,
+ Map<Integer, BaseNode> nodes) {
+ if ( sink instanceof LeftTupleSource ) {
+ nodes.put( sink.getId(),
+ (LeftTupleSource) sink );
+ for ( LeftTupleSink leftTupleSink : ((LeftTupleSource) sink).getSinkPropagator().getSinks() ) {
+ addLeftTupleSink( ruleBase,
+ leftTupleSink,
+ nodes );
+ }
+ } else if ( sink instanceof ObjectSource ) {
+ // it may be a RIAN
+ nodes.put( sink.getId(),
+ (ObjectSource) sink );
+ for ( ObjectSink objectSink : ((ObjectSource)sink).getSinkPropagator().getSinks() ) {
+ addObjectSink( ruleBase,
+ objectSink,
+ nodes );
+ }
+ } else if ( sink instanceof RuleTerminalNode ) {
+ nodes.put( sink.getId(),
+ (RuleTerminalNode) sink );
+ }
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RuleBaseNodes.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RuleFlowProcessInstanceMarshaller.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/RuleFlowProcessInstanceMarshaller.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RuleFlowProcessInstanceMarshaller.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RuleFlowProcessInstanceMarshaller.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,85 @@
+package org.drools.marshalling.impl;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.process.core.context.swimlane.SwimlaneContext;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.context.swimlane.SwimlaneContextInstance;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.workflow.instance.impl.NodeInstanceImpl;
+
+/**
+ * Marshaller class for RuleFlowProcessInstances
+ *
+ * @author mfossati
+ */
+
+public class RuleFlowProcessInstanceMarshaller extends
+ AbstractProcessInstanceMarshaller {
+
+ public static RuleFlowProcessInstanceMarshaller INSTANCE = new RuleFlowProcessInstanceMarshaller();
+
+ private RuleFlowProcessInstanceMarshaller() {
+ }
+
+ public ProcessInstance readProcessInstance(MarshallerReaderContext context)
+ throws IOException {
+ ObjectInputStream stream = context.stream;
+ InternalRuleBase ruleBase = context.ruleBase;
+ InternalWorkingMemory wm = context.wm;
+
+ RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance();
+ processInstance.setId(stream.readLong());
+ String processId = stream.readUTF();
+ processInstance.setProcessId(processId);
+ if (ruleBase != null) {
+ processInstance.setProcess(ruleBase.getProcess(processId));
+ }
+ processInstance.setState(stream.readInt());
+ long nodeInstanceCounter = stream.readLong();
+ processInstance.setWorkingMemory(wm);
+
+ int nbVariables = stream.readInt();
+ if (nbVariables > 0) {
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance
+ .getContextInstance(VariableScope.VARIABLE_SCOPE);
+ for (int i = 0; i < nbVariables; i++) {
+ String name = stream.readUTF();
+ try {
+ Object value = stream.readObject();
+ variableScopeInstance.setVariable(name, value);
+ } catch (ClassNotFoundException e) {
+ throw new IllegalArgumentException(
+ "Could not reload variable " + name);
+ }
+ }
+ }
+
+ int nbSwimlanes = stream.readInt();
+ if (nbSwimlanes > 0) {
+ SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) processInstance
+ .getContextInstance(SwimlaneContext.SWIMLANE_SCOPE);
+ for (int i = 0; i < nbSwimlanes; i++) {
+ String name = stream.readUTF();
+ String value = stream.readUTF();
+ swimlaneContextInstance.setActorId(name, value);
+ }
+ }
+
+ while (stream.readShort() == PersisterEnums.NODE_INSTANCE) {
+ readNodeInstance(context, processInstance, processInstance);
+ }
+
+ processInstance.internalSetNodeInstanceCounter(nodeInstanceCounter);
+ if (wm != null) {
+ processInstance.reconnect();
+ }
+ return processInstance;
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/RuleFlowProcessInstanceMarshaller.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/SerializablePlaceholderResolverStrategy.java (from rev 25382, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/SerializablePlaceholderResolverStrategy.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/SerializablePlaceholderResolverStrategy.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/SerializablePlaceholderResolverStrategy.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -0,0 +1,44 @@
+package org.drools.marshalling.impl;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.marshalling.ObjectMarshallingStrategyAcceptor;
+
+public class SerializablePlaceholderResolverStrategy
+ implements
+ ObjectMarshallingStrategy {
+
+ private int index;
+
+ private ObjectMarshallingStrategyAcceptor acceptor;
+
+ public SerializablePlaceholderResolverStrategy(ObjectMarshallingStrategyAcceptor acceptor) {
+ this.acceptor = acceptor;
+ }
+
+ public int getIndex() {
+ return this.index;
+ }
+
+ public void setIndex(int index) {
+ this.index = index;
+ }
+
+ public Object read(ObjectInputStream os) throws IOException,
+ ClassNotFoundException {
+ return os.readObject();
+ }
+
+ public void write(ObjectOutputStream os,
+ Object object) throws IOException {
+ os.writeObject( object );
+ }
+
+ public boolean accept(Object object) {
+ return acceptor.accept( object );
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/SerializablePlaceholderResolverStrategy.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -11,8 +11,8 @@
import org.drools.WorkingMemory;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.WorkingMemoryAction;
-import org.drools.marshalling.MarshallerReaderContext;
-import org.drools.marshalling.MarshallerWriteContext;
+import org.drools.marshalling.impl.MarshallerReaderContext;
+import org.drools.marshalling.impl.MarshallerWriteContext;
import org.drools.runtime.process.EventListener;
import org.drools.runtime.process.ProcessInstance;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -29,8 +29,8 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.common.NodeMemory;
import org.drools.common.WorkingMemoryAction;
-import org.drools.marshalling.MarshallerReaderContext;
-import org.drools.marshalling.MarshallerWriteContext;
+import org.drools.marshalling.impl.MarshallerReaderContext;
+import org.drools.marshalling.impl.MarshallerWriteContext;
import org.drools.reteoo.builder.BuildContext;
import org.drools.spi.PropagationContext;
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-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -16,9 +16,11 @@
* limitations under the License.
*/
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInput;
+import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.OutputStream;
import java.util.ArrayList;
@@ -42,13 +44,17 @@
import org.drools.concurrent.ExecutorService;
import org.drools.event.RuleBaseEventListener;
import org.drools.impl.EnvironmentFactory;
+import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.marshalling.Marshaller;
+import org.drools.marshalling.MarshallerFactory;
import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
import org.drools.rule.EntryPoint;
import org.drools.rule.InvalidPatternException;
import org.drools.rule.Package;
import org.drools.rule.Rule;
import org.drools.runtime.Environment;
+import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.FactHandle;
import org.drools.spi.ExecutorServiceFactory;
import org.drools.spi.FactHandleFactory;
@@ -96,7 +102,7 @@
this( id,
null,
new ReteooFactHandleFactory() );
-
+
}
/**
@@ -234,20 +240,72 @@
context,
workingMemory );
}
-
public synchronized StatefulSession newStatefulSession(boolean keepReference) {
SessionConfiguration config = new SessionConfiguration();
config.setKeepReference( keepReference );
-
- return newStatefulSession( config, EnvironmentFactory.newEnvironment() );
+
+ return newStatefulSession( config,
+ EnvironmentFactory.newEnvironment() );
}
-
- public synchronized StatefulSession newStatefulSession(final SessionConfiguration sessionConfig, final Environment environment) {
- return newStatefulSession( nextWorkingMemoryCounter(), sessionConfig, environment );
+
+ public synchronized StatefulSession newStatefulSession(java.io.InputStream stream) {
+ return newStatefulSession( stream,
+ true );
}
-
- public synchronized StatefulSession newStatefulSession(int id, final SessionConfiguration sessionConfig, final Environment environment) {
+
+ public synchronized StatefulSession newStatefulSession(java.io.InputStream stream,
+ boolean keepReference) {
+ StatefulSession session = null;
+ try {
+ // first unwrap the byte[]
+ ObjectInputStream ois = new ObjectInputStream( stream );
+
+ // standard serialisation would have written the statateful session instance info to the stream first
+ // so we read it, but we don't need it, so just ignore.
+ ReteooStatefulSession rsession = (ReteooStatefulSession) ois.readObject();
+
+ // now unmarshall that byte[]
+ ByteArrayInputStream bais = new ByteArrayInputStream( rsession.bytes );
+ Marshaller marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( this ) );
+ StatefulKnowledgeSession ksession = marshaller.unmarshall( bais,
+ new SessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ session = (StatefulSession) ((StatefulKnowledgeSessionImpl) ksession).session;
+
+ if ( keepReference ) {
+ super.addStatefulSession( session );
+ for ( Iterator it = session.getRuleBaseUpdateListeners().iterator(); it.hasNext(); ) {
+ addEventListener( (RuleBaseEventListener) it.next() );
+ }
+ }
+
+ bais.close();
+
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Unable to unmarshall session",
+ e );
+ } finally {
+ try {
+ stream.close();
+ } catch ( IOException e ) {
+ new RuntimeException( "Unable to close stream",
+ e );
+ }
+ }
+ return session;
+ }
+
+ public synchronized StatefulSession newStatefulSession(final SessionConfiguration sessionConfig,
+ final Environment environment) {
+ return newStatefulSession( nextWorkingMemoryCounter(),
+ sessionConfig,
+ 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" );
}
@@ -282,95 +340,95 @@
return session;
}
- public StatefulSession readStatefulSession(final InputStream stream,
- final boolean keepReference,
- final Marshaller marshaller,
- final SessionConfiguration sessionConfig,
- Environment environment ) throws IOException,
- ClassNotFoundException {
+ // public StatefulSession readStatefulSession(final InputStream stream,
+ // final boolean keepReference,
+ // final Marshaller marshaller,
+ // final SessionConfiguration sessionConfig,
+ // Environment environment ) throws IOException,
+ // ClassNotFoundException {
+ //
+ // if ( this.config.isSequential() ) {
+ // throw new RuntimeException( "Cannot have a stateful rule session, with sequential configuration set to true" );
+ // }
+ //
+ //// PlaceholderResolverStrategyFactory factory = new PlaceholderResolverStrategyFactory();
+ //// factory.addPlaceholderResolverStrategy( new SerializablePlaceholderResolverStrategy() );
+ //
+ // StatefulSession session = null;
+ // synchronized ( this.pkgs ) {
+ // // ExecutorService executor = ExecutorServiceFactory.createExecutorService( this.config.getExecutorService() );
+ //
+ // session = ( StatefulSession ) ((StatefulKnowledgeSessionImpl)marshaller.unmarshall( stream, sessionConfig, environment )).session;
+ //
+ //// WMSerialisationInContext context = new WMSerialisationInContext( stream,
+ //// this,
+ //// RuleBaseNodes.getNodeMap( this ),
+ //// factory );
+ ////
+ //// session = InputPersister.readSession( context, nextWorkingMemoryCounter(), executor );
+ //
+ // // executor.setCommandExecutor( new CommandExecutor( session ) );
+ //
+ //
+ // if ( keepReference ) {
+ // super.addStatefulSession( session );
+ // for ( Iterator it = session.getRuleBaseUpdateListeners().iterator(); it.hasNext(); ) {
+ // addEventListener( (RuleBaseEventListener) it.next() );
+ // }
+ // }
+ // }
+ // return session;
+ //
+ // // final DroolsObjectInputStream streamWithLoader = new DroolsObjectInputStream( stream,
+ // // this.packageClassLoader );
+ // // streamWithLoader.setRuleBase( this );
+ // //
+ // // final StatefulSession session = (StatefulSession) streamWithLoader.readObject();
+ // //
+ // // synchronized ( this.pkgs ) {
+ // // ((InternalWorkingMemory) session).setRuleBase( this );
+ // // ((InternalWorkingMemory) session).setId( (nextWorkingMemoryCounter()) );
+ // //
+ // // ExecutorService executor = ExecutorServiceFactory.createExecutorService( this.config.getExecutorService() );
+ // // executor.setCommandExecutor( new CommandExecutor( session ) );
+ // // ((InternalWorkingMemory) session).setExecutorService( executor );
+ // //
+ // // if ( keepReference ) {
+ // // addStatefulSession( session );
+ // // for ( Iterator it = session.getRuleBaseUpdateListeners().iterator(); it.hasNext(); ) {
+ // // addEventListener( (RuleBaseEventListener) it.next() );
+ // // }
+ // // }
+ // //
+ // // return session;
+ // // }
+ // }
+ //
+ // public void writeStatefulSession(final StatefulSession session,
+ // final OutputStream stream,
+ // Marshaller marshaller) throws IOException {
+ //
+ //// PlaceholderResolverStrategyFactory factory = new PlaceholderResolverStrategyFactory();
+ //// factory.addPlaceholderResolverStrategy( new SerializablePlaceholderResolverStrategy() );
+ ////
+ //// WMSerialisationOutContext context = new WMSerialisationOutContext( stream,
+ //// this,
+ //// (InternalWorkingMemory) session,
+ //// RuleBaseNodes.getNodeMap( this ),
+ //// factory );
+ //// OutputPersister.writeSession( context );
+ // marshaller.marshall( stream, session );
+ // //((ReteooStatefulSession) session).write( context );
+ //
+ //
+ // // ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ // // OutputPersister op = new OutputPersister( this,
+ // // (InternalWorkingMemory) wm,
+ // // baos,
+ // // factory );
+ // // op.write();
+ // }
- if ( this.config.isSequential() ) {
- throw new RuntimeException( "Cannot have a stateful rule session, with sequential configuration set to true" );
- }
-
-// PlaceholderResolverStrategyFactory factory = new PlaceholderResolverStrategyFactory();
-// factory.addPlaceholderResolverStrategy( new SerializablePlaceholderResolverStrategy() );
-
- StatefulSession session = null;
- synchronized ( this.pkgs ) {
- ExecutorService executor = ExecutorServiceFactory.createExecutorService( this.config.getExecutorService() );
-
- session = marshaller.read( stream, this, nextWorkingMemoryCounter(), executor, sessionConfig, environment );
-
-// WMSerialisationInContext context = new WMSerialisationInContext( stream,
-// this,
-// RuleBaseNodes.getNodeMap( this ),
-// factory );
-//
-// session = InputPersister.readSession( context, nextWorkingMemoryCounter(), executor );
-
- executor.setCommandExecutor( new CommandExecutor( session ) );
-
-
- if ( keepReference ) {
- super.addStatefulSession( session );
- for ( Iterator it = session.getRuleBaseUpdateListeners().iterator(); it.hasNext(); ) {
- addEventListener( (RuleBaseEventListener) it.next() );
- }
- }
- }
- return session;
-
- // final DroolsObjectInputStream streamWithLoader = new DroolsObjectInputStream( stream,
- // this.packageClassLoader );
- // streamWithLoader.setRuleBase( this );
- //
- // final StatefulSession session = (StatefulSession) streamWithLoader.readObject();
- //
- // synchronized ( this.pkgs ) {
- // ((InternalWorkingMemory) session).setRuleBase( this );
- // ((InternalWorkingMemory) session).setId( (nextWorkingMemoryCounter()) );
- //
- // ExecutorService executor = ExecutorServiceFactory.createExecutorService( this.config.getExecutorService() );
- // executor.setCommandExecutor( new CommandExecutor( session ) );
- // ((InternalWorkingMemory) session).setExecutorService( executor );
- //
- // if ( keepReference ) {
- // addStatefulSession( session );
- // for ( Iterator it = session.getRuleBaseUpdateListeners().iterator(); it.hasNext(); ) {
- // addEventListener( (RuleBaseEventListener) it.next() );
- // }
- // }
- //
- // return session;
- // }
- }
-
- public void writeStatefulSession(final StatefulSession session,
- final OutputStream stream,
- Marshaller marshaller) throws IOException {
-
-// PlaceholderResolverStrategyFactory factory = new PlaceholderResolverStrategyFactory();
-// factory.addPlaceholderResolverStrategy( new SerializablePlaceholderResolverStrategy() );
-//
-// WMSerialisationOutContext context = new WMSerialisationOutContext( stream,
-// this,
-// (InternalWorkingMemory) session,
-// RuleBaseNodes.getNodeMap( this ),
-// factory );
-// OutputPersister.writeSession( context );
- marshaller.write( stream, this, session );
- //((ReteooStatefulSession) session).write( context );
-
-
- // ByteArrayOutputStream baos = new ByteArrayOutputStream();
- // OutputPersister op = new OutputPersister( this,
- // (InternalWorkingMemory) wm,
- // baos,
- // factory );
- // op.write();
- }
-
public StatelessSession newStatelessSession() {
//orders the rules
@@ -396,14 +454,14 @@
// may start in 0
return this.reteooBuilder.getIdGenerator().getLastId() + 1;
}
-
- public void addPackages(Package[] pkgs ) {
+
+ public void addPackages(Package[] pkgs) {
addPackages( Arrays.asList( pkgs ) );
}
-
- public void addPackages(Collection<Package> pkgs ) {
+
+ public void addPackages(Collection<Package> pkgs) {
super.addPackages( pkgs );
- }
+ }
public synchronized void addPackage(final Package newPkg) {
List<Package> list = new ArrayList<Package>();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,5 +1,13 @@
package org.drools.reteoo;
+import java.io.ByteArrayOutputStream;
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -16,6 +24,10 @@
import org.drools.concurrent.RetractObject;
import org.drools.concurrent.UpdateObject;
import org.drools.impl.EnvironmentFactory;
+import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.marshalling.Marshaller;
+import org.drools.marshalling.MarshallerFactory;
import org.drools.FactHandle;
import org.drools.runtime.Environment;
import org.drools.spi.AgendaFilter;
@@ -25,13 +37,18 @@
public class ReteooStatefulSession extends ReteooWorkingMemory
implements
- StatefulSession {
+ StatefulSession,
+ Externalizable {
private static final long serialVersionUID = -5360554247241558374L;
private transient ExecutorService executor;
private transient List ruleBaseListeners;
-
+
+ public ReteooStatefulSession() {
+ super();
+ }
+
public ReteooStatefulSession(final int id,
final InternalRuleBase ruleBase,
final ExecutorService executorService) {
@@ -73,7 +90,29 @@
environment );
this.executor = executorService;
}
+
+ public byte[] bytes;
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ // all we do is create marshall to a byte[] and write to the stream
+ StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( this );
+ Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
+
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ marshaller.marshall( stream, ksession );
+ stream.close();
+
+ byte[] bytes = stream.toByteArray();
+ out.writeInt( bytes.length );
+ out.write( bytes );
+ }
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ bytes = new byte[ in.readInt() ];
+ in.readFully( bytes );
+ }
+
public Future asyncInsert(final Object object) {
final AssertObject assertObject = new AssertObject( object );
this.executor.submit( assertObject );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -36,8 +36,8 @@
import org.drools.common.PropagationContextImpl;
import org.drools.common.WorkingMemoryAction;
import org.drools.impl.EnvironmentFactory;
-import org.drools.marshalling.MarshallerReaderContext;
-import org.drools.marshalling.MarshallerWriteContext;
+import org.drools.marshalling.impl.MarshallerReaderContext;
+import org.drools.marshalling.impl.MarshallerWriteContext;
import org.drools.rule.EntryPoint;
import org.drools.rule.Package;
import org.drools.rule.Query;
@@ -59,6 +59,10 @@
*
*/
private static final long serialVersionUID = 400L;
+
+ public ReteooWorkingMemory() {
+ super();
+ }
public ReteooWorkingMemory(final int id,
final InternalRuleBase ruleBase) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/SlidingTimeWindow.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/SlidingTimeWindow.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/SlidingTimeWindow.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -29,7 +29,7 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.common.PropagationContextImpl;
import org.drools.common.WorkingMemoryAction;
-import org.drools.marshalling.MarshallerWriteContext;
+import org.drools.marshalling.impl.MarshallerWriteContext;
import org.drools.reteoo.RightTuple;
import org.drools.spi.PropagationContext;
import org.drools.time.Job;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ClassUtils.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -215,7 +215,7 @@
} else if ( STAR.equals( object ) ) {
return false;
} else if ( patterns.containsKey( "*" ) ) {
- // for now we assume if the name space is * then we have a catchal *.* pattern
+ // for now we assume if the name space is * then we have a catchall *.* pattern
return true;
} else {
List list = (List) object;
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-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -20,11 +20,11 @@
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.marshalling.impl.MarshallerReaderContext;
+import org.drools.marshalling.impl.MarshallerWriteContext;
+import org.drools.marshalling.impl.ProcessInstanceMarshaller;
+import org.drools.marshalling.impl.ProcessMarshallerRegistry;
+import org.drools.marshalling.impl.RuleFlowProcessInstanceMarshaller;
import org.drools.process.instance.impl.ProcessInstanceImpl;
import org.drools.ruleflow.instance.RuleFlowProcessInstance;
import org.drools.runtime.process.ProcessInstance;
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-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/WorkItemInfo.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -15,10 +15,10 @@
import javax.persistence.Transient;
import javax.persistence.Version;
-import org.drools.marshalling.InputMarshaller;
-import org.drools.marshalling.MarshallerReaderContext;
-import org.drools.marshalling.MarshallerWriteContext;
-import org.drools.marshalling.OutputMarshaller;
+import org.drools.marshalling.impl.InputMarshaller;
+import org.drools.marshalling.impl.MarshallerReaderContext;
+import org.drools.marshalling.impl.MarshallerWriteContext;
+import org.drools.marshalling.impl.OutputMarshaller;
import org.drools.process.instance.WorkItem;
@Entity
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMarshallingHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMarshallingHelper.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/JPASessionMarshallingHelper.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -4,23 +4,23 @@
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.KnowledgeBase;
import org.drools.marshalling.Marshaller;
-import org.drools.marshalling.MarshallingConfiguration;
+import org.drools.marshalling.MarshallerFactory;
+import org.drools.marshalling.ObjectMarshallingStrategy;
import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
public class JPASessionMarshallingHelper {
- private RuleBase ruleBase;
- private SessionConfiguration conf;
- private StatefulSession session;
- private Marshaller marshaller;
- private Environment environment;
-
+ private KnowledgeBase kbase;
+ private KnowledgeSessionConfiguration conf;
+ private StatefulKnowledgeSession ksession;
+ private Marshaller marshaller;
+ private Environment env;
+
/**
* Exist Info, so load session from here
* @param info
@@ -29,19 +29,24 @@
* @param marshallingConfiguration
*/
public JPASessionMarshallingHelper(SessionInfo info,
- RuleBase ruleBase,
- SessionConfiguration conf,
- MarshallingConfiguration marshallingConfiguration,
- Environment environment) {
- this.ruleBase = ruleBase;
+ KnowledgeBase kbase,
+ KnowledgeSessionConfiguration conf,
+ Environment env) {
+ this.kbase = kbase;
this.conf = conf;
- this.environment = environment;
- this.marshaller = new DefaultMarshaller( ((InternalRuleBase) ruleBase).getConfiguration(),
- marshallingConfiguration );
- loadSnapshot( info.getData() );
- info.setJPASessionMashallingHelper( this );
- }
+ this.env = env;
+ ObjectMarshallingStrategy[] strategies = (ObjectMarshallingStrategy[]) env.get( EnvironmentName.OBJECT_MARSHALLING_STRATEGIES );
+ if (strategies != null ) {
+ // use strategies if provided in the environment
+ this.marshaller = MarshallerFactory.newMarshaller( kbase, strategies );
+ } else {
+ this.marshaller = MarshallerFactory.newMarshaller( kbase ) ;
+ }
+ loadSnapshot( info.getData() );
+ info.setJPASessionMashallingHelper( this );
+ }
+
/**
* new session, don't write now as info will request it on update callback
* @param info
@@ -49,23 +54,27 @@
* @param conf
* @param marshallingConfiguration
*/
- public JPASessionMarshallingHelper(StatefulSession session,
- SessionConfiguration conf,
- MarshallingConfiguration marshallingConfiguration) {
- this.session = session;
- this.ruleBase = session.getRuleBase();
- this.environment = session.getEnvironment();
+ public JPASessionMarshallingHelper(StatefulKnowledgeSession ksession,
+ KnowledgeSessionConfiguration conf) {
+ this.ksession = ksession;
+ this.kbase = ksession.getKnowledgeBase();
this.conf = conf;
- this.marshaller = new DefaultMarshaller( ((InternalRuleBase) ruleBase).getConfiguration(),
- marshallingConfiguration );
+ this.env = ksession.getEnvironment();
+ ObjectMarshallingStrategy[] strategies = (ObjectMarshallingStrategy[]) this.env.get( EnvironmentName.OBJECT_MARSHALLING_STRATEGIES );
+ if (strategies != null ) {
+ // use strategies if provided in the environment
+ this.marshaller = MarshallerFactory.newMarshaller( kbase, strategies );
+ } else {
+ this.marshaller = MarshallerFactory.newMarshaller( kbase ) ;
+ }
+
}
public byte[] getSnapshot() {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
- marshaller.write( baos,
- (InternalRuleBase) ruleBase,
- session );
+ marshaller.marshall( baos,
+ ksession );
} catch ( IOException e ) {
throw new RuntimeException( "Unable to get session snapshot",
e );
@@ -74,39 +83,40 @@
return baos.toByteArray();
}
- public StatefulSession loadSnapshot(byte[] bytes,
- StatefulSession session) {
- this.session = session;
+ public StatefulKnowledgeSession loadSnapshot(byte[] bytes,
+ StatefulKnowledgeSession ksession) {
+ this.ksession = ksession;
ByteArrayInputStream bais = new ByteArrayInputStream( bytes );
try {
- marshaller.read( bais,
- (InternalRuleBase) ruleBase,
- session );
+ this.marshaller.unmarshall( bais,
+ ksession );
} catch ( Exception e ) {
throw new RuntimeException( "Unable to load session snapshot",
e );
}
- return this.session;
+ return this.ksession;
}
- public StatefulSession loadSnapshot(byte[] bytes) {
+ public StatefulKnowledgeSession loadSnapshot(byte[] bytes) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream( bytes );
- if ( this.session == null ) {
- this.session = this.ruleBase.readStatefulSession( bais, true, marshaller, conf, environment );
+ if ( this.ksession == null ) {
+ this.ksession = this.marshaller.unmarshall( bais,
+ this.conf,
+ this.env );
} else {
loadSnapshot( bytes,
- this.session );
+ this.ksession );
}
} catch ( Exception e ) {
throw new RuntimeException( "Unable to load session snapshot",
e );
}
- return this.session;
+ return this.ksession;
}
- public StatefulSession getObject() {
- return session;
+ public StatefulKnowledgeSession getObject() {
+ return ksession;
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java 2009-02-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SessionInfo.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -15,7 +15,7 @@
import javax.persistence.Transient;
import javax.persistence.Version;
-import org.drools.marshalling.MarshallingConfiguration;
+import org.drools.marshalling.impl.MarshallingConfiguration;
@Entity
public class SessionInfo {
@@ -41,9 +41,6 @@
private byte[] rulesByteArrayShadow;
@Transient
- MarshallingConfiguration marshallingConfiguration;
-
- @Transient
JPASessionMarshallingHelper helper;
public SessionInfo() {
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-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -18,71 +18,77 @@
import org.drools.SessionConfiguration;
import org.drools.StatefulSession;
import org.drools.impl.KnowledgeBaseImpl;
-import org.drools.marshalling.MarshallingConfiguration;
-import org.drools.marshalling.MarshallingConfigurationImpl;
-import org.drools.marshalling.PlaceholderResolverStrategyFactory;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.persistence.processinstance.JPASignalManager;
import org.drools.process.command.Command;
import org.drools.process.command.CommandService;
-import org.drools.reteoo.ReteooRuleBase;
+import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.runtime.Environment;
import org.drools.runtime.EnvironmentName;
import org.drools.runtime.KnowledgeSessionConfiguration;
-import org.hibernate.ejb.EntityManagerImpl;
+import org.drools.runtime.StatefulKnowledgeSession;
public class SingleSessionCommandService
implements
CommandService {
- private EntityManagerFactory emf;
- private EntityManager em;
- private SessionInfo sessionInfo;
+ private EntityManagerFactory emf;
+ private EntityManager em;
+ private SessionInfo sessionInfo;
private JPASessionMarshallingHelper marshallingHelper;
- private StatefulSession session;
- private Environment env;
+ private StatefulSession session;
- public SingleSessionCommandService(KnowledgeBase kbase,
- KnowledgeSessionConfiguration conf,
- Environment environment) {
- this( ((KnowledgeBaseImpl) kbase).getRuleBase(),
- (SessionConfiguration) conf,
- environment );
- }
+ private KnowledgeBase kbase;
+ private StatefulKnowledgeSession ksession;
+ private Environment env;
public SingleSessionCommandService(RuleBase ruleBase,
SessionConfiguration conf,
Environment env) {
- if (conf == null) {
+ this( new KnowledgeBaseImpl( ruleBase ),
+ (SessionConfiguration) conf,
+ env );
+ }
+
+ public SingleSessionCommandService(KnowledgeBase kbase,
+ KnowledgeSessionConfiguration 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);
- ((JPASignalManager) this.session.getSignalManager()).setCommandService(this);
- MarshallingConfiguration marshallingConf = new MarshallingConfigurationImpl(
- (PlaceholderResolverStrategyFactory) env.get(EnvironmentName.PLACEHOLDER_RESOLVER_STRATEGY_FACTORY),
- false, false);
- this.marshallingHelper = new JPASessionMarshallingHelper(this.session, conf, marshallingConf);
- this.sessionInfo.setJPASessionMashallingHelper(this.marshallingHelper);
+ this.session = ((KnowledgeBaseImpl) kbase).ruleBase.newStatefulSession( (SessionConfiguration) conf,
+ this.env );
+ this.ksession = new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) session );
+
+ ((JPASignalManager) this.session.getSignalManager()).setCommandService( this );
+
+ this.marshallingHelper = new JPASessionMarshallingHelper( this.ksession,
+ conf );
+
+ this.sessionInfo.setJPASessionMashallingHelper( this.marshallingHelper );
+
this.emf = (EntityManagerFactory) env.get( EnvironmentName.ENTITY_MANAGER_FACTORY );
this.em = emf.createEntityManager(); // how can I ensure this is an extended entity?
-// System.out.println( ((EntityManagerImpl) this.em).getFlushMode() );
+ // System.out.println( ((EntityManagerImpl) this.em).getFlushMode() );
UserTransaction ut = null;
try {
InitialContext ctx = new InitialContext();
ut = (UserTransaction) ctx.lookup( "java:comp/UserTransaction" );
ut.begin();
- registerRollbackSync( );
+ registerRollbackSync();
this.em.joinTransaction();
-
+
this.em.persist( this.sessionInfo );
-// System.out.println( "committing" );
+ // System.out.println( "committing" );
ut.commit();
-// System.out.println( "commit complete" );
+ // System.out.println( "commit complete" );
} catch ( Throwable t1 ) {
- try {
+ try {
if ( ut != null ) {
ut.rollback();
}
@@ -93,71 +99,79 @@
t2 );
}
}
-
- new Thread(new Runnable() {
- public void run() {
- session.fireUntilHalt();
- }
- });
+
+ new Thread( new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ } );
}
-
- public SingleSessionCommandService(RuleBase ruleBase, SessionConfiguration conf, Environment env, int sessionId) {
- if (conf == null) {
- conf = new SessionConfiguration();
- }
- this.env = env;
+ public SingleSessionCommandService(KnowledgeBase kbase,
+ KnowledgeSessionConfiguration conf,
+ Environment env,
+ int sessionId) {
+ if ( conf == null ) {
+ conf = new SessionConfiguration();
+ }
- this.emf = (EntityManagerFactory) env.get(EnvironmentName.ENTITY_MANAGER_FACTORY);
- this.em = emf.createEntityManager(); // how can I ensure this is an extended entity?
- //System.out.println(((EntityManagerImpl) this.em).getFlushMode());
- UserTransaction ut = null;
- try {
- InitialContext ctx = new InitialContext();
- ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
- ut.begin();
- registerRollbackSync();
- this.em.joinTransaction();
-
- sessionInfo = this.em.find(SessionInfo.class, sessionId);
-
- // System.out.println("committing");
- ut.commit();
- // System.out.println("commit complete");
- } catch (Throwable t1) {
- try {
- if (ut != null) {
- ut.rollback();
- }
- throw new RuntimeException("Could insert session data", t1);
- } catch (Throwable t2) {
- throw new RuntimeException("Could not rollback transaction", t2);
- }
- }
-
- MarshallingConfiguration marshallingConf = new MarshallingConfigurationImpl(
- (PlaceholderResolverStrategyFactory) env.get(EnvironmentName.PLACEHOLDER_RESOLVER_STRATEGY_FACTORY),
- false, false);
- this.marshallingHelper = new JPASessionMarshallingHelper(sessionInfo, ruleBase, conf, marshallingConf, env);
- this.sessionInfo.setJPASessionMashallingHelper(this.marshallingHelper);
- this.session = this.marshallingHelper.getObject();
- ((JPASignalManager) this.session.getSignalManager()).setCommandService(this);
+ this.env = env;
- new Thread(new Runnable() {
- public void run() {
- session.fireUntilHalt();
- }
- });
- }
+ this.emf = (EntityManagerFactory) env.get( EnvironmentName.ENTITY_MANAGER_FACTORY );
+ this.em = emf.createEntityManager(); // how can I ensure this is an extended entity?
+ //System.out.println(((EntityManagerImpl) this.em).getFlushMode());
+ UserTransaction ut = null;
+ try {
+ InitialContext ctx = new InitialContext();
+ ut = (UserTransaction) ctx.lookup( "java:comp/UserTransaction" );
+ ut.begin();
+ registerRollbackSync();
+ this.em.joinTransaction();
-
+ sessionInfo = this.em.find( SessionInfo.class,
+ sessionId );
+
+ // System.out.println("committing");
+ ut.commit();
+ // System.out.println("commit complete");
+ } catch ( Throwable t1 ) {
+ try {
+ if ( ut != null ) {
+ ut.rollback();
+ }
+ throw new RuntimeException( "Could insert session data",
+ t1 );
+ } catch ( Throwable t2 ) {
+ throw new RuntimeException( "Could not rollback transaction",
+ t2 );
+ }
+ }
+
+ this.session = ((KnowledgeBaseImpl) kbase).ruleBase.newStatefulSession( (SessionConfiguration) conf,
+ this.env );
+
+ this.ksession = new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) session );
+ ((JPASignalManager) this.session.getSignalManager()).setCommandService( this );
+
+ this.marshallingHelper = new JPASessionMarshallingHelper( this.ksession,
+ conf );
+
+ this.sessionInfo.setJPASessionMashallingHelper( this.marshallingHelper );
+
+ new Thread( new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ } );
+ }
+
public StatefulSession getSession() {
return this.session;
}
public synchronized <T> T execute(Command<T> command) {
- session.halt();
-
+ session.halt();
+
boolean localTransaction = false;
UserTransaction ut = null;
try {
@@ -167,16 +181,17 @@
// 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.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 );
@@ -190,8 +205,8 @@
return result;
} catch ( Throwable t1 ) {
- t1.printStackTrace();
- if ( localTransaction ) {
+ t1.printStackTrace();
+ if ( localTransaction ) {
try {
if ( ut != null ) {
ut.rollback();
@@ -207,11 +222,11 @@
t1 );
}
} finally {
- new Thread(new Runnable() {
- public void run() {
- session.fireUntilHalt();
- }
- });
+ new Thread( new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ } );
}
}
@@ -224,10 +239,10 @@
public int getSessionId() {
return sessionInfo.getId();
}
-
+
public void registerRollbackSync() throws IllegalStateException,
- RollbackException,
- SystemException {
+ RollbackException,
+ SystemException {
TransactionManager txm = (TransactionManager) env.get( "drools.TransactionManager" );
if ( txm == null ) {
return;
@@ -240,7 +255,7 @@
map );
}
- if ( map.get( this ) == null ) {
+ if ( map.get( this ) == null ) {
txm.getTransaction().registerSynchronization( new SynchronizationImpl( env,
this ) );
map.put( this,
@@ -259,7 +274,7 @@
public static class SynchronizationImpl
implements
Synchronization {
- private Environment env;
+ private Environment env;
private SingleSessionCommandService cmdService;
public SynchronizationImpl(Environment env,
@@ -279,14 +294,14 @@
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 );
+ EntityManager localEm = (EntityManager) this.env.get( EnvironmentName.ENTITY_MANAGER );
if ( localEm != null && localEm.isOpen() ) {
localEm.close();
}
-
+
}
public void beforeCompletion() {
@@ -325,10 +340,12 @@
// 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 );
+ this.marshallingHelper.loadSnapshot( this.sessionInfo.getData(),
+ this.ksession );
+ this.session = (StatefulSession) ((StatefulKnowledgeSessionImpl) this.ksession).session;
}
}
\ No newline at end of file
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-26 04:43:35 UTC (rev 25426)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-02-26 04:49:09 UTC (rev 25427)
@@ -1,6 +1,8 @@
package org.drools.persistence.session;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import java.util.Properties;
import javax.naming.InitialContext;
@@ -11,12 +13,15 @@
import junit.framework.TestCase;
+import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.SessionConfiguration;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.ProcessBuilder;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definitions.impl.KnowledgePackageImp;
import org.drools.process.command.CompleteWorkItemCommand;
import org.drools.process.command.GetProcessInstanceCommand;
import org.drools.process.command.StartProcessCommand;
@@ -46,11 +51,11 @@
import bitronix.tm.resource.jdbc.PoolingDataSource;
public class SingleSessionCommandServiceTest extends TestCase {
-
- PoolingDataSource ds1;
- private EntityManagerFactory emf;
-
- protected void setUp() {
+
+ PoolingDataSource ds1;
+ private EntityManagerFactory emf;
+
+ protected void setUp() {
ds1 = new PoolingDataSource();
ds1.setUniqueName( "jdbc/testDS1" );
ds1.setClassName( "org.h2.jdbcx.JdbcDataSource" );
@@ -62,545 +67,691 @@
"sasa" );
ds1.getDriverProperties().put( "URL",
"jdbc:h2:mem:mydb" );
- ds1.init();
-
- emf = Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
- }
-
- protected void tearDown() {
+ ds1.init();
+
+ emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ }
+
+ protected void tearDown() {
emf.close();
ds1.close();
-
+
}
-
- public void testPersistenceWorkItems() throws Exception {
+
+ public void testPersistenceWorkItems() throws Exception {
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
emf );
env.set( "drools.TransactionManager",
TransactionManagerServices.getTransactionManager() );
-
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- Package pkg = getProcessWorkItems();
- ruleBase.addPackage(pkg);
- Properties properties = new Properties();
- properties.setProperty("drools.commandService", "org.drools.persistence.session.SingleSessionCommandService");
- properties.setProperty("drools.processInstanceManagerFactory", "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory");
- properties.setProperty("drools.workItemManagerFactory", "org.drools.persistence.processinstance.JPAWorkItemManagerFactory");
- properties.setProperty("drools.processSignalManagerFactory", "org.drools.persistence.processinstance.JPASignalManagerFactory");
- SessionConfiguration config = new SessionConfiguration(properties);
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ Collection<KnowledgePackage> kpkgs = getProcessWorkItems();
+ kbase.addKnowledgePackages( kpkgs );
- SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
- int sessionId = service.getSessionId();
-
- StartProcessCommand startProcessCommand = new StartProcessCommand();
- startProcessCommand.setProcessId("org.drools.test.TestProcess");
- ProcessInstance processInstance = (ProcessInstance) service.execute(startProcessCommand);
- System.out.println("Started process instance " + processInstance.getId());
-
+ Properties properties = new Properties();
+ properties.setProperty( "drools.commandService",
+ "org.drools.persistence.session.SingleSessionCommandService" );
+ properties.setProperty( "drools.processInstanceManagerFactory",
+ "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+ properties.setProperty( "drools.workItemManagerFactory",
+ "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+ properties.setProperty( "drools.processSignalManagerFactory",
+ "org.drools.persistence.processinstance.JPASignalManagerFactory" );
+ SessionConfiguration config = new SessionConfiguration( properties );
+
+ SingleSessionCommandService service = new SingleSessionCommandService( kbase,
+ config,
+ env );
+ int sessionId = service.getSessionId();
+
+ StartProcessCommand startProcessCommand = new StartProcessCommand();
+ startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+ ProcessInstance processInstance = (ProcessInstance) service.execute( startProcessCommand );
+ System.out.println( "Started process instance " + processInstance.getId() );
+
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
- assertNotNull(workItem);
+ assertNotNull( workItem );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
- assertNotNull(processInstance);
+ getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+ processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNotNull( processInstance );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
- completeWorkItemCommand.setWorkItemId(workItem.getId());
- service.execute(completeWorkItemCommand);
+ completeWorkItemCommand.setWorkItemId( workItem.getId() );
+ service.execute( completeWorkItemCommand );
workItem = handler.getWorkItem();
- assertNotNull(workItem);
+ assertNotNull( workItem );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
- assertNotNull(processInstance);
+ getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+ processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNotNull( processInstance );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
completeWorkItemCommand = new CompleteWorkItemCommand();
- completeWorkItemCommand.setWorkItemId(workItem.getId());
- service.execute(completeWorkItemCommand);
-
+ completeWorkItemCommand.setWorkItemId( workItem.getId() );
+ service.execute( completeWorkItemCommand );
+
workItem = handler.getWorkItem();
- assertNotNull(workItem);
+ assertNotNull( workItem );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
- assertNotNull(processInstance);
+ getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+ processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNotNull( processInstance );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
completeWorkItemCommand = new CompleteWorkItemCommand();
- completeWorkItemCommand.setWorkItemId(workItem.getId());
- service.execute(completeWorkItemCommand);
+ completeWorkItemCommand.setWorkItemId( workItem.getId() );
+ service.execute( completeWorkItemCommand );
workItem = handler.getWorkItem();
- assertNull(workItem);
+ assertNull( workItem );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
- assertNull(processInstance);
+ getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+ processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNull( processInstance );
service.dispose();
- }
-
- public void testPersistenceWorkItemsUserTransaction() throws Exception {
+ }
+
+ public void testPersistenceWorkItemsUserTransaction() throws Exception {
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
emf );
env.set( "drools.TransactionManager",
TransactionManagerServices.getTransactionManager() );
-
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- Package pkg = getProcessWorkItems();
- ruleBase.addPackage(pkg);
- Properties properties = new Properties();
- properties.setProperty("drools.commandService", "org.drools.persistence.session.SingleSessionCommandService");
- properties.setProperty("drools.processInstanceManagerFactory", "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory");
- properties.setProperty("drools.workItemManagerFactory", "org.drools.persistence.processinstance.JPAWorkItemManagerFactory");
- properties.setProperty("drools.processSignalManagerFactory", "org.drools.persistence.processinstance.JPASignalManagerFactory");
- SessionConfiguration config = new SessionConfiguration(properties);
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ Collection<KnowledgePackage> kpkgs = getProcessWorkItems();
+ kbase.addKnowledgePackages( kpkgs );
- SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
- int sessionId = service.getSessionId();
-
- UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
+ Properties properties = new Properties();
+ properties.setProperty( "drools.commandService",
+ "org.drools.persistence.session.SingleSessionCommandService" );
+ properties.setProperty( "drools.processInstanceManagerFactory",
+ "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+ properties.setProperty( "drools.workItemManagerFactory",
+ "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+ properties.setProperty( "drools.processSignalManagerFactory",
+ "org.drools.persistence.processinstance.JPASignalManagerFactory" );
+ SessionConfiguration config = new SessionConfiguration( properties );
+
+ SingleSessionCommandService service = new SingleSessionCommandService( kbase,
+ config,
+ env );
+ int sessionId = service.getSessionId();
+
+ UserTransaction ut = (UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
ut.begin();
StartProcessCommand startProcessCommand = new StartProcessCommand();
- startProcessCommand.setProcessId("org.drools.test.TestProcess");
- ProcessInstance processInstance = (ProcessInstance) service.execute(startProcessCommand);
- System.out.println("Started process instance " + processInstance.getId());
+ startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+ ProcessInstance processInstance = (ProcessInstance) service.execute( startProcessCommand );
+ System.out.println( "Started process instance " + processInstance.getId() );
ut.commit();
-
+
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
- assertNotNull(workItem);
+ assertNotNull( workItem );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
ut.begin();
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
- assertNotNull(processInstance);
+ getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+ processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNotNull( processInstance );
ut.commit();
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
ut.begin();
CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
- completeWorkItemCommand.setWorkItemId(workItem.getId());
- service.execute(completeWorkItemCommand);
+ completeWorkItemCommand.setWorkItemId( workItem.getId() );
+ service.execute( completeWorkItemCommand );
ut.commit();
-
+
workItem = handler.getWorkItem();
- assertNotNull(workItem);
+ assertNotNull( workItem );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
ut.begin();
getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+ getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+ processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
ut.commit();
- assertNotNull(processInstance);
+ assertNotNull( processInstance );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
ut.begin();
completeWorkItemCommand = new CompleteWorkItemCommand();
- completeWorkItemCommand.setWorkItemId(workItem.getId());
- service.execute(completeWorkItemCommand);
+ completeWorkItemCommand.setWorkItemId( workItem.getId() );
+ service.execute( completeWorkItemCommand );
ut.commit();
-
+
workItem = handler.getWorkItem();
- assertNotNull(workItem);
+ assertNotNull( workItem );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
ut.begin();
getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+ getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+ processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
ut.commit();
- assertNotNull(processInstance);
+ assertNotNull( processInstance );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
ut.begin();
completeWorkItemCommand = new CompleteWorkItemCommand();
- completeWorkItemCommand.setWorkItemId(workItem.getId());
- service.execute(completeWorkItemCommand);
+ completeWorkItemCommand.setWorkItemId( workItem.getId() );
+ service.execute( completeWorkItemCommand );
ut.commit();
-
+
workItem = handler.getWorkItem();
- assertNull(workItem);
+ assertNull( workItem );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
ut.begin();
getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
+ getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+ processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
ut.commit();
- assertNull(processInstance);
+ assertNull( processInstance );
service.dispose();
- }
+ }
- private Package getProcessWorkItems() {
- 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.setDialect("java");
- action.setConsequence("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("WorkItem1");
- 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);
- WorkItemNode workItemNode2 = new WorkItemNode();
- workItemNode2.setId(4);
- workItemNode2.setName("WorkItem2");
- work = new WorkImpl();
- work.setName("MyWork");
- workItemNode2.setWork(work);
- process.addNode(workItemNode2);
- new ConnectionImpl(workItemNode, Node.CONNECTION_DEFAULT_TYPE, workItemNode2, Node.CONNECTION_DEFAULT_TYPE);
- WorkItemNode workItemNode3 = new WorkItemNode();
- workItemNode3.setId(5);
- workItemNode3.setName("WorkItem3");
- work = new WorkImpl();
- work.setName("MyWork");
- workItemNode3.setWork(work);
- process.addNode(workItemNode3);
- new ConnectionImpl(workItemNode2, Node.CONNECTION_DEFAULT_TYPE, workItemNode3, Node.CONNECTION_DEFAULT_TYPE);
- EndNode end = new EndNode();
- end.setId(6);
- end.setName("End");
- process.addNode(end);
- new ConnectionImpl(workItemNode3, Node.CONNECTION_DEFAULT_TYPE, end, Node.CONNECTION_DEFAULT_TYPE);
-
- PackageBuilder packageBuilder = new PackageBuilder();
- ProcessBuilder processBuilder = new ProcessBuilder(packageBuilder);
- processBuilder.buildProcess(process, null);
- return packageBuilder.getPackage();
+ private Collection<KnowledgePackage> getProcessWorkItems() {
+ 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.setDialect( "java" );
+ action.setConsequence( "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( "WorkItem1" );
+ 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 );
+ WorkItemNode workItemNode2 = new WorkItemNode();
+ workItemNode2.setId( 4 );
+ workItemNode2.setName( "WorkItem2" );
+ work = new WorkImpl();
+ work.setName( "MyWork" );
+ workItemNode2.setWork( work );
+ process.addNode( workItemNode2 );
+ new ConnectionImpl( workItemNode,
+ Node.CONNECTION_DEFAULT_TYPE,
+ workItemNode2,
+ Node.CONNECTION_DEFAULT_TYPE );
+ WorkItemNode workItemNode3 = new WorkItemNode();
+ workItemNode3.setId( 5 );
+ workItemNode3.setName( "WorkItem3" );
+ work = new WorkImpl();
+ work.setName( "MyWork" );
+ workItemNode3.setWork( work );
+ process.addNode( workItemNode3 );
+ new ConnectionImpl( workItemNode2,
+ Node.CONNECTION_DEFAULT_TYPE,
+ workItemNode3,
+ Node.CONNECTION_DEFAULT_TYPE );
+ EndNode end = new EndNode();
+ end.setId( 6 );
+ end.setName( "End" );
+ process.addNode( end );
+ new ConnectionImpl( workItemNode3,
+ Node.CONNECTION_DEFAULT_TYPE,
+ end,
+ Node.CONNECTION_DEFAULT_TYPE );
+
+ PackageBuilder packageBuilder = new PackageBuilder();
+ ProcessBuilder processBuilder = new ProcessBuilder( packageBuilder );
+ processBuilder.buildProcess( process,
+ null );
+ List list = new ArrayList<KnowledgePackage>();
+ list.add( new KnowledgePackageImp( packageBuilder.getPackage() ) );
+ return list;
}
-
- public void testPersistenceSubProcess() {
+
+ 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");
- properties.setProperty("drools.workItemManagerFactory", "org.drools.persistence.processinstance.JPAWorkItemManagerFactory");
- properties.setProperty("drools.processSignalManagerFactory", "org.drools.persistence.processinstance.JPASignalManagerFactory");
- SessionConfiguration config = new SessionConfiguration(properties);
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ Properties properties = new Properties();
+ properties.setProperty( "drools.commandService",
+ "org.drools.persistence.session.SingleSessionCommandService" );
+ properties.setProperty( "drools.processInstanceManagerFactory",
+ "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+ properties.setProperty( "drools.workItemManagerFactory",
+ "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+ properties.setProperty( "drools.processSignalManagerFactory",
+ "org.drools.persistence.processinstance.JPASignalManagerFactory" );
+ SessionConfiguration config = new SessionConfiguration( properties );
+
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
Package pkg = getProcessSubProcess();
- ruleBase.addPackage(pkg);
+ ruleBase.addPackage( pkg );
- SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
+ SingleSessionCommandService service = new SingleSessionCommandService( ruleBase,
+ config,
+ env );
StartProcessCommand startProcessCommand = new StartProcessCommand();
- startProcessCommand.setProcessId("org.drools.test.TestProcess");
- RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance) service.execute(startProcessCommand);
- System.out.println("Started process instance " + processInstance.getId());
+ startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+ RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance) service.execute( startProcessCommand );
+ System.out.println( "Started process instance " + processInstance.getId() );
long processInstanceId = processInstance.getId();
-
+
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
- assertNotNull(workItem);
+ assertNotNull( workItem );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env);
+
+ service = new SingleSessionCommandService( ruleBase,
+ config,
+ env );
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstanceId);
- processInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
- assertNotNull(processInstance);
-
+ getProcessInstanceCommand.setProcessInstanceId( processInstanceId );
+ processInstance = (RuleFlowProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNotNull( processInstance );
+
Collection<NodeInstance> nodeInstances = processInstance.getNodeInstances();
- assertEquals(1, nodeInstances.size());
+ assertEquals( 1,
+ nodeInstances.size() );
SubProcessNodeInstance subProcessNodeInstance = (SubProcessNodeInstance) nodeInstances.iterator().next();
long subProcessInstanceId = subProcessNodeInstance.getProcessInstanceId();
getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(subProcessInstanceId);
- RuleFlowProcessInstance subProcessInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
- assertNotNull(subProcessInstance);
+ getProcessInstanceCommand.setProcessInstanceId( subProcessInstanceId );
+ RuleFlowProcessInstance subProcessInstance = (RuleFlowProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNotNull( subProcessInstance );
service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env);
+ service = new SingleSessionCommandService( ruleBase,
+ config,
+ env );
CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand();
- completeWorkItemCommand.setWorkItemId(workItem.getId());
- service.execute(completeWorkItemCommand);
+ completeWorkItemCommand.setWorkItemId( workItem.getId() );
+ service.execute( completeWorkItemCommand );
service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env);
+ service = new SingleSessionCommandService( ruleBase,
+ config,
+ env );
getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(subProcessInstanceId);
- subProcessInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
- assertNull(subProcessInstance);
+ getProcessInstanceCommand.setProcessInstanceId( subProcessInstanceId );
+ subProcessInstance = (RuleFlowProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNull( subProcessInstance );
getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstanceId);
- processInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
- assertNull(processInstance);
+ getProcessInstanceCommand.setProcessInstanceId( processInstanceId );
+ processInstance = (RuleFlowProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNull( processInstance );
service.dispose();
- }
-
- private Package getProcessSubProcess() {
- 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.setDialect("java");
- action.setConsequence("System.out.println(\"Executed action\");");
- actionNode.setAction(action);
- process.addNode(actionNode);
- new ConnectionImpl(start, Node.CONNECTION_DEFAULT_TYPE, actionNode, Node.CONNECTION_DEFAULT_TYPE);
- SubProcessNode subProcessNode = new SubProcessNode();
- subProcessNode.setId(3);
- subProcessNode.setName("SubProcess");
- subProcessNode.setProcessId("org.drools.test.SubProcess");
- process.addNode(subProcessNode);
- new ConnectionImpl(actionNode, Node.CONNECTION_DEFAULT_TYPE, subProcessNode, Node.CONNECTION_DEFAULT_TYPE);
- EndNode end = new EndNode();
- end.setId(4);
- end.setName("End");
- process.addNode(end);
- new ConnectionImpl(subProcessNode, Node.CONNECTION_DEFAULT_TYPE, end, Node.CONNECTION_DEFAULT_TYPE);
-
- PackageBuilder packageBuilder = new PackageBuilder();
- ProcessBuilder processBuilder = new ProcessBuilder(packageBuilder);
- processBuilder.buildProcess(process, null);
+ }
- process = new RuleFlowProcess();
- process.setId("org.drools.test.SubProcess");
- process.setName("SubProcess");
- process.setPackageName("org.drools.test");
- start = new StartNode();
- start.setId(1);
- start.setName("Start");
- process.addNode(start);
- actionNode = new ActionNode();
- actionNode.setId(2);
- actionNode.setName("Action");
- action = new DroolsConsequenceAction();
- action.setDialect("java");
- action.setConsequence("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("WorkItem1");
- 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);
- end = new EndNode();
- end.setId(6);
- end.setName("End");
- process.addNode(end);
- new ConnectionImpl(workItemNode, Node.CONNECTION_DEFAULT_TYPE, end, Node.CONNECTION_DEFAULT_TYPE);
+ private Package getProcessSubProcess() {
+ 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.setDialect( "java" );
+ action.setConsequence( "System.out.println(\"Executed action\");" );
+ actionNode.setAction( action );
+ process.addNode( actionNode );
+ new ConnectionImpl( start,
+ Node.CONNECTION_DEFAULT_TYPE,
+ actionNode,
+ Node.CONNECTION_DEFAULT_TYPE );
+ SubProcessNode subProcessNode = new SubProcessNode();
+ subProcessNode.setId( 3 );
+ subProcessNode.setName( "SubProcess" );
+ subProcessNode.setProcessId( "org.drools.test.SubProcess" );
+ process.addNode( subProcessNode );
+ new ConnectionImpl( actionNode,
+ Node.CONNECTION_DEFAULT_TYPE,
+ subProcessNode,
+ Node.CONNECTION_DEFAULT_TYPE );
+ EndNode end = new EndNode();
+ end.setId( 4 );
+ end.setName( "End" );
+ process.addNode( end );
+ new ConnectionImpl( subProcessNode,
+ Node.CONNECTION_DEFAULT_TYPE,
+ end,
+ Node.CONNECTION_DEFAULT_TYPE );
- processBuilder.buildProcess(process, null);
- return packageBuilder.getPackage();
+ PackageBuilder packageBuilder = new PackageBuilder();
+ ProcessBuilder processBuilder = new ProcessBuilder( packageBuilder );
+ processBuilder.buildProcess( process,
+ null );
+
+ process = new RuleFlowProcess();
+ process.setId( "org.drools.test.SubProcess" );
+ process.setName( "SubProcess" );
+ process.setPackageName( "org.drools.test" );
+ start = new StartNode();
+ start.setId( 1 );
+ start.setName( "Start" );
+ process.addNode( start );
+ actionNode = new ActionNode();
+ actionNode.setId( 2 );
+ actionNode.setName( "Action" );
+ action = new DroolsConsequenceAction();
+ action.setDialect( "java" );
+ action.setConsequence( "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( "WorkItem1" );
+ 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 );
+ end = new EndNode();
+ end.setId( 6 );
+ end.setName( "End" );
+ process.addNode( end );
+ new ConnectionImpl( workItemNode,
+ Node.CONNECTION_DEFAULT_TYPE,
+ end,
+ Node.CONNECTION_DEFAULT_TYPE );
+
+ processBuilder.buildProcess( process,
+ null );
+ return packageBuilder.getPackage();
}
-
- public void testPersistenceTimer() throws Exception {
+
+ public void FIXME_testPersistenceTimer() 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");
- properties.setProperty("drools.workItemManagerFactory", "org.drools.persistence.processinstance.JPAWorkItemManagerFactory");
- properties.setProperty("drools.processSignalManagerFactory", "org.drools.persistence.processinstance.JPASignalManagerFactory");
- SessionConfiguration config = new SessionConfiguration(properties);
-
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- Package pkg = getProcessTimer();
- ruleBase.addPackage(pkg);
- SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
- int sessionId = service.getSessionId();
+ Properties properties = new Properties();
+ properties.setProperty( "drools.commandService",
+ "org.drools.persistence.session.SingleSessionCommandService" );
+ properties.setProperty( "drools.processInstanceManagerFactory",
+ "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+ properties.setProperty( "drools.workItemManagerFactory",
+ "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+ properties.setProperty( "drools.processSignalManagerFactory",
+ "org.drools.persistence.processinstance.JPASignalManagerFactory" );
+ SessionConfiguration config = new SessionConfiguration( properties );
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ Collection<KnowledgePackage> kpkgs = getProcessWorkItems();
+ kbase.addKnowledgePackages( kpkgs );
+
+ SingleSessionCommandService service = new SingleSessionCommandService( kbase,
+ config,
+ env );
+ int sessionId = service.getSessionId();
StartProcessCommand startProcessCommand = new StartProcessCommand();
- startProcessCommand.setProcessId("org.drools.test.TestProcess");
- ProcessInstance processInstance = (ProcessInstance) service.execute(startProcessCommand);
- System.out.println("Started process instance " + processInstance.getId());
+ startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+ ProcessInstance processInstance = (ProcessInstance) service.execute( startProcessCommand );
+ System.out.println( "Started process instance " + processInstance.getId() );
service.dispose();
-
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
- assertNotNull(processInstance);
+ getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+ processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNotNull( processInstance );
service.dispose();
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
- Thread.sleep(3000);
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
+ Thread.sleep( 3000 );
getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
- assertNull(processInstance);
- }
+ getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+ processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNull( processInstance );
+ }
private Package getProcessTimer() {
- 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);
- TimerNode timerNode = new TimerNode();
- timerNode.setId(2);
- timerNode.setName("Timer");
- Timer timer = new Timer();
- timer.setDelay(2000);
- timerNode.setTimer(timer);
- process.addNode(timerNode);
- new ConnectionImpl(start, Node.CONNECTION_DEFAULT_TYPE, timerNode, Node.CONNECTION_DEFAULT_TYPE);
- ActionNode actionNode = new ActionNode();
- actionNode.setId(3);
- actionNode.setName("Action");
- DroolsConsequenceAction action = new DroolsConsequenceAction();
- action.setDialect("java");
- action.setConsequence("System.out.println(\"Executed action\");");
- actionNode.setAction(action);
- process.addNode(actionNode);
- new ConnectionImpl(timerNode, Node.CONNECTION_DEFAULT_TYPE, actionNode, Node.CONNECTION_DEFAULT_TYPE);
- EndNode end = new EndNode();
- end.setId(6);
- end.setName("End");
- process.addNode(end);
- new ConnectionImpl(actionNode, Node.CONNECTION_DEFAULT_TYPE, end, Node.CONNECTION_DEFAULT_TYPE);
-
- PackageBuilder packageBuilder = new PackageBuilder();
- ProcessBuilder processBuilder = new ProcessBuilder(packageBuilder);
- processBuilder.buildProcess(process, null);
- return packageBuilder.getPackage();
+ 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 );
+ TimerNode timerNode = new TimerNode();
+ timerNode.setId( 2 );
+ timerNode.setName( "Timer" );
+ Timer timer = new Timer();
+ timer.setDelay( 2000 );
+ timerNode.setTimer( timer );
+ process.addNode( timerNode );
+ new ConnectionImpl( start,
+ Node.CONNECTION_DEFAULT_TYPE,
+ timerNode,
+ Node.CONNECTION_DEFAULT_TYPE );
+ ActionNode actionNode = new ActionNode();
+ actionNode.setId( 3 );
+ actionNode.setName( "Action" );
+ DroolsConsequenceAction action = new DroolsConsequenceAction();
+ action.setDialect( "java" );
+ action.setConsequence( "System.out.println(\"Executed action\");" );
+ actionNode.setAction( action );
+ process.addNode( actionNode );
+ new ConnectionImpl( timerNode,
+ Node.CONNECTION_DEFAULT_TYPE,
+ actionNode,
+ Node.CONNECTION_DEFAULT_TYPE );
+ EndNode end = new EndNode();
+ end.setId( 6 );
+ end.setName( "End" );
+ process.addNode( end );
+ new ConnectionImpl( actionNode,
+ Node.CONNECTION_DEFAULT_TYPE,
+ end,
+ Node.CONNECTION_DEFAULT_TYPE );
+
+ PackageBuilder packageBuilder = new PackageBuilder();
+ ProcessBuilder processBuilder = new ProcessBuilder( packageBuilder );
+ processBuilder.buildProcess( process,
+ null );
+ return packageBuilder.getPackage();
}
-
- public void testPersistenceTimer2() throws Exception {
+
+ public void FIXME_testPersistenceTimer2() 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");
- properties.setProperty("drools.workItemManagerFactory", "org.drools.persistence.processinstance.JPAWorkItemManagerFactory");
- properties.setProperty("drools.processSignalManagerFactory", "org.drools.persistence.processinstance.JPASignalManagerFactory");
- SessionConfiguration config = new SessionConfiguration(properties);
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- Package pkg = getProcessTimer2();
- ruleBase.addPackage(pkg);
+ Properties properties = new Properties();
+ properties.setProperty( "drools.commandService",
+ "org.drools.persistence.session.SingleSessionCommandService" );
+ properties.setProperty( "drools.processInstanceManagerFactory",
+ "org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory" );
+ properties.setProperty( "drools.workItemManagerFactory",
+ "org.drools.persistence.processinstance.JPAWorkItemManagerFactory" );
+ properties.setProperty( "drools.processSignalManagerFactory",
+ "org.drools.persistence.processinstance.JPASignalManagerFactory" );
+ SessionConfiguration config = new SessionConfiguration( properties );
- SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env);
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ Collection<KnowledgePackage> kpkgs = getProcessWorkItems();
+ kbase.addKnowledgePackages( kpkgs );
+
+ SingleSessionCommandService service = new SingleSessionCommandService( kbase,
+ config,
+ env );
int sessionId = service.getSessionId();
StartProcessCommand startProcessCommand = new StartProcessCommand();
- startProcessCommand.setProcessId("org.drools.test.TestProcess");
- ProcessInstance processInstance = (ProcessInstance) service.execute(startProcessCommand);
- System.out.println("Started process instance " + processInstance.getId());
-
- Thread.sleep(2000);
+ startProcessCommand.setProcessId( "org.drools.test.TestProcess" );
+ ProcessInstance processInstance = (ProcessInstance) service.execute( startProcessCommand );
+ System.out.println( "Started process instance " + processInstance.getId() );
- service = new SingleSessionCommandService(ruleBase, config, env, sessionId);
+ Thread.sleep( 2000 );
+
+ service = new SingleSessionCommandService( kbase,
+ config,
+ env,
+ sessionId );
GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand();
- getProcessInstanceCommand.setProcessInstanceId(processInstance.getId());
- processInstance = (ProcessInstance) service.execute(getProcessInstanceCommand);
- assertNull(processInstance);
- }
+ getProcessInstanceCommand.setProcessInstanceId( processInstance.getId() );
+ processInstance = (ProcessInstance) service.execute( getProcessInstanceCommand );
+ assertNull( processInstance );
+ }
private Package getProcessTimer2() {
- 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);
- TimerNode timerNode = new TimerNode();
- timerNode.setId(2);
- timerNode.setName("Timer");
- Timer timer = new Timer();
- timer.setDelay(0);
- timerNode.setTimer(timer);
- process.addNode(timerNode);
- new ConnectionImpl(start, Node.CONNECTION_DEFAULT_TYPE, timerNode, Node.CONNECTION_DEFAULT_TYPE);
- ActionNode actionNode = new ActionNode();
- actionNode.setId(3);
- actionNode.setName("Action");
- DroolsConsequenceAction action = new DroolsConsequenceAction();
- action.setDialect("java");
- action.setConsequence("try { Thread.sleep(1000); } catch (Throwable t) {} System.out.println(\"Executed action\");");
- actionNode.setAction(action);
- process.addNode(actionNode);
- new ConnectionImpl(timerNode, Node.CONNECTION_DEFAULT_TYPE, actionNode, Node.CONNECTION_DEFAULT_TYPE);
- EndNode end = new EndNode();
- end.setId(6);
- end.setName("End");
- process.addNode(end);
- new ConnectionImpl(actionNode, Node.CONNECTION_DEFAULT_TYPE, end, Node.CONNECTION_DEFAULT_TYPE);
-
- PackageBuilder packageBuilder = new PackageBuilder();
- ProcessBuilder processBuilder = new ProcessBuilder(packageBuilder);
- processBuilder.buildProcess(process, null);
- return packageBuilder.getPackage();
+ 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 );
+ TimerNode timerNode = new TimerNode();
+ timerNode.setId( 2 );
+ timerNode.setName( "Timer" );
+ Timer timer = new Timer();
+ timer.setDelay( 0 );
+ timerNode.setTimer( timer );
+ process.addNode( timerNode );
+ new ConnectionImpl( start,
+ Node.CONNECTION_DEFAULT_TYPE,
+ timerNode,
+ Node.CONNECTION_DEFAULT_TYPE );
+ ActionNode actionNode = new ActionNode();
+ actionNode.setId( 3 );
+ actionNode.setName( "Action" );
+ DroolsConsequenceAction action = new DroolsConsequenceAction();
+ action.setDialect( "java" );
+ action.setConsequence( "try { Thread.sleep(1000); } catch (Throwable t) {} System.out.println(\"Executed action\");" );
+ actionNode.setAction( action );
+ process.addNode( actionNode );
+ new ConnectionImpl( timerNode,
+ Node.CONNECTION_DEFAULT_TYPE,
+ actionNode,
+ Node.CONNECTION_DEFAULT_TYPE );
+ EndNode end = new EndNode();
+ end.setId( 6 );
+ end.setName( "End" );
+ process.addNode( end );
+ new ConnectionImpl( actionNode,
+ Node.CONNECTION_DEFAULT_TYPE,
+ end,
+ Node.CONNECTION_DEFAULT_TYPE );
+
+ PackageBuilder packageBuilder = new PackageBuilder();
+ ProcessBuilder processBuilder = new ProcessBuilder( packageBuilder );
+ processBuilder.buildProcess( process,
+ null );
+ return packageBuilder.getPackage();
}
-
+
}
More information about the jboss-svn-commits
mailing list