Re: [rules-users] Concurrency problem in PackageClassLoader

2011-09-28 Thread S_Kumar_P
I also was getting this error. I brought out package building logic to execute 
once, and KnowledgeSession related logic to repeat the required number of times.

Seems there required some delay in preparing rules related classes into one 
package during iteration and loading the same. Above step was working fine for 
me.

Pseudo code:

  KnowledgeBuilder kbuilder = 
KnowledgeBuilderFactory.newKnowledgeBuilder();

  // this will parse and compile in one step

  // get the compiled packages (which are serializable)
  Collection pkgs = null;

  // add the packages to a knowledgebase (deploy the knowledge packages).
  KnowledgeBase kbase = null;

  StatefulKnowledgeSession ksession = null;
  // constructor to be called once
public RuleEngine (byte[] rules) {

kbuilder.add(ResourceFactory.newByteArrayResource(rules),ResourceType.DRL);
//  Check the builder for errors
if (kbuilder.hasErrors()) {
  System.out.println(kbuilder.getErrors().toString());
  throw new RuntimeException("Unable to compile drl.");
}
pkgs = kbuilder.getKnowledgePackages();

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

// this method will be called required number of times
  public void fire(Object obj) {

ksession = kbase.newStatefulKnowledgeSession();
ksession.addEventListener(new DebugAgendaEventListener());
ksession.addEventListener(new DebugWorkingMemoryEventListener());

// setup the audit logging
//KnowledgeRuntimeLogger logger = 
KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "log/drools.log");

ksession.insert(obj);

ksession.fireAllRules();

//logger.close();

ksession.dispose();
  }


Check this out.


Thanks & Regards
Santhosh Pallerla

From: rules-users-boun...@lists.jboss.org 
[mailto:rules-users-boun...@lists.jboss.org] On Behalf Of nicolas
Sent: Thursday, September 29, 2011 8:09 AM
To: rules-users@lists.jboss.org
Subject: [rules-users] Concurrency problem in PackageClassLoader

Hi,

We are using a single (Drools 5.1.1) Stateless Sessions for the parallel 
processing of thousands of facts.

>From time to time we experienced the following error :

org.drools.runtime.rule.ConsequenceException: rule: Priorite - Groupe: 
TMK2612G01, P10

  at 
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
  at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:927)
  at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:856)
  at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1071)
  at 
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:785)
  at 
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:751)
  at 
org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)
  at 
acme.srv.ept.service.impl.traitement.MoteurTraitementDemandes.traiterDemande(MoteurTraitementDemandes.java:121)
(...)
Caused by: java.util.ConcurrentModificationException
  at java.util.HashMap$AbstractMapIterator.checkConcurrentMod(Unknown 
Source)
  at java.util.HashMap$AbstractMapIterator.makeNext(Unknown Source)
  at java.util.HashMap$KeyIterator.next(Unknown Source)
  at java.util.HashMap.analyzeMap(Unknown Source)
  at java.util.HashMap.rehash(Unknown Source)
  at java.util.HashMap.rehash(Unknown Source)
  at java.util.HashMap.putImpl(Unknown Source)
  at java.util.HashMap.put(Unknown Source)
  at 
org.drools.rule.JavaDialectRuntimeData$PackageClassLoader.loadClass(JavaDialectRuntimeData.java:503)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:609)
  at  
acme.srv.ept.regle.Rule_Priorite___Groupe__TMK2612G01__P10_0DefaultConsequenceInvoker.evaluate(Rule_Priorite___Groupe__TMK2612G01__P10_0DefaultConsequenceInvoker.java:29)
  at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:917)
  ... 49 more

We get the same error when we used a pool of Stateless Sessions (serial access) 
based on the same KnowledgeBase for the processing.


Thanks,
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Getting Exception while running rules continuously on the Event Streams from Mule Component.

2011-09-27 Thread S_Kumar_P
I also was getting this error. I brought out package building logic to execute 
once, and KnowledgeSession realted logic to repeat the required number of times.

Seems there required some delay in preparing rules related classes into one 
package during iteration. Above step was working fine for me.

Pseudo code:

  KnowledgeBuilder kbuilder = 
KnowledgeBuilderFactory.newKnowledgeBuilder();

  // this will parse and compile in one step

  // get the compiled packages (which are serializable)
  Collection pkgs = null;

  // add the packages to a knowledgebase (deploy the knowledge packages).
  KnowledgeBase kbase = null;

  StatefulKnowledgeSession ksession = null;
  // constructor to be called once
public RuleEngine (byte[] rules) {

kbuilder.add(ResourceFactory.newByteArrayResource(rules),ResourceType.DRL);
//  Check the builder for errors
if (kbuilder.hasErrors()) {
  System.out.println(kbuilder.getErrors().toString());
  throw new RuntimeException("Unable to compile drl.");
}
pkgs = kbuilder.getKnowledgePackages();

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

// this method will be called required number of times
  public void fire(Object obj) {

ksession = kbase.newStatefulKnowledgeSession();
ksession.addEventListener(new DebugAgendaEventListener());
ksession.addEventListener(new DebugWorkingMemoryEventListener());

// setup the audit logging
//KnowledgeRuntimeLogger logger = 
KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "log/drools.log");

ksession.insert(obj);

ksession.fireAllRules();

//logger.close();

ksession.dispose();
  }


Check this out.

Thanks & Regards
Santhosh
From: rules-users-boun...@lists.jboss.org 
[mailto:rules-users-boun...@lists.jboss.org] On Behalf Of Wolfgang Laun
Sent: Tuesday, September 27, 2011 4:10 PM
To: Rules Users List
Subject: Re: [rules-users] Getting Exception while running rules continuously 
on the Event Streams from Mule Component.

Drools version?

Looks like a bug, I've seen similar NPE reports.

-W
On 27 September 2011 12:23, Hari Kishan 
mailto:harikishan.tamm...@pass-consulting.com>>
 wrote:
Please find attached the rule Code (.drl) below.

Frequently getting this below Exception while running rules.

Exception caught while executing action:
org.drools.reteoo.PropagationQueuingNode$PropagateAction@41c317

java.lang.NullPointerException

 at org.drools.util.LeftTupleList.toArray(LeftTupleList.java:106)

 at org.drools.util.LeftTupleList.toArray(LeftTupleList.java:11)

 at org.drools.reteoo.CollectNode.assertObject(CollectNode.java:256)

 at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:42)

 at
org.drools.reteoo.RightInputAdapterNode.assertLeftTuple(RightInputAdapterNode.java:135)

 at
org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:117)

 at
org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:28)

 at org.drools.reteoo.FromNode.evaluateAndPropagate(FromNode.java:156)

 at org.drools.reteoo.FromNode.assertLeftTuple(FromNode.java:104)

 at
org.drools.reteoo.CompositeLeftTupleSinkAdapter.doPropagateAssertLeftTuple(CompositeLeftTupleSinkAdapter.java:145)

 at
org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateAssertLeftTuple(CompositeLeftTupleSinkAdapter.java:39)

 at org.drools.reteoo.JoinNode.assertObject(JoinNode.java:175)

 at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:42)

 at
org.drools.reteoo.PropagationQueuingNode$AssertAction.execute(PropagationQueuingNode.java:326)

 at
org.drools.reteoo.PropagationQueuingNode.propagateActions(PropagationQueuingNode.java:221)

 at
org.drools.reteoo.PropagationQueuingNode$PropagateAction.execute(PropagationQueuingNode.java:394)

 at
org.drools.common.AbstractWorkingMemory.executeQueuedActions(AbstractWorkingMemory.java:1486)

 at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:158)

 at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:122)

 at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:80)

 at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:28)

 at org.mule.module.drools.Drools.assertEvent(Drools.java:165)

 at org.mule.module.bpm.Rules.handleEvent(Rules.java:131)

 at org.mule.module.bpm.RulesComponent.doInvoke(RulesComponent.java:84)

 at
org.mule.component.AbstractComponent.invokeIn

[rules-users] Facing an inconsistent error executing rules during runtime

2011-09-23 Thread S_Kumar_P
Hi,

I am getting an error at inconsistent intervals while executing one scheduled 
task, which uses rules, in Websphere AS. Below is the error trace,

[9/22/11 8:57:59:316 CDT] 004d SystemErr R Caused by: 
java.lang.ClassNotFoundException: 
autoclassification.Rule_10___10_Auto_Classification_0DefaultConsequenceInvoker
at java.lang.Class.forNameImpl(Native Method)
at java.lang.Class.forName(Class.java:163)
at 
org.drools.rule.DroolsCompositeClassLoader.loadClass(DroolsCompositeClassLoader.java:91)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at 
org.drools.rule.JavaDialectRuntimeData.wire(JavaDialectRuntimeData.java:312)
at 
org.drools.rule.JavaDialectRuntimeData.reload(JavaDialectRuntimeData.java:379)
at 
org.drools.rule.JavaDialectRuntimeData.onBeforeExecute(JavaDialectRuntimeData.java:139)
at 
org.drools.rule.DialectRuntimeRegistry.onBeforeExecute(DialectRuntimeRegistry.java:132)
at 
org.drools.compiler.PackageBuilder.reloadAll(PackageBuilder.java:683)
at 
org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:641)
at 
org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:266)
at 
org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:458)
at 
org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:28)
at 
com.dell.compliance.middleware.ruleengine.RuleEngine.fire(RuleEngine.java:43)

The rules are:
package autoclassification;

import com.dell.compliance.middleware.business.Part;
import java.util.Map;

function boolean like(String masterData, String transData) {
boolean result = false;

if (masterData == null) {
return result;
}
if (transData != null && transData.trim().length() > 0) {
if (transData.trim().startsWith('%')
&& !transData.trim().endsWith('%')) {
result = masterData.endsWith(removeChar(transData));
}
else if (!transData.trim().startsWith('%')
&& transData.trim().endsWith('%')) {
result = masterData.startsWith(removeChar(transData));
}
else if (transData.trim().startsWith('%')
&& transData.trim().endsWith('%')) {
result = masterData.contains(removeChar(transData));
} else {
result = masterData.equals(transData);
}
}

return result;
}

function String removeChar(String transData) {
String str = transData.replaceAll('%', '');
return str;
}


function boolean validateTechAttribute(Map taMap, String attrNames, String 
attrVals) {
boolean result = false;

   if (attrNames == null || attrVals == null) {
return true;
}

 if(taMap == null){
return false;
}

String[] attrs = attrNames.split('[|]');
String[] values = attrVals.split('[|]');
String attr = null;
String value = null;
String attrVal = null;
for (int i = 0; i < attrs.length; i++) {
attr = attrs[i] != null ? attrs[i].trim().toUpperCase() : '';
value = values[i] != null ? values[i].trim().toUpperCase() : '';
if (taMap.containsKey(attr)) {
attrVal = (String) taMap.get(attr);
result = like(attrVal, value);
if(result==false){
return result;
}
} else {
return false;
}
}
return result;
}
rule '2 - 2_Auto Classification'
when
part : Part(eval (like(partType,'Hard Drive (NBK)')) , eval 
(like(partClass,'Drive,Hard')) , eval 
(validateTechAttribute(techAttrList,'Placement|Encrypted Drive','Internal|No')))
then
part.setPartDesc('HARD DRIVE-INTERNAL');

update(part);
drools.getWorkingMemory().clearAgenda();
end

rule '3 - 3_Auto Classification'
when
part : Part(eval (like(partType,'Hard Drive (NBK)')) , eval 
(like(partClass,'Drive,Hard')) , eval 
(validateTechAttribute(techAttrList,'Placement|Encrypted 
Drive','Internal|Yes')))
then
part.setPartDesc('HARD DRIVE-INTERNAL-ENCRYPTED');

update(part);
drools.getWorkingMemory().clearAgenda();
end

--
--
--
rule '9 - 9_Auto Classification'
when
part : Part(eval (like(partType,'Card,Network')) , eval 
(like(partClass,'CARD,NETWORK')) , eval 
(validateTechAttribute(techAttrList,'Wireless |SWIncludesEncryption','no|Yes')))
then
part.setPartDesc('POPULATED PCB-NETWORK-ADAPTER-ENCRYPTED');

update(part);
drools.getWorkingMemory().clearAgenda();
end

rule '10 - 10_Auto Classification'
when
part : Part(eval (like(partType,'Card,Wireless')) , eval 
(like(pa