1 Reply Latest reply on Jul 8, 2011 5:57 PM by Mark Proctor

    Drools Integration with Spring

    ketaki desh Newbie

      Hi Experts,

       

      I am facing one issue while integrating drools with Spring.

       

      I have done the following configurations

       

      1. Beans.xml :

       

      <?xml version="1.0" encoding="UTF-8"?>

      <beans xmlns="http://www.springframework.org/schema/beans"

             xmlns:drools="http://drools.org/schema/drools-spring

                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                         xmlns:context="http://www.springframework.org/schema/context"

                         xmlns:aop="http://www.springframework.org/schema/aop"

                         xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"

                      xsi:schemaLocation="http://www.springframework.org/schema/beans

                      http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

                      http://www.springframework.org/schema/context

                      http://www.springframework.org/schema/context/spring-context-2.5.xsd

                      http://www.springframework.org/schema/aop

                      http://www.springframework.org/schema/aop/spring-aop-2.0.xsd

                      http://www.directwebremoting.org/schema/spring-dwr

                      http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd

                      http://drools.org/schema/drools-spring               http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring-1.0.0.xsd">

       

               <bean id="droolsDAOImpl" class="com.dao.DroolsDAOImpl">

                                      <property name="sessionFactory" ref="mySessionFactory" />

                                      <property name="ksession" ref="ksession" />

                                      <property name="intermediateData" ref="intermediateData" />

                                      <property name="kbase" ref="kbase" />

                      </bean>

                     

                      <bean id="intermediateData" class="com.pojo.IntermediateData" />

                     

                      <drools:kbase id="kbase">

                <drools:resources>

                    <drools:resource type="DRL" source="classpath:Sample.drl"></drools:resource>

                </drools:resources>

       

          </drools:kbase>

             

          <drools:ksession id="ksession" type="stateful" kbase="kbase"/> 

       

      ----------------------------------------------------------------------------------------------------

      1. DroolsDAOImpl.java :

       

       

      public class DroolsDAOImpl implements DroolsDAO {

       

                      private StatefulKnowledgeSession ksession;

                     

                      private IntermediateData intermediateData;

                     

                      private KnowledgeBase kbase;

       

                      public KnowledgeBase getKbase() {

                                      return kbase;

                      }

       

                      public void setKbase(KnowledgeBase kbase) {

                                      this.kbase = kbase;

                      }

       

                      public StatefulKnowledgeSession getKsession() {

                                      return ksession;

                      }

       

                      public void setKsession(StatefulKnowledgeSession ksession) {

                                      this.ksession = ksession;

                      }

                     

          public static void main(String args[]) throws Exception{

             

             Resource res = new ClassPathResource("beans.xml");

              BeanFactory factory = new XmlBeanFactory(res);

              DroolsDAOImpl droolsDAOImpl=(DroolsDAOImpl)factory.getBean("droolsDAOImpl");

              droolsDAOImpl.init_drools();

       

          }

       

                      public void init_drools() throws Exception{

                                     

                                     

                                      try {

                                                     

                                     

                                          ksession = kbase.newStatefulKnowledgeSession();

                                         

                                          

                                                      intermediateData.setNoofPay(noofPaytemp());

                                                      intermediateData.setRegPay(regpaytemp());

                                                                                                     

                                                      ksession.insert(intermediateData);

                                                      ksession.fireAllRules();

                                                     

                                                      }              catch (Throwable t) {

                                                                     

                                                                      logger.error("Exception occured in DroolsDAOImpl---"+t);

                                                                      throw new Exception("Some Error Occured. Please try after some time");

                                                     

                                      } }

       

       

      I am having one drl file : Sample.drl which contains rule and IntermediateData is simple pojo.

      But after running this I am getting following error:

       

      Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'drools:kbase'.

       

      Can anyone help me with this issue? Thanks in advance