Невозможно создать экземпляр службы для класса 'org.drools.builder.KnowledgeBuilderFactoryService'

1

Я обновил от Drools 5.5.0 до Drools 6.1.0.

И когда я выполняю свой код, у меня есть эта проблема.

java.lang.IllegalArgumentException: Unable to instantiate service for Class 'org.drools.builder.KnowledgeBuilderFactoryService'
    at org.drools.util.ServiceRegistryImpl.get(ServiceRegistryImpl.java:166)
    at org.drools.builder.KnowledgeBuilderFactory.loadServiceFactory(KnowledgeBuilderFactory.java:130)
    at org.drools.builder.KnowledgeBuilderFactory.getKnowledgeBuilderServiceFactory(KnowledgeBuilderFactory.java:124)
    at org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilder(KnowledgeBuilderFactory.java:46)
    at com.drools.optimizer.AppExpertSystem.readKnowledgeBase(AppExpertSystem.java:133)
    at com.drools.optimizer.AppExpertSystem.loadKnowledgeBase(AppExpertSystem.java:119)
    at com.drools.optimizer.AppExpertSystem.<init>(AppExpertSystem.java:56)
    at eventlauncher.OptimizerLauncher.NuevoEscenario(OptimizerLauncher.java:57)
    at eventlauncher.DemoPruebas.main(DemoPruebas.java:18)
Caused by: java.lang.IllegalArgumentException: Unable to instantiate 'org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl'
    at org.drools.util.ServiceRegistryImpl$ReflectionInstantiator.newInstance(ServiceRegistryImpl.java:217)
    at org.drools.util.ServiceRegistryImpl$ReflectionInstantiator.call(ServiceRegistryImpl.java:209)
    at org.drools.util.ServiceRegistryImpl.get(ServiceRegistryImpl.java:164)
    ... 8 more
Caused by: java.lang.ClassNotFoundException: org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.drools.util.ServiceRegistryImpl$ReflectionInstantiator.newInstance(ServiceRegistryImpl.java:214)
    ... 10 more
Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalArgumentException: Unable to instantiate service for Class 'org.drools.builder.KnowledgeBuilderFactoryService'
    at com.drools.optimizer.AppExpertSystem.loadKnowledgeBase(AppExpertSystem.java:126)
    at com.drools.optimizer.AppExpertSystem.<init>(AppExpertSystem.java:56)
    at eventlauncher.OptimizerLauncher.NuevoEscenario(OptimizerLauncher.java:57)
    at eventlauncher.DemoPruebas.main(DemoPruebas.java:18)
Caused by: java.lang.IllegalArgumentException: Unable to instantiate service for Class 'org.drools.builder.KnowledgeBuilderFactoryService'
    at org.drools.util.ServiceRegistryImpl.get(ServiceRegistryImpl.java:166)
    at org.drools.builder.KnowledgeBuilderFactory.loadServiceFactory(KnowledgeBuilderFactory.java:130)
    at org.drools.builder.KnowledgeBuilderFactory.getKnowledgeBuilderServiceFactory(KnowledgeBuilderFactory.java:124)
    at org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilder(KnowledgeBuilderFactory.java:46)
    at com.drools.optimizer.AppExpertSystem.readKnowledgeBase(AppExpertSystem.java:133)
    at com.drools.optimizer.AppExpertSystem.loadKnowledgeBase(AppExpertSystem.java:119)
    ... 3 more
Caused by: java.lang.IllegalArgumentException: Unable to instantiate 'org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl'
    at org.drools.util.ServiceRegistryImpl$ReflectionInstantiator.newInstance(ServiceRegistryImpl.java:217)
    at org.drools.util.ServiceRegistryImpl$ReflectionInstantiator.call(ServiceRegistryImpl.java:209)
    at org.drools.util.ServiceRegistryImpl.get(ServiceRegistryImpl.java:164)
    ... 8 more
Caused by: java.lang.ClassNotFoundException: org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.drools.util.ServiceRegistryImpl$ReflectionInstantiator.newInstance(ServiceRegistryImpl.java:214)
    ... 10 more

Строкой 133, в которой находится ошибка, является жирная линия следующего метода:

private static KnowledgeBase readKnowledgeBase() throws Exception {

        **KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();**

        kbuilder.add(ResourceFactory.newClassPathResource(CTES.RULES),
                ResourceType.DRL);

        KnowledgeBuilderErrors errors = kbuilder.getErrors();

        if (errors.size() > 0) {
            for (KnowledgeBuilderError error : errors) {
                System.err.println(error);
            }
            throw new IllegalArgumentException("Could not parse knowledge.");
        }
        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
        KnowledgeBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
        config.setOption(EventProcessingOption.STREAM );

        return kbase;
    }

У меня нет изменений в моей строке кода, и я не понимаю, что это происходит :(

Кто-нибудь может мне помочь?

С наилучшими пожеланиями!

  • 0
    Caused by: java.lang.ClassNotFoundException: org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl ключа является Caused by: java.lang.ClassNotFoundException: org.drools.builder.impl.KnowledgeBuilderFactoryServiceImpl . Вы пропустили какую-то часть библиотеки после обновления?
  • 0
    Я поместил все библиотеки в моем проекте :( (все библиотеки, которые находятся внутри drools-distribution-6.1.0.Final \ binaries)
Показать ещё 4 комментария
Теги:
drools

2 ответа

3
Лучший ответ

Здесь простую компиляцию и создание сеанса в соответствии с 6.x. См. Javadoc для получения дополнительных опций и подробностей.

import org.kie.api.*;
import org.kie.api.builder.*;
import org.kie.api.runtime.*;

KieServices ks = KieServices.Factory.get();
KieFileSystem kfs = ks.newKieFileSystem();
FileInputStream fis = new FileInputStream( CTES.RULES );
kfs.write( "src/main/resources/sale.drl",
            ks.getResources().newInputStreamResource( fis ) );
KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll();
Results results = kieBuilder.getResults();
if( results.hasMessages( Message.Level.ERROR ) ){
     System.out.println( results.getMessages() );
     throw new IllegalStateException( "### errors ###" );
}
KieContainer kieContainer =
     ks.newKieContainer( ks.getRepository().getDefaultReleaseId() );

KieBaseConfiguration config = ks.newKieBaseConfiguration();
config.setOption( EventProcessingOption.STREAM );
KieBase kieBase = kieContainer.newKieBase( config );
KieSession kieSession = kieBase.newKieSession();
0

Я столкнулся с той же проблемой. Я обновил версию org.drools до 6.1.0.Final в pom.xml. Теперь он работает нормально.

  • 0
    Вы можете поделиться записью зависимости POM для версии 6.1.0?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню