[jboss-jira] [JBoss JIRA] (DROOLS-422) Timer based rules don't fire and facts can't expire after session restore
Maksim Drobyshev (Jira)
issues at jboss.org
Mon Oct 28 00:08:00 EDT 2019
[ https://issues.jboss.org/browse/DROOLS-422?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13804824#comment-13804824 ]
Maksim Drobyshev edited comment on DROOLS-422 at 10/28/19 12:07 AM:
--------------------------------------------------------------------
Do you have any news about this bug?
We have the same issue with KieSession deserialization.
[~mark.proctor] can you help me?
was (Author: d.max):
Do you have any news about this bug?
We have the same issue with KieSession deserialization.
> 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
> Affects Versions: 5.5.0.Final
> Environment: Linux Mint 15
> JBoss AS 5.1
> Reporter: Nedo Nedic
> Assignee: Mark Proctor
> Priority: Major
> 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 was sent by Atlassian Jira
(v7.13.8#713008)
More information about the jboss-jira
mailing list