2 Replies Latest reply on Mar 11, 2012 10:46 PM by devilkazuya99

    Unknown resource type: null when call kagent.applyChangeSet( resource ) the second time.

    devilkazuya99

                URL url = new URL(CHANGE_SET_URL);           UrlResource resource = (UrlResource) ResourceFactory.newUrlResource( url );                           KnowledgeAgentConfiguration agentConfig = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();              agentConfig.setProperty("drools.agent.newInstance", "true");              agentConfig.setProperty("drools.agent.scanDirectories", "false");                KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent( "MyKnowledgeAgent", agentConfig );                                KnowledgeAgentEventListener kaListener = new KnowledgeAgentEventListener() {                                          @Override                     public void resourceCompilationFailed(ResourceCompilationFailedEvent arg0) {                          logger.debug("resourceCompilationFailed");                     }                                          @Override                     public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent arg0) {                          logger.debug("knowledgeBaseUpdated");                     }                                          @Override                     public void beforeResourceProcessed(BeforeResourceProcessedEvent arg0) {                          logger.debug("beforeResourceProcessed");                     }                                          @Override                     public void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent arg0) {                          logger.debug("beforeChangeSetProcessed");                     }                                          @Override                     public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent arg0) {                          logger.debug("beforeChangeSetApplied");                     }                                          @Override                     public void afterResourceProcessed(AfterResourceProcessedEvent arg0) {                          logger.debug("afterResourceProcessed");                     }                                          @Override                     public void afterChangeSetProcessed(AfterChangeSetProcessedEvent arg0) {                          logger.debug("afterChangeSetProcessed");                     }                                          @Override                     public void afterChangeSetApplied(AfterChangeSetAppliedEvent arg0) {                          logger.debug("afterChangeSetApplied");                     }                };                                kagent.addEventListener(kaListener);                                kagent.applyChangeSet( resource );                                kagent.monitorResourceChangeEvents(true);

       

      The code above is ok but when I call

       

      kagent.applyChangeSet( resource );

       

      again then I get

      Exception in thread "Thread-3" java.lang.RuntimeException: Unknown resource type: null
           at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:686)
           at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:37)
           at org.drools.agent.impl.KnowledgeAgentImpl.createPackageFromResource(KnowledgeAgentImpl.java:712)
           at org.drools.agent.impl.KnowledgeAgentImpl.addResourcesToKnowledgeBase(KnowledgeAgentImpl.java:1002)
           at org.drools.agent.impl.KnowledgeAgentImpl.rebuildResources(KnowledgeAgentImpl.java:785)
           at org.drools.agent.impl.KnowledgeAgentImpl.buildKnowledgeBase(KnowledgeAgentImpl.java:657)
           at org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:190)
           at org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:169)
           at com.geneoz.procedureengine.KnowledgeAgentTest$ResourcePoller.run(KnowledgeAgentTest.java:68)
           at java.lang.Thread.run(Thread.java:680)
        • 1. Re: Unknown resource type: null when call kagent.applyChangeSet( resource ) the second time.
          eaa

          Can you share with us the change-set you are using?

           

          Best Regards,

          • 2. Re: Unknown resource type: null when call kagent.applyChangeSet( resource ) the second time.
            devilkazuya99

            Here it is:

            <change-set xmlns="http://drools.org/drools-5.0/change-set" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd">

             

             

                <add>
                    <resource source="http://192.168.10.13/drools/JavaInteractiveFlow.rf" type="DRF"/>

                </add>

            </change-set>

                 

            Ad the rf file is:

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

            <process xmlns="http://drools.org/drools-5.0/process"

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

                     xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"

                     type="RuleFlow" name="flow" id="interactiveJava" package-name="com.geneoz.procedureengine" >

             

              <header>

                <variables>

                  <variable name="smart_guy" >

                    <type name="org.drools.process.core.datatype.impl.type.StringDataType" />

                    <value>john</value>

                  </variable>

                </variables>

              </header>

             

              <nodes>

                <start id="1" name="Start" x="204" y="12" width="48" height="48" />

                <end id="2" name="End" x="204" y="314" width="48" height="48" />

                <actionNode id="3" name="Question" x="45" y="157" width="130" height="48" >

                    <action type="expression" dialect="java" >System.out.println("Current name is " + smart_guy);

            System.out.println("Who is the smartest man in the world?");

             

            java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));

             

            String name = null;

             

            try {

            name = br.readLine();

            } catch (java.io.IOException e) {

            System.out.println("Error!");

            }

             

            kcontext.setVariable("smart_guy", name);

            System.out.println("Got " + name);</action>

                </actionNode>

                <split id="4" name="Gateway" x="205" y="229" width="49" height="49" type="2" >

                  <constraints>

                    <constraint toNodeId="2" toType="DROOLS_DEFAULT" name="correct" priority="1" type="code" dialect="java" >return smart_guy.equals("lim");</constraint>

                    <constraint toNodeId="5" toType="DROOLS_DEFAULT" name="incorrect" priority="2" type="rule" dialect="mvel" >eval(true)</constraint>

                  </constraints>

                </split>

                <actionNode id="5" name="Error message" x="312" y="156" width="123" height="45" >

                    <action type="expression" dialect="mvel" >System.out.println("Wrong you stupid! Try again.");</action>

                </actionNode>

                <join id="6" name="Gateway" x="204" y="96" width="49" height="49" type="2" />

              </nodes>

             

              <connections>

                <connection from="4" to="2" />

                <connection from="6" to="3" />

                <connection from="3" to="4" />

                <connection from="4" to="5" />

                <connection from="1" to="6" />

                <connection from="5" to="6" />

              </connections>

             

            </process>