<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
This is now what the spring XML looks like:<br>
&nbsp; &lt;bean id="rb1"
class="org.drools.ioc.spring.KnowledgeBaseFactoryBean"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="resources"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean
class="org.drools.ioc.spring.KnowledgeResourceFactoryBean"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="knowledgeType" value="DRL" /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="source"
value=<a class="moz-txt-link-rfc2396E" href="file:src/main/java/org/drools/ioc/spring/testSpring.drl">"file:src/main/java/org/drools/ioc/spring/testSpring.drl"</a>
/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean
class="org.drools.ioc.spring.KnowledgeResourceFactoryBean"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="knowledgeType" value="DTABLE" /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="source"
value=<a class="moz-txt-link-rfc2396E" href="file:src/main/java/org/drools/ioc/spring/IntegrationExampleTest.xls">"file:src/main/java/org/drools/ioc/spring/IntegrationExampleTest.xls"</a>
/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property
name="knowledgeResourceConfiguration"&gt;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &lt;bean
class="org.drools.ioc.spring.DTableResourceConfigurationFactoryBean"&gt;
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="inputType" value="XLS"
/&gt;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &lt;/bean&gt;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp; &lt;/bean&gt;<br>
<br>
How is that looking? Most people happy with that, it's very generic.
I've dropped the agent side for the moment, just focusing on scripting
of a KnowledgeBase via spring. It now more closely follows the
KnowedgeBuilder api.&nbsp; The above spring configuration will return a
rulebase of two resources, on is a simple DRL, the other is a
decisiontable of type XLS.<br>
<br>
I'll extend this further to make sure that ALL knowledge types can be
built for a knowledge base via the spring api. I'll also make sure it
can take a KnowledgeBaseConfiguration and
KnowledgeBuilderConfiguration. Then I'll also make sure there is a
spring configuration to return a stateful or stateless session given a
knowlebasefactorybean ref. Finally I might add some basic agent
facilities.<br>
<br>
I think this should give spring users everything they need, i.e. the
capability to build knowledge bases and wire sessions and knowledge
bases to other beans - all via xml.<br>
<br>
Mark<br>
<br>
Mark Proctor wrote:
<blockquote cite="mid:492A3EBF.4080401@codehaus.org" type="cite">
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
I'm updating drools-api as we speak, based on the spring Resource idea.
the following Factory will provide a set of ready to go Resources, that
should satisfy most people's needs. So drools-api will be spimplied to<br>
kbuilder.addResource( Resource, KnowledgeType )<br>
kbuilder.addResource( Resource, KnowledgeType, ResourceConfiguration )<br>
  <br>
And the Resources available, and ofcourse people can implement the
interface themselves is:<br>
  <pre class="code" id="codemain"><span class="keyword">public</span> <span
 class="keyword">class </span>ResourceFactory {
&nbsp;
    <span class="keyword">public</span> <span class="keyword">static</span> Resource newURLResource(URL url) {
        <span class="keyword">return</span> null;
    }
&nbsp;
    <span class="keyword">public</span> <span class="keyword">static</span> Resource newURLResource(URI uri) {
        <span class="keyword">return</span> null;
    }
&nbsp;
    <span class="keyword">public</span> <span class="keyword">static</span> Resource newURLResource(String url) {
        <span class="keyword">return</span> null;
    }    
&nbsp;
    <span class="keyword">public</span> <span class="keyword">static</span> Resource newFileResource(File file) {
        <span class="keyword">return</span> null;
    }
&nbsp;
    <span class="keyword">public</span> <span class="keyword">static</span> Resource newFileResource(String file) {
        <span class="keyword">return</span> null;
    }
&nbsp;
&nbsp;
    <span class="keyword">public</span> <span class="keyword">static</span> Resource newByteArrayResource(<span
 class="keyword">byte</span>[] bytes) {
        <span class="keyword">return</span> null;
    }
&nbsp;
    <span class="keyword">public</span> <span class="keyword">static</span> Resource newInputStreamResource(InputStream stream) {
        <span class="keyword">return</span> null;
    }
&nbsp;
    <span class="keyword">public</span> <span class="keyword">static</span> Resource newReaderResource(Reader reader) {
        <span class="keyword">return</span> null;
    }
&nbsp;
    <span class="keyword">public</span> <span class="keyword">static</span> Resource newReaderResource(Reader reader, String encoding) {
        <span class="keyword">return</span> null;
    }  
&nbsp;
    <span class="keyword">public</span> <span class="keyword">static</span> Resource newClassPathResource(String path) {
        <span class="keyword">return</span> null;
    }
&nbsp;
    <span class="keyword">public</span> <span class="keyword">static</span> Resource newClassPathResource(String path, ClassLoader classLoader) {
        <span class="keyword">return</span> null;
    }    

}

It can take a Reader, which underneath will open an InputStream, it'll use default encoding unless the encoding is
specified as otherwise in the alternative param. 

So typically it'll be
kbuilder.addResource( ResourceFactory.newClassPathResource( "some path" ), KnowledgeType.DRL );

don't forget you can import static methods, so it can actually be:
kbuilder.addResource( newClassPathResource( "some path" ), KnowledgeType.DRL );


Mark
  </pre>
  <br>
  <br>
  <br>
Greg Barton wrote:
  <blockquote cite="mid:659477.68580.qm@web81505.mail.mud.yahoo.com"
 type="cite">
    <pre wrap="">Well, if you look at String.getBytes() it uses the default encoding, then ISO-8859-1 if that fails. (Default is UTF-8 unless otherwise specified in the "file.encoding" property.) As long as that's documented I guess it's not a problem, unless someone wants to specify their own charset for a particular file.  Java 1.6 has String.getBytes(Charset) and that could allow someone to use an alternate charset.

I figure for the vast majority of cases it won't be a problem.

--- On Sun, 11/23/08, Mark Proctor <a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E" href="mailto:mproctor@codehaus.org">&lt;mproctor@codehaus.org&gt;</a> wrote:

  </pre>
    <blockquote type="cite">
      <pre wrap="">From: Mark Proctor <a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E" href="mailto:mproctor@codehaus.org">&lt;mproctor@codehaus.org&gt;</a>
Subject: Re: [rules-dev] Spring support for drools-api
To: "Rules Dev List" <a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E" href="mailto:rules-dev@lists.jboss.org">&lt;rules-dev@lists.jboss.org&gt;</a>
Date: Sunday, November 23, 2008, 9:09 PM
I'm thinking of adopting the Spring approach to
Resources for 
drools-api, obviously not tieing drools-api to spring -
just copying the 
concept. Resource however doesn't seem to work with
Readers. Readers in 
general are only needed for in memory generation , using
StringReader, 
otherwise file/url/classpath resources suffice. So it seems
to do the 
Spring way you would do a ByteArrayResource( "this is
my drl 
file".getBytes() ). I'm wondering what people
think of that, and what 
about encoding issues? Compared to the way at the moment
that we just 
take a Reader, and that's it.

Mark

Mark Proctor wrote:
    </pre>
      <blockquote type="cite">
        <pre wrap="">now my spring skills are improving, I'm looking to
      </pre>
      </blockquote>
      <pre wrap="">improve the xml and 
    </pre>
      <blockquote type="cite">
        <pre wrap="">leverage spring Resource framework - so that we can
      </pre>
      </blockquote>
      <pre wrap="">get complete 
    </pre>
      <blockquote type="cite">
        <pre wrap="">scripting of the entire KnowlegeBuilder api. I've
      </pre>
      </blockquote>
      <pre wrap="">come up with the two 
    </pre>
      <blockquote type="cite">
        <pre wrap="">xmls so far:
     &lt;property name="drls"&gt;
         &lt;list&gt;
             

      </pre>
      </blockquote>
      <pre wrap="">&lt;value&gt;<a moz-do-not-send="true"
 class="moz-txt-link-freetext"
 href="file:src/main/java/org/drools/ioc/spring/testSpring.drl">file:src/main/java/org/drools/ioc/spring/testSpring.drl</a>&lt;/value&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">         &lt;/list&gt;       &lt;/property&gt;   
     &lt;property name="dtables"&gt;
         &lt;list&gt;
                 &lt;bean 

      </pre>
      </blockquote>
      <pre wrap="">class="org.drools.ioc.spring.DtableResourceFactoryBean"&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">                     &lt;property
      </pre>
      </blockquote>
      <pre wrap="">name="resource" 
    </pre>
      <pre wrap="">value=<a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E"
 href="file:src/main/java/org/drools/ioc/spring/dt.xls">"file:src/main/java/org/drools/ioc/spring/dt.xls"</a>
/&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">                     &lt;property
      </pre>
      </blockquote>
      <pre wrap="">name="inputType" value="XLS" /&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">                 
&lt;/bean&gt;                                         
      </pre>
      </blockquote>
      <pre wrap="">                   
    </pre>
      <blockquote type="cite">
        <pre wrap="">&lt;/list&gt;       &lt;/property&gt;
This one has a property per knowledge type, the
      </pre>
      </blockquote>
      <pre wrap="">advantage is on 
    </pre>
      <blockquote type="cite">
        <pre wrap="">knowledge types which are just string, we can use a
      </pre>
      </blockquote>
      <pre wrap="">simple &lt;value&gt;. 
    </pre>
      <blockquote type="cite">
        <pre wrap="">Although knowlege tyep that require additional
      </pre>
      </blockquote>
      <pre wrap="">information, like the 
    </pre>
      <blockquote type="cite">
        <pre wrap="">DT input type, will need a bean.

     &lt;property name="resources"&gt;
         &lt;list&gt;
             &lt;bean 

      </pre>
      </blockquote>
      <pre wrap="">class="org.drools.ioc.spring.KnowledgeResourceBeanFactory"&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">                 &lt;property
      </pre>
      </blockquote>
      <pre wrap="">name="knowledgeType" value="DRL" /&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">                 &lt;property
      </pre>
      </blockquote>
      <pre wrap="">name="resource" 
    </pre>
      <pre wrap="">value=<a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E"
 href="file:src/main/java/org/drools/ioc/spring/testSpring.drl">"file:src/main/java/org/drools/ioc/spring/testSpring.drl"</a>

    </pre>
      <blockquote type="cite">
        <pre wrap="">/&gt;                              &lt;/bean&gt;

             &lt;bean 

      </pre>
      </blockquote>
      <pre wrap="">class="org.drools.ioc.spring.KnowledgeResourceBeanFactory"&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">                 &lt;property
      </pre>
      </blockquote>
      <pre wrap="">name="knowledgeType" value="DTABLE"
/&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">                 &lt;property
      </pre>
      </blockquote>
      <pre wrap="">name="resource" 
    </pre>
      <pre wrap="">value=<a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E"
 href="file:src/main/java/org/drools/ioc/spring/dt.xls">"file:src/main/java/org/drools/ioc/spring/dt.xls"</a>
/&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">                 &lt;property
      </pre>
      </blockquote>
      <pre wrap="">name="resourceConfiguration"&gt;   
    </pre>
      <blockquote type="cite">
        <pre wrap="">                     &lt;bean 

      </pre>
      </blockquote>
      <pre wrap="">class="org.drools.ioc.spring.DtableResourceFactoryBean"&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">                         &lt;property
      </pre>
      </blockquote>
      <pre wrap="">name="inputType" value="XLS" /&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">                     &lt;/bean&gt;                 
      </pre>
      </blockquote>
      <pre wrap="">&lt;/property&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">             &lt;/bean&gt;                            
      </pre>
      </blockquote>
      <pre wrap=""> &lt;/list&gt;
    </pre>
      <blockquote type="cite">
        <pre wrap="">     &lt;/property&gt;
This approach more closely resembles the kbuilder api.
      </pre>
      </blockquote>
      <pre wrap="">We have  simple 
    </pre>
      <blockquote type="cite">
        <pre wrap="">resources list. Everything is a bean, so it's very
      </pre>
      </blockquote>
      <pre wrap="">flexible, but we 
    </pre>
      <blockquote type="cite">
        <pre wrap="">lose the shortcut approach of the first one where we
      </pre>
      </blockquote>
      <pre wrap="">can just give a 
    </pre>
      <blockquote type="cite">
        <pre wrap="">list of strings. As each one must be a bean, so that
      </pre>
      </blockquote>
      <pre wrap="">it can contain 
    </pre>
      <blockquote type="cite">
        <pre wrap="">atleast the knowledge type, as well as the resource
      </pre>
      </blockquote>
      <pre wrap="">string.
    </pre>
      <blockquote type="cite">
        <pre wrap="">My preference currently is for the second one, as I
      </pre>
      </blockquote>
      <pre wrap="">don't tink it's 
    </pre>
      <blockquote type="cite">
        <pre wrap="">too verbose, and it provides better consistency than
      </pre>
      </blockquote>
      <pre wrap="">the first.
    </pre>
      <blockquote type="cite">
        <pre wrap="">Mark


Geoffrey De Smet wrote:
      </pre>
        <blockquote type="cite">
          <pre wrap="">It doesn't indeed sound overkill to me to
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">create a FactoryBean for 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">the Builder.
Though I would probably reuse the Builder inside
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">the 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">KnowlegdeBaseFactory to build the Knowlegde base.

The real issue is concurrency.
Spring promotes the idea of stateless beans which
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">do have global 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">variables, but those global variables are either
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">synchronised 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">thread-safe or also follow the stateless bean
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">pattern.
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">This in fact makes the stateless beans thread
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">safe, without any need 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">for synchronization/locking.

So the question is: is your KnowlegdeBase
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">thread-safe?
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">Thread safe objects are usually put into global
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">variables,
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">while not thread unsafe objects are always put
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">into local variables.
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">class A {
  private B b; // thread-safe by synchronization
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">(JDBCConnection, ...)
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">  private C c; // thread-safe by the stateless
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">pattern:
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">  // both b and c are set during initialization
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">(constr. or setter), 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">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
        </pre>
        </blockquote>
      </blockquote>
      <pre wrap="">working memory instance.
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">With kind regards,
Geoffrey De Smet


Mark Proctor schreef:
        </pre>
          <blockquote type="cite">
            <pre wrap="">Geoffrey De Smet wrote:
          </pre>
            <blockquote type="cite">
              <pre wrap="">With kind regards,
Geoffrey De Smet


Mark Proctor schreef:

            </pre>
              <blockquote type="cite">
                <blockquote type="cite">
                  <pre wrap="">I'd also maybe consider
                </pre>
                </blockquote>
              </blockquote>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">dropping the Spring prefix, as it's in a 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <blockquote type="cite">
              <blockquote type="cite">
                <blockquote type="cite">
                  <pre wrap="">package called spring?
=&gt;
                </pre>
                </blockquote>
              </blockquote>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">org.drools.spring.KnowledgeAgentFactoryBean
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <blockquote type="cite">
              <blockquote type="cite">
                <pre wrap="">My worry here is it might be a
              </pre>
              </blockquote>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">duplicate of the same name used in 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <blockquote type="cite">
              <blockquote type="cite">
                <pre wrap="">the future - although it'll be in
              </pre>
              </blockquote>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">a different package namespace, 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <blockquote type="cite">
              <blockquote type="cite">
                <pre wrap="">it's still not good practice.
              </pre>
              </blockquote>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">Anyone else have any opinions on this?
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <blockquote type="cite">
              <pre wrap="">Good point, prefixing it with Spring
            </pre>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">can't hurt :)
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">I'm just wondering about
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">KnowledgeBuilderFactory and 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">KnowledgeBaseFactory. While it makes sense to
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">put the 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">KnowledgeAgentFactory into spring, does it
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">make sense for those 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">other factories? What are they gonna do other
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">than return 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">KnowledgeBuilder or a KnowledgeBase, only
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">possible advantage is that 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">it would allow spring to inject the
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">KnowledgeBuilderConfiguration 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">and KnowledgeBaseConfiguration. And ideas?

          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap=""><a moz-do-not-send="true"
 class="moz-txt-link-freetext"
 href="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/KnowledgeBuilderFactory.java</a>

    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap=""><a moz-do-not-send="true"
 class="moz-txt-link-freetext"
 href="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/builder/KnowledgeBuilder.java</a>

    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap=""><a moz-do-not-send="true"
 class="moz-txt-link-freetext"
 href="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/KnowledgeBaseFactory.java</a>

    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap=""><a moz-do-not-send="true"
 class="moz-txt-link-freetext"
 href="http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java">http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java</a>

    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">This is typically how those two factories are
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">used:
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">KnowledgeBuilder kbuilder = 
KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.addResource( new URL(
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap=""><a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E" href="file://myrules.drl">"file://myrules.drl"</a> ),
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">                                 
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">KnowledgeType.DRL);
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">KnowledgeBase kbase =
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">KnowledgeBaseFactory.newKnowledgeBase();
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">If we use spring to automate the adding of
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">resources, that's pretty 
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">much what the agent is doing anyway, so
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">wouldn't that be pointless?
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">Mark


          </pre>
            <blockquote type="cite">
              <pre wrap="">            </pre>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">_______________________________________________
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <blockquote type="cite">
              <pre wrap="">rules-dev mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>

            </pre>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap=""><a moz-do-not-send="true"
 class="moz-txt-link-freetext"
 href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <blockquote type="cite">
              <pre wrap="">            </pre>
            </blockquote>
            <pre wrap="">
          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap="">_______________________________________________
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <blockquote type="cite">
            <pre wrap="">rules-dev mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>

          </pre>
          </blockquote>
        </blockquote>
      </blockquote>
      <pre wrap=""><a moz-do-not-send="true"
 class="moz-txt-link-freetext"
 href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
    </pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">_______________________________________________
rules-dev mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>


        </pre>
        </blockquote>
        <pre wrap="">_______________________________________________
rules-dev mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>


      </pre>
      </blockquote>
      <pre wrap="">_______________________________________________
rules-dev mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
    </pre>
    </blockquote>
    <pre wrap=""><!---->

      
_______________________________________________
rules-dev mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>


  </pre>
  </blockquote>
  <br>
  <pre wrap="">
<hr size="4" width="90%">
_______________________________________________
rules-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
  </pre>
</blockquote>
<br>
</body>
</html>