Uploaded image for project: 'JBRULES'
  1. JBRULES
  2. JBRULES-2377

Problems with DSL / DSLR files when used with a KnowledgeAgent / Change Sets

    XMLWordPrintable

Details

    Description

      I tried to address this on the Drools Mailing list but did not receive an answer. See:
      Mailing list message threads: "[rules-users] DSL, DSLR and Changesets...", "[rules-users] Can DSL / DSLR be loaded in a changeset?"


      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?

      Attachments

        Issue Links

          Activity

            People

              esteban.aliverti@gmail.com Esteban Aliverti (Inactive)
              mpegram3rd Macon Pegram (Inactive)
              Votes:
              10 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: