[rules-dev] Spring support for drools-api

Mark Proctor mproctor at codehaus.org
Sun Nov 23 21:17:29 EST 2008


now my spring skills are improving, I'm looking to improve the xml and 
leverage spring Resource framework - so that we can get complete 
scripting of the entire KnowlegeBuilder api. I've come up with the two 
xmls so far:
      <property name="drls">
          <list>
              
<value>file:src/main/java/org/drools/ioc/spring/testSpring.drl</value>
          </list>  
      </property>    
 
      <property name="dtables">
          <list>
                  <bean 
class="org.drools.ioc.spring.DtableResourceFactoryBean">
                      <property name="resource" 
value="file:src/main/java/org/drools/ioc/spring/dt.xls" />
                      <property name="inputType" value="XLS" />
                  
</bean>                                                    
          </list>  
      </property>
This one has a property per knowledge type, the advantage is on 
knowledge types which are just string, we can use a simple <value>. 
Although knowlege tyep that require additional information, like the DT 
input type, will need a bean.

      <property name="resources">
          <list>
              <bean 
class="org.drools.ioc.spring.KnowledgeResourceBeanFactory">
                  <property name="knowledgeType" value="DRL" />
                  <property name="resource" 
value="file:src/main/java/org/drools/ioc/spring/testSpring.drl" 
/>                 
              </bean>
 
              <bean 
class="org.drools.ioc.spring.KnowledgeResourceBeanFactory">
                  <property name="knowledgeType" value="DTABLE" />
                  <property name="resource" 
value="file:src/main/java/org/drools/ioc/spring/dt.xls" />
                  <property name="resourceConfiguration">   
                      <bean 
class="org.drools.ioc.spring.DtableResourceFactoryBean">
                          <property name="inputType" value="XLS" />
                      </bean> 
                  </property>
              </bean>                     
          </list>
      </property>
This approach more closely resembles the kbuilder api. We have  simple 
resources list. Everything is a bean, so it's very flexible, but we lose 
the shortcut approach of the first one where we can just give a list of 
strings. As each one must be a bean, so that it can contain atleast the 
knowledge type, as well as the resource string.

My preference currently is for the second one, as I don't tink it's too 
verbose, and it provides better consistency than the first.

Mark


Geoffrey De Smet wrote:
> It doesn't indeed sound overkill to me to create a FactoryBean for the 
> Builder.
> Though I would probably reuse the Builder inside the 
> KnowlegdeBaseFactory to build the Knowlegde base.
>
> The real issue is concurrency.
> Spring promotes the idea of stateless beans which do have global 
> variables, but those global variables are either synchronised 
> thread-safe or also follow the stateless bean pattern.
> This in fact makes the stateless beans thread safe, without any need 
> for synchronization/locking.
>
> So the question is: is your KnowlegdeBase thread-safe?
> Thread safe objects are usually put into global variables,
> while not thread unsafe objects are always put into local variables.
>
> class A {
>   private B b; // thread-safe by synchronization (JDBCConnection, ...)
>   private C c; // thread-safe by the stateless pattern:
>
>   // both b and c are set during initialization (constr. or setter), 
> before A is exposed to other threads
>
>   public void metho(D d) { // d is not thread-safe
>     E e = ...; // e is not thread-safe
>   }
>
> }
>
> In drools 4. B is the RuleBase, while E is the working memory instance.
>
> With kind regards,
> Geoffrey De Smet
>
>
> Mark Proctor schreef:
>> Geoffrey De Smet wrote:
>>>
>>> With kind regards,
>>> Geoffrey De Smet
>>>
>>>
>>> Mark Proctor schreef:
>>>
>>>>> I'd also maybe consider dropping the Spring prefix, as it's in a 
>>>>> package called spring?
>>>>> => org.drools.spring.KnowledgeAgentFactoryBean
>>>> My worry here is it might be a duplicate of the same name used in 
>>>> the future - although it'll be in a different package namespace, 
>>>> it's still not good practice. Anyone else have any opinions on this?
>>>
>>> Good point, prefixing it with Spring can't hurt :)
>> I'm just wondering about KnowledgeBuilderFactory and 
>> KnowledgeBaseFactory. While it makes sense to put the 
>> KnowledgeAgentFactory into spring, does it make sense for those other 
>> factories? What are they gonna do other than return KnowledgeBuilder 
>> or a KnowledgeBase, only possible advantage is that it would allow 
>> spring to inject the KnowledgeBuilderConfiguration and 
>> KnowledgeBaseConfiguration. And ideas?
>> http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderFactory.java 
>>
>> http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilder.java 
>>
>>
>> http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBaseFactory.java 
>>
>> http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java 
>>
>>
>> This is typically how those two factories are used:
>> KnowledgeBuilder kbuilder = 
>> KnowledgeBuilderFactory.newKnowledgeBuilder();
>> kbuilder.addResource( new URL( "file://myrules.drl" ),
>>                                   KnowledgeType.DRL);
>> KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
>>
>> If we use spring to automate the adding of resources, that's pretty 
>> much what the agent is doing anyway, so wouldn't that be pointless?
>>
>> Mark
>>
>>
>>>
>>> _______________________________________________
>>> rules-dev mailing list
>>> rules-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-dev
>>>
>>>
>>
>>
>> _______________________________________________
>> rules-dev mailing list
>> rules-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-dev
>>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
>





More information about the rules-dev mailing list