All,

 

Are DSL and DSLR files supported by the KnowledgeAgent / Changeset code.  Here’s the details of my test case:

 

I have a Changeset file I’m trying to load which looks like the following:

 

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

<change-set xmlns='http://drools.org/drools-5.0/change-set'

             xmlns:xs='http://www.w3.org/2001/XMLSchema-instance' >

   <add>

        <resource source="classpath:com/test/general/" type="DSL" />

        <resource source="classpath:com/test/general/" type="DSLR" />

   </add>

</change-set>

 

There’s a single DSL and a single DSLR file in this folder.   I’m loading the change set as follows:

 

KnowledgeAgent ka = KnowledgeAgentFactory.newKnowledgeAgent(agentName);

      ka.applyChangeSet(ResourceFactory.newClassPathResource(agentName + "-changeset.xml", getClass()));

 

When I run this code, the logger suggests the DSL and DSLR are being loaded and compiled:

 

[2009:10:299 16:10:52:info] KnowledgAgent created, with configuration:

monitorChangeSetEvents=true scanResources=true scanDirectories=true

++ Constructing and applying changeSet: dsl-test

[2009:10:299 16:10:52:info] KnowledegAgent has started listening for ChangeSet notifications

(null: 3, 68): cvc-elt.1: Cannot find the declaration of element 'change-set'.

[2009:10:299 16:10:317:info] KnowledgAgent applying ChangeSet

[2009:10:299 16:10:317:debug] KnowledgeAgent subscribing to directory=[ClassPathResource path='com/test/general/']

[2009:10:299 16:10:317:debug] ResourceChangeNotification subscribing listener=org.drools.agent.impl.KnowledgeAgentImpl@b9b618 to resource=[ClassPathResource path='com/test/general/']

[2009:10:299 16:10:317:debug] ResourceChangeScanner subcribing notifier=org.drools.io.impl.ResourceChangeNotifierImpl@61ec49 to resource=[ClassPathResource path='com/test/general/']

[2009:10:299 16:10:317:debug] KnowledgeAgent subscribing to directory content resource=[FileResource file='C:\bea\user_projects\workspaces\alerts\rules-kb\test-kb\target\test-classes\com\test\general\test.dsl']

[2009:10:299 16:10:317:debug] ResourceChangeNotification subscribing listener=org.drools.agent.impl.KnowledgeAgentImpl@b9b618 to resource=[FileResource file='C:\bea\user_projects\workspaces\alerts\rules-kb\test-kb\target\test-classes\com\test\general\test.dsl']

[2009:10:299 16:10:317:debug] ResourceChangeScanner subcribing notifier=org.drools.io.impl.ResourceChangeNotifierImpl@61ec49 to resource=[FileResource file='C:\bea\user_projects\workspaces\alerts\rules-kb\test-kb\target\test-classes\com\test\general\test.dsl']

[2009:10:299 16:10:317:debug] KnowledgeAgent subscribing to directory content resource=[FileResource file='C:\bea\user_projects\workspaces\alerts\rules-kb\test-kb\target\test-classes\com\test\general\test-dsl.dslr']

[2009:10:299 16:10:317:debug] ResourceChangeNotification subscribing listener=org.drools.agent.impl.KnowledgeAgentImpl@b9b618 to resource=[FileResource file='C:\bea\user_projects\workspaces\alerts\rules-kb\test-kb\target\test-classes\com\test\general\test-dsl.dslr']

[2009:10:299 16:10:317:debug] ResourceChangeScanner subcribing notifier=org.drools.io.impl.ResourceChangeNotifierImpl@61ec49 to resource=[FileResource file='C:\bea\user_projects\workspaces\alerts\rules-kb\test-kb\target\test-classes\com\test\general\test-dsl.dslr']

[2009:10:299 16:10:317:debug] KnowledgeAgent subscribing to directory=[ClassPathResource path='com/hmc/test/general/']

[2009:10:299 16:10:317:debug] ResourceChangeNotification subscribing listener=org.drools.agent.impl.KnowledgeAgentImpl@b9b618 to resource=[ClassPathResource path='com/hmc/test/general/']

[2009:10:299 16:10:317:debug] KnowledgeAgent ChangeSet requires KnowledgeBuilder

[2009:10:299 16:10:317:debug] KnowledgeAgent rebuilding KnowledgeBase using ChangeSet

[2009:10:299 16:10:317:debug] KnowledgeAgent building resource=[FileResource file='C:\bea\user_projects\workspaces\alerts\rules-kb\test-kb\target\test-classes\com\test\general\test.dsl']

[2009:10:299 16:10:333:debug] KnowledgeAgent building resource=[FileResource file='C:\bea\user_projects\workspaces\alerts\rules-kb\test-kb\target\test-classes\com\test\general\test-dsl.dslr']

[2009:10:299 16:10:333:info] KnowledgeAgent new KnowledgeBase now built and in use

 

However after load is completed I try to run the following code:

     

      System.out.println("KB Info");

      Collection<KnowledgePackage> pkgs = ka.getKnowledgeBase().getKnowledgePackages();

      for (KnowledgePackage kp : pkgs) {

            for (Rule rule : kp.getRules()) {

                  System.out.println("Rule: " + rule.getName() + ", " + ule.getPackageName());

                        for (String attribs : rule.listMetaAttributes())

                              System.out.println("---- " + attribs);

                  }

            }

            }

 

I get NO output (except of course “KB Info”).

 

If I initialize the knowledgebase like this:

 

            KnowledgeBuilder kbuilder = KnowledgeBuilderFactory

                        .newKnowledgeBuilder();

            kbuilder.add(ResourceFactory

                        .newClassPathResource("com/test/general/test.dsl"),

                        ResourceType.DSL);

 

            kbuilder.add(ResourceFactory

                        .newClassPathResource("com/test/general/test-dsl.dslr"),

                        ResourceType.DSLR);

 

            if (kbuilder.hasErrors()) {

                  throw new Exception(kbuilder.getErrors().toString());

            }

 

            KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();

            kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

      }

 

… and run the same output code I get a list of the rules that were loaded.

 

Any clues why the different behavior?

 

Macon