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

Davide Sottara (JIRA) issues at jboss.org
Wed Feb 5 04:58:29 EST 2014


    [ https://issues.jboss.org/browse/DROOLS-422?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12941416#comment-12941416 ] 

Davide Sottara commented on DROOLS-422:
---------------------------------------

Timers had some inconsistencies in 5.5 and have been improved in 5.6 and 6.x.
Could you please try those versions, and/or submit a full test case?
Thanks
Davide
                
> 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
>         Attachments: drools-mongodb-persistence.zip
>
>
> 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 are 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