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

S_Kumar_P at DELLTEAM.com S_Kumar_P at DELLTEAM.com
Fri Sep 23 08:58:35 EDT 2011


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20110923/f97db25b/attachment.html 


More information about the rules-users mailing list