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] 0000004d 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(partClass,'CARD,NETWORK')) , eval
(validateTechAttribute(techAttrList,'Wireless
|SWIncludesEncryption','yes|Yes')))
then
part.setPartDesc('POPULATED PCB-NETWORK WIRELESS WLAN');
update(part);
drools.getWorkingMemory().clearAgenda();
end
And the Code loading rules is in RuleEngine.java as:
public void fire(byte[] rules, Object obj) {
final KnowledgeBuilder kbuilder =
KnowledgeBuilderFactory.newKnowledgeBuilder();
// this will parse and compile in one step
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.");
}
// 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.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();
}
We used Drools 5.1,
Please help me resolve as soon as possible.
Thanks & Regards
Santhosh
Show replies by date