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