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

Dushman Elvitigala (JIRA) issues at jboss.org
Sat Sep 20 03:20:02 EDT 2014


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

Dushman Elvitigala commented on DROOLS-422:
-------------------------------------------

@Roger Did you create a separate ticket for this? I too experience exactly same issue. I use 6.1.0 with JPA(MYSQL). I use below settings when creating session
*ksconf.setOption( TimedRuleExectionOption.YES );*
*ksconf.setOption(TimerJobFactoryOption.get("trackable"));*

I have below Rule in my rule file.

rule "SetMyObject"
  timer (cron: 0/5 * * * * ?)
  no-loop
  when
eval(true)
  then
    insert(myObject); 
System.out.println("vvvvvvvvvvvvvvvv");
end


2014-09-20 12:24:16 WARN SingleSessionCommandService:359 - Could not commit session
java.lang.RuntimeException: Unable to load session snapshot
at org.drools.persistence.SessionMarshallingHelper.loadSnapshot(SessionMarshallingHelper.java:88)
at org.drools.persistence.SingleSessionCommandService.initExistingKnowledgeSession(SingleSessionCommandService.java:23
9)
at org.drools.persistence.SingleSessionCommandService.<init>(SingleSessionCommandService.java:172)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:122)
at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.loadKieSession(KnowledgeStoreServiceImpl.java:90)
at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.loadKieSession(KnowledgeStoreServiceImpl.java:39)
at org.kie.internal.persistence.jpa.JPAKnowledgeService.loadStatefulKnowledgeSession(JPAKnowledgeService.java:130)
at com.brandixi3.hip.ruleengine.util.RuleEngineWrapper.initilizeRuleEngine(RuleEngineWrapper.java:82)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowir
eCapableBeanFactory.java:1681)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapa
bleBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapable
BeanFactory.java:1549)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBe
anFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBean
Factory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.ja
va:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFa
ctory.java:703)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationC
ontext.java:760)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
at com.brandixi3.hip.ruleengine.Main.main(Main.java:33)
Caused by: java.lang.IllegalStateException: Trigger.nextFireTime is not increasing
at org.drools.core.phreak.PhreakTimerNode.scheduleTimer(PhreakTimerNode.java:305)
at org.drools.core.phreak.PhreakTimerNode.access$000(PhreakTimerNode.java:49)
at org.drools.core.phreak.PhreakTimerNode$1.schedule(PhreakTimerNode.java:242)
at org.drools.core.phreak.PhreakTimerNode$TimerNodeTimerInputMarshaller.deserialize(PhreakTimerNode.java:599)
at org.drools.core.marshalling.impl.ProtobufInputMarshaller.readTimer(ProtobufInputMarshaller.java:700)
at org.drools.core.marshalling.impl.ProtobufInputMarshaller.readSession(ProtobufInputMarshaller.java:282)
at org.drools.core.marshalling.impl.ProtobufInputMarshaller.readSession(ProtobufInputMarshaller.java:155)
at org.drools.core.marshalling.impl.ProtobufMarshaller.unmarshall(ProtobufMarshaller.java:110)
at org.drools.core.marshalling.impl.ProtobufMarshaller.unmarshall(ProtobufMarshaller.java:54)
at org.drools.persistence.SessionMarshallingHelper.loadSnapshot(SessionMarshallingHelper.java:83)
... 30 more
2014-09-20 12:24:16 INFO LocalContainerEntityManagerFactoryBean:462 - Closing JPA EntityManagerFactory for persistence unit '
org.jbpm.persistence.jpa.local'
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ruleengineW
rapper' defined in class path resource
[rule-context.xml]
: Invocation of init method failed; nested exception is java.lang.Ill
egalStateException: java.lang.reflect.InvocationTargetException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapable
BeanFactory.java:1553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBe
anFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBean
Factory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.ja
va:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFa
ctory.java:703)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationC
ontext.java:760)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
at com.brandixi3.hip.ruleengine.Main.main(Main.java:33)
Caused by: java.lang.IllegalStateException: java.lang.reflect.InvocationTargetException
at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:137)
at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.loadKieSession(KnowledgeStoreServiceImpl.java:90)
at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.loadKieSession(KnowledgeStoreServiceImpl.java:39)
at org.kie.internal.persistence.jpa.JPAKnowledgeService.loadStatefulKnowledgeSession(JPAKnowledgeService.java:130)
at com.brandixi3.hip.ruleengine.util.RuleEngineWrapper.initilizeRuleEngine(RuleEngineWrapper.java:82)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowir
eCapableBeanFactory.java:1681)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapa
bleBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapable
BeanFactory.java:1549)
... 12 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:122)
... 23 more
Caused by: java.lang.RuntimeException: Unable to load session snapshot
at org.drools.persistence.SessionMarshallingHelper.loadSnapshot(SessionMarshallingHelper.java:88)
at org.drools.persistence.SingleSessionCommandService.initExistingKnowledgeSession(SingleSessionCommandService.java:23
9)
at org.drools.persistence.SingleSessionCommandService.<init>(SingleSessionCommandService.java:172)
... 28 more
*Caused by: java.lang.IllegalStateException: Trigger.nextFireTime is not increasing*
at org.drools.core.phreak.PhreakTimerNode.scheduleTimer(PhreakTimerNode.java:305)
at org.drools.core.phreak.PhreakTimerNode.access$000(PhreakTimerNode.java:49)
at org.drools.core.phreak.PhreakTimerNode$1.schedule(PhreakTimerNode.java:242)
at org.drools.core.phreak.PhreakTimerNode$TimerNodeTimerInputMarshaller.deserialize(PhreakTimerNode.java:599)
at org.drools.core.marshalling.impl.ProtobufInputMarshaller.readTimer(ProtobufInputMarshaller.java:700)
at org.drools.core.marshalling.impl.ProtobufInputMarshaller.readSession(ProtobufInputMarshaller.java:282)
at org.drools.core.marshalling.impl.ProtobufInputMarshaller.readSession(ProtobufInputMarshaller.java:155)
at org.drools.core.marshalling.impl.ProtobufMarshaller.unmarshall(ProtobufMarshaller.java:110)
at org.drools.core.marshalling.impl.ProtobufMarshaller.unmarshall(ProtobufMarshaller.java:54)
at org.drools.persistence.SessionMarshallingHelper.loadSnapshot(SessionMarshallingHelper.java:83)
... 30 more

> 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
>         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
(v6.3.1#6329)


More information about the jboss-jira mailing list