Hi

 I would like to test the time taken to run a single rule (eg.
HelloWorldExample from Drools5.0 documentation) against large data size (i.e
the object inserted in ksession is 10,000). The .drl file is loaded only
once and i am looping the part where message object is created and set with
values and inserted into ksession for 10,000 times. The time taken was 10.7
secs on an average. Am i doing something wrong? Can i improve it in anyway?
Your help is appreciated.
thanks
ABRA

HelloWorld.drl :

package org.drools.examples
 
import org.drools.examples.HelloWorldExample.Message;

global java.util.List list
 
rule "Hello World"
    dialect "mvel"
        when
                m : Message( status == Message.HELLO, message : message)
        then
        System.out.println( message ); 
        modify ( m ) { message = "Goodbye cruel world",
                       status = Message.GOODBYE };                     
end
rule "Good Bye"
    dialect "java"
        when
                Message( status == Message.GOODBYE, message : message )
        then
                System.out.println( message );  
end



HelloWorldExample.java
/**
 * 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) throws Exception {
                final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
                                .newKnowledgeBuilder();

                // this will parse and compile in one step
                
kbuilder.add(ResourceFactory.newClassPathResource("HelloWorld.drl",
                                HelloWorldExample.class), ResourceType.DRL);

                // Check the builder for errors
                if (kbuilder.hasErrors()) {
                        System.out.println(kbuilder.getErrors().toString());
                        throw new RuntimeException("Unable to compile 
\"HelloWorld.drl\".");
                }

                // get the compiled packages (which are serializable)
                final Collection<KnowledgePackage> pkgs = kbuilder
                                .getKnowledgePackages();

                // add the packages to a knowledgebase (deploy the knowledge 
packages).
                final KnowledgeBase kbase = 
KnowledgeBaseFactory.newKnowledgeBase();
                kbase.addKnowledgePackages(pkgs);

                final StatefulKnowledgeSession ksession = kbase
                                .newStatefulKnowledgeSession();
                ksession.setGlobal("list", new ArrayList());

                ksession.addEventListener(new DebugAgendaEventListener());
                ksession.addEventListener(new 
DebugWorkingMemoryEventListener());

                // setup the audit logging
                KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory
                                .newFileLogger(ksession, "log/helloworld");
                long starttime = System.currentTimeMillis();
                for(int u=0;u<10000;u++)
                {
                final Message message = new Message();
                        message.setMessage("Hello World");
                        message.setStatus(Message.HELLO);
                        ksession.insert(message);
                        ksession.fireAllRules();
                }
                 long endtime = System.currentTimeMillis();
                System.out.println("execution time is "+(endtime-starttime));
                logger.close();

                ksession.dispose();
        }

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

                private int status;

                public Message() {

                }

                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;
                }
                
                public static Message doSomething(Message message) {
                        return message;
                }

                public boolean isSomething(String msg, List list) {
                        list.add(this);
                        return this.message.equals(msg);
                }
        }

}


-- 
View this message in context: 
http://old.nabble.com/Execution-time-for-drools5.0-against-large-data-size-tp26195944p26195944.html
Sent from the drools - user mailing list archive at Nabble.com.

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

Reply via email to