0

I am using drools decision tables in my java project. This project is added into another spring maven project as a dependency. Following code is working fine in localhost. But when I deploy my Spring project in remote server it gives following exception. In my Drools project, rules1.xls & rules2.xls files are including as resources inside src/main/resources folder.

package com.my.project;

import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.Message;
import org.kie.api.builder.Results;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import com.codegen.rm.drools.model.BusinessDetail;

public class MarkupCalculation
{

public void runAlgorithm( BusinessDetail businessDetail, int algoId )
{
    String ruleName;
    if ( algoId == 1 ) // First Algorithm
    {
        ruleName = "rules1.xls";
    }
    else
    { // second algorithm
        ruleName = "rules2.xls";
    }

    try
    {
        KieServices kieServices = KieServices.Factory.get();
        KieFileSystem kfs = kieServices.newKieFileSystem();
        kfs.write( kieServices.getResources().newClassPathResource( ruleName ) );

        KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();
        Results results = kieBuilder.getResults();
        if ( results.hasMessages( Message.Level.ERROR ) )
        {
            System.out.println( results.getMessages() );
            throw new IllegalStateException( "### errors ###" );
        }
        KieContainer kieContainer = kieServices
                .newKieContainer( kieServices.getRepository().getDefaultReleaseId() );
        // KieBase kieBase = kieContainer.getKieBase();
        KieSession kieSession = kieContainer.newKieSession();
        kieSession.insert( businessDetail );
        kieSession.fireAllRules();
    }
    catch ( Exception e )
    {
        e.printStackTrace();
    }

}
}

Exception

May 17, 2016 11:55:56 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/BackEnd] threw exception [Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.drools.core.util.IoUtils.readBytesFromInputStream(Ljava/io/InputStream;)[B] with root cause
java.lang.NoSuchMethodError: org.drools.core.util.IoUtils.readBytesFromInputStream(Ljava/io/InputStream;)[B
    at org.drools.compiler.kie.builder.impl.KieFileSystemImpl.write(KieFileSystemImpl.java:73)

My drools project is added into other java project as a jar.

Any suggestion would be appreciated.

Rose18
  • 2,892
  • 8
  • 47
  • 98
  • The most likely possibility is that you have an old version of drools-core-{Version}.jar lying around, very likely from some 5.x. version. Clean up the classpath on the server. – laune May 18 '16 at 06:56
  • Hmm. Agreed to what are you saying. My approach is not the correct one. – asg May 18 '16 at 07:01

0 Answers0