[rules-users] Performance hit in version 5.0?

Duane Rosengartner duane5000 at hotmail.com
Wed Nov 4 13:39:31 EST 2009


Group,
The following HelloWorld example is taken from the example code coming with the latest Drools downloads. One modification is the addition of the loop(10K times). Please note that the loading of the drl file is outside of this loop.  Our developer tells us that this same example runs in 300milliseconds in Drools 2.0.   Version 5.0 runs for 10 seconds. We have a large batch process that will suffer greatly if this is something we can't work around. Any ideas for performance gains in 5.0 will be greatly appreciated.

Duane
duane at proqualitysoft.com

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<Object>());

  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();
 }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20091104/d0757493/attachment.html 


More information about the rules-users mailing list