Sudipta,

   I believe the problem is that you can't import classes from the default
package into your rules file, but I'm not sure.

   Try making Message a top level class (not an inner class) and put it in
a package (not the default one). Import it in the DRL and you shall be fine.

   We need a closer look at this before releasing next major final version.

   []s
   Edson


2007/4/5, Sudipta deb <[EMAIL PROTECTED]>:

Sir,

I want to run a simple drools example i.e. HelloWorldExample from command
line

My HelloWorldExample.java--->


import java.io.InputStreamReader;
import java.io.Reader;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
import org.drools.compiler.PackageBuilder;
import org.drools.rule.Package;
import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.compiler.*;
import java.lang.String;
import java.io.*;

/**
 * This is a sample file to launch a rule package from a rule source file.
 */


public class HelloWorldExample
{

    public static final void main(final String[] args)
    {
        try
        {

            //load up the rulebase
            final RuleBase ruleBase = loadRules();
            final WorkingMemory workingMemory = ruleBase.newWorkingMemory
();

            //go !
            final Message message = new Message();
            message.setMessage( "Hello World " );
            message.setStatus( Message.HELLO );
            workingMemory.assertObject( message );
            workingMemory.fireAllRules();

        }
        catch ( final Throwable t )
        {
            t.printStackTrace();
        }
    }

    public static RuleBase loadRules()
    {
          RuleBase ruleBase=null;
          try
          {

               String [] ruleFiles = new String [1];
               ruleFiles[0]  = "HelloWorld.drl";



               PackageBuilderConfiguration pkgBuilderCfg = new
PackageBuilderConfiguration();
               pkgBuilderCfg.setCompiler(
PackageBuilderConfiguration.JANINO);
               PackageBuilder builder = new PackageBuilder(pkgBuilderCfg);
               for( int i = 0, j = ruleFiles.length; i<j; i++ )
               {
                builder.addPackageFromDrl(new InputStreamReader(
HelloWorldExample.class.getResourceAsStream( ruleFiles[i] )) );
//HelloWorldExample.class.getResourceAsStream( "HelloWorld.drl" )
                //new InputStreamReader(getClass().getResourceAsStream(
ruleFiles[i] ) )
               }

               final Package pkg = builder.getPackage();
               ruleBase = RuleBaseFactory.newRuleBase();
               ruleBase.addPackage(pkg);


          }
          catch (Exception fe)
          {
               fe.printStackTrace();
          }
          return ruleBase;
     }

    /**
     * Please note that this is the "low level" rule assembly API.
     */
    private static RuleBase readRule() throws Exception
    {
        //read in the source
        final Reader source = new InputStreamReader(
HelloWorldExample.class.getResourceAsStream( "HelloWorld.drl" ) );

        //optionally read in the DSL (if you are using it).
        //Reader dsl = new InputStreamReader(
DroolsTest.class.getResourceAsStream( "/mylang.dsl" ) );

        //Use package builder to build up a rule package.
        //An alternative lower level class called "DrlParser" can also be
used...

        final PackageBuilder builder = new PackageBuilder();

        //this wil parse and compile in one step
        //NOTE: There are 2 methods here, the one argument one is for
normal DRL.
        builder.addPackageFromDrl( source );

        //Use the following instead of above if you are using a DSL:
        //builder.addPackageFromDrl( source, dsl );

        //get the compiled package (which is serializable)
        final Package pkg = builder.getPackage();

        //add the package to a rulebase (deploy the rule package).
        final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
        ruleBase.addPackage( pkg );
        return ruleBase;
    }

    public static class Message
    {
        public static final int HELLO   = 0;
        public static final int GOODBYE = 1;

        private String          message;

        private int             status;

        public String getMessage()
        {
            return this.message;
        }

        public void setMessage(final String message)
        {
            this.message = message;
        }

        public int getStatus()
        {
            return this.status;
        }

        public void setStatus(final int status)
        {
            this.status = status;
        }
    }


}

My HelloWorld.drl-->
package drools_test;

import HelloWorldExample.*;


rule "Hello World"
    when
        m : Message( status == Message.HELLO, message : message )
    then
        System.out.println( message );
        m.setMessage( "Goodbye cruel world" );
        m.setStatus( Message.GOODBYE );
        modify( m );
end

rule "GoodBye"
    no-loop true
    when
        m : Message( status == Message.GOODBYE, message : message )
    then
        System.out.println( message );
        m.setMessage( message );
end

Now compilation works absolutely fine but when i am trying to run it some
errors are coming

Warning: An error occurred compiling a semantic invoker. Errors should
have been reported elsewhere.
Warning: An error occurred compiling a semantic invoker. Errors should
have been reported elsewhere.
org.drools.rule.InvalidRulePackage: Rule Compilation error Class "
HelloWorldExample.Message" not found Class "HelloWorldExample.Message" not
found Class "java.lang.Object" has no method named "setMessage"
Exception:0
Rule Compilation error Class "HelloWorldExample.Message" not found Class "
HelloWorldExample.Message" not found Class "java.lang.Object" has no
method named "setMessage" Exception:0

    at org.drools.rule.Package.checkValidity(Unknown Source)
    at org.drools.common.AbstractRuleBase.addPackage(Unknown Source)
    at HelloWorldExample.loadRules(HelloWorldExample.java:68)
    at HelloWorldExample.main(HelloWorldExample.java:29)

I put all the jar files in the classpath. Please help me.

With regards,

Sudipta Deb.  (+919831606520)
Kolkata,India

------------------------------
Here�s a new way to find what you're looking for - Yahoo! 
Answers<http://us.rd.yahoo.com/mail/in/yanswers/*http://in.answers.yahoo.com/>


_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users




--
 Edson Tirelli
 Software Engineer - JBoss Rules Core Developer
 Office: +55 11 3124-6000
 Mobile: +55 11 9218-4151
 JBoss, a division of Red Hat @ www.jboss.com
_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to