[rules-users] Add calendars to knowledge session from Spring?

dunnlow dunnlow at yahoo.com
Wed Aug 1 20:42:07 EDT 2012


I am using the Drools 5.4 integration server in a stateless session.  I have
it running fine with the example.  Now, I want to use custom Quartz
calendars in my rules.  The only way I could come up with to do this in
Spring (a la integration server) was to create a bean that takes a ksession
constructer then creates the calendars and adds them to that ksession.  

I see that the bean is created with a knowledge session and all seems ok,
but none of my calendar-based rules ever fire regardless of how the
calendars are configured.  (I test the calendars in my bean (with a call to
isTimeIncluded())  and they seem to be in working order.

Also weird is that bean's constructor gets called twice and with two
different knowledge sessions.  Once when I start the application, and then
again when I send to the rules service.

1) What is the right was to add custom calendars to a knowledge session (via
Spring)?

2) Any idea why my bean is getting called twice with different knowledge
sessions?

Thanks for any insight.  -J

---in knowledge-service.xml
<drools:ksession id="ksession1" type="stateful" kbase="kbase1"
note="node1"/>
<bean id="myCalendar" class="org.test.MyQuartzCalendarLoader">
    <constructor-arg ref="ksession1"/>
 </bean>

---  MyQuartzCalendarLoader.java
public class MyQuartzCalendarLoader {
       private static StatefulKnowledgeSession thisSession=null;

       public MyQuartzCalendarLoader (StatefulKnowledgeSession thisKs) {  
//gets called twice?
              thisSession=thisKs;
              print thisSession.tostring() -- looks ok
              WeeklyCalendar calendar = new WeeklyCalendar();
              org.drools.time.Calendar onlyWeekDays =
QuartzHelper.quartzCalendarAdapter(calendar);
              
              calendar.setDayExcluded(Calendar.WEDNESDAY,false) -- I toggle
just to test
              
              print onlyWeekDays.isTimeIncluded(now.getTime()); --- also
works as expected
              Calendars cals =
thisSession.getCalendars().set("ONLYWEEKDAYS",onlyWeekDays);
       }
}

--- test.drl
rule "weekdays" dialect "mvel"           <-- This rule never fires unless i
remove calendars.
   calendars "ONLYWEEKDAYS"
when
   $m:Message()
then
   $m.text = "FIRED"
end




--
View this message in context: http://drools.46999.n3.nabble.com/Add-calendars-to-knowledge-session-from-Spring-tp4018983.html
Sent from the Drools: User forum mailing list archive at Nabble.com.


More information about the rules-users mailing list