Yes, once you do:

kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

   Throw away your kbuilder and use a new one to add new rules. Obviously, keep the same kbase.

   []s
   Edson
  

2009/9/14 Justin King <justin.matthew.king@gmail.com>
Hi Edson, thanks for the response.

Are you sure about the no reusable kbuilder thing? If I dont reuse the same one It does not work for me. Inserting the new rule has no effect.

Thanks,

Justin



2009/9/15 Edson Tirelli <tirelli@post.com>


   Justin,

   This is a valid use case and should work just fine. Just make sure you your a new kbuilder instance every time. KnowledgeBuilders should not be reused, but when you add the knowledge package to the knowledge base, Drools will merge packages as necessary.

   If still not working, please add a testcase and create a JIRA and we will look into it.

   []s
   Edson

2009/9/9 Justin King <justin.matthew.king@gmail.com>
Hi,

We have a project where we are attempting to add new rules to an existing knowledgebase (read from a .drl file). We add them by using strings using the following code:

String rule = "rule \"GeneralClause-2\" " +
            "when " +
                "ObligationComplianceEvent(term == \"term2\", obligation == \"obligation1\", level == 2) " +
            "then " +
                "System.out.println(\"GeneralClause-2\");" +
                "contract1.setState(\"Hello\");" +
            "end";
           
 Resource ruleResource = ResourceFactory.newReaderResource((Reader) new StringReader(rule));
 kbuilder.add(ruleResource, ResourceType.DRL);
 kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

We do not even halt the currently running session to add the new rule (although halting and re-firing appears to make little difference). This appears to have strange effects. Some rules (specifically those that use 'accumulate' most of the time) will stop working after inserting the new rule at runtime, even though they are completely unrelated. The timing in which you add the new rule also seems to have an effect (e.g. before inserting some events, after. etc). We cant seem to come to any logical conclusion about the strange behavior our rules seem to give us.

My question is this: Is this a valid way to use Drools? Or are we somehow breaking something (perhaps the rete tree or something) behind the scenes by doing this? If so, is there a correct way?

Any input at all would be greatly appreciated as this is very critical to our project.

Cheers,

Justin

_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users




--
 Edson Tirelli
 JBoss Drools Core Development
 JBoss by Red Hat @ www.jboss.com

_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users



_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users




--
 Edson Tirelli
 JBoss Drools Core Development
 JBoss by Red Hat @ www.jboss.com