[jboss-jira] [JBoss JIRA] (DROOLS-422) Timer based rules don't fire and facts can't expire after session restore

Nedo Nedic (JIRA) issues at jboss.org
Tue Feb 4 06:08:29 EST 2014


Nedo Nedic created DROOLS-422:
---------------------------------

             Summary: Timer based rules don't fire and facts can't expire after session restore
                 Key: DROOLS-422
                 URL: https://issues.jboss.org/browse/DROOLS-422
             Project: Drools
          Issue Type: Bug
      Security Level: Public (Everyone can see)
    Affects Versions: 5.5.0.Final
         Environment: Linux Mint 15
JBoss AS 5.1
            Reporter: Nedo Nedic
            Assignee: Mark Proctor


I have implemented a custom persistence engine for Drools sessions in MongoDB. When session is built for first time, everything works like a charm. I am having some problems when Drools sessions is restored from MongoDB collection. Firstly, interval based rules (for example timer(int: 10s 10s)) don't fire. Some facts that should expire, they just don't expire and remain forever in WM. I attached the source code. When session is built for first time, I use code like this:

KnowledgeBase kbase = createKBase(getKnowledgeBuilder(rulePackagePath),
				config);

		if (hasKnowledgeAgent) {
			
			createKnowledgeAgent(kbase, correlatorId);
			
			wm = (ReteooStatefulSession) ((KnowledgeBaseImpl) kagent
					.getKnowledgeBase()).ruleBase.newStatefulSession(
					(SessionConfiguration) ksconf, env);

			ksession = new StatefulKnowledgeSessionImpl(wm, kagent
					.getKnowledgeBase());
			
		    stateOutputMarshaller = StateMarshallerFactory.newOutputMarshaller(this, ksession, ksconf);
		    stateOutputMarshaller.init();
		    ((InternalKnowledgeRuntime) ksession).setEndOperationListener(this);
			}

Then, after every action I update the session in MongoDB collection.

public void endOperation(InternalKnowledgeRuntime ikr) {
		
		stateOutputMarshaller.marshall();
	}


 For session restoring, after AS restart I use this code:

KnowledgeBase kbase = createKBase( getKnowledgeBuilder(rulePackagePath), getKBaseConfig() );
			stateInputMarshaller = StateMarshallerFactory.newInputMarshaller( this, kbase, getSessionConf() );
			ksession = stateInputMarshaller.unmarshall(correlatorId);
			stateOutputMarshaller = StateMarshallerFactory.newOutputMarshaller( this, ksession, getSessionConf() );
			
			((InternalKnowledgeRuntime)ksession).setEndOperationListener(this);
			

protected static KnowledgeBaseConfiguration getKBaseConfig() {
		KnowledgeBaseConfiguration config = KnowledgeBaseFactory
				.newKnowledgeBaseConfiguration();
		config.setOption(EventProcessingOption.STREAM);
		return config;
	}

	protected static KnowledgeSessionConfiguration getSessionConf() {
		KnowledgeSessionConfiguration ksconf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
	      ksconf.setOption(ClockTypeOption.get("realtime"));
		return ksconf;
	}


Any help is appreciated.

Thanks

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list