Drools与Android的集成

Drools与Android的集成,android,jboss,drools,rule-engine,Android,Jboss,Drools,Rule Engine,我正在尝试将Drools集成到我的一个应用程序中。由于缺乏在线文档,我面临着很多问题。早些时候,我正在努力解决依赖性问题,但后来我使用以下gradle命令解决了这个问题 compile 'org.kie:kie-api:6.1.0.Final' compile 'org.drools:drools-core:6.1.0.Final' compile 'org.drools:drools-compiler:6.1.0.Final' compile files('libs/drools-androi

我正在尝试将Drools集成到我的一个应用程序中。由于缺乏在线文档,我面临着很多问题。早些时候,我正在努力解决依赖性问题,但后来我使用以下gradle命令解决了这个问题

compile 'org.kie:kie-api:6.1.0.Final'
compile 'org.drools:drools-core:6.1.0.Final'
compile 'org.drools:drools-compiler:6.1.0.Final'
compile files('libs/drools-android-6.5.0.Final.jar')
compile files('libs/janino-3.0.7.jar')
现在的问题是加载写入实际规则的drl文件。因此,根据参考资料,我知道我们需要为此使用KieServices。因此,我在存储器中有一个myrule.drl文件,使用此服务,我试图加载规则文件,但在执行相同操作时出错。共享我的代码以更好地理解

  KieServices kieServices = KieServices.Factory.get();
            KieFileSystem kfs = kieServices.newKieFileSystem();

            // for each DRL file, referenced by a plain old path name:
            String fileName = "myrule.drl";
            FileInputStream fis = new FileInputStream( Environment.getExternalStorageDirectory()+"/Android/Data/"+fileName);
            kfs.write( "src/main/resources/myrule.drl",
                    kieServices.getResources().newInputStreamResource( fis ) );

            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() );
这里我在实例化KieBuilder对象时遇到异常。例外情况如下—

java.lang.RuntimeException: Unable to instantiate object for class 'org.drools.android.DexPackageClassLoader' with constructor public org.drools.android.DexPackageClassLoader(org.drools.core.rule.JavaDialectRuntimeData,java.lang.ClassLoader)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.core.util.ClassUtils.instantiateObject(ClassUtils.java:272)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.core.rule.JavaDialectRuntimeData.makeClassLoader(JavaDialectRuntimeData.java:618)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.core.rule.JavaDialectRuntimeData.onAdd(JavaDialectRuntimeData.java:243)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.rule.builder.dialect.java.JavaDialect.<init>(JavaDialect.java:187)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.newDialect(JavaDialectConfiguration.java:91)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.buildDialectRegistry(KnowledgeBuilderConfigurationImpl.java:392)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.compiler.PackageRegistry.<init>(PackageRegistry.java:55)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newPackage(KnowledgeBuilderImpl.java:1571)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.initPackageRegistry(KnowledgeBuilderImpl.java:1044)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.createPackageRegistry(KnowledgeBuilderImpl.java:1015)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.initPackageRegistries(CompositeKnowledgeBuilderImpl.java:297)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:116)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:244)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:64)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:230)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at com.example.admin23.droolstest.MainActivity.onCreate(MainActivity.java:128)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at android.app.Activity.performCreate(Activity.java:6876)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at android.app.ActivityThread.access$1100(ActivityThread.java:221)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at android.os.Looper.loop(Looper.java:158)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7224)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: Caused by: java.lang.reflect.InvocationTargetException
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at java.lang.reflect.Constructor.newInstance(Native Method)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.core.util.ClassUtils.instantiateObject(ClassUtils.java:270)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     ... 29 more
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.android.MultiDexClassLoader.<init>(MultiDexClassLoader.java:70)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     at org.drools.android.DexPackageClassLoader.<init>(DexPackageClassLoader.java:44)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err:     ... 31 more
谁能帮我解决这个问题,因为我不知道我能做些什么来解决这个问题。任何帮助都是值得的


提前感谢。

编译“org.kie:kie api:6.1.0.Final” 编译“org.drools:drools核心:6.1.0.Final” 编译“org.drools:drools编译器:6.1.0.Final” 编译文件('libs/drools-android-6.5.0.Final.jar') 编译文件('libs/janino-3.0.7.jar')

请使用相同版本的6.X。应用后,重新启动并检查其是否工作

仍然不工作,请使用此代码:

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();
希望能有帮助

问候,,
Mehul Patel

谢谢您的回复,我将相应地进行更改并再次检查。嗨,Mehul,根据您的建议,我已经完成了所有更改,但出现了一些错误。。。java.lang.NoSuchFieldError:没有Ljava/nio/CHARSET/CHARSET类型的静态字段UTF8_字符集;类内Lorg/drools/core/util/IoUtils;或者它的超类(声明'org.drools.core.util.IoUtils'出现在/data/app/com.example.****/base.apk:classes2.dex)当然。期待您的回复。@SalmanKhan我检查过了,它的工作对我来说很好。。你能分享一下你的日志吗?这样我就可以检查了。你能告诉我下一行的CTES.规则是什么吗。FileInputStream fis=新的FileInputStream(CTES.RULES);文档中有一个专门的章节叫做“第14章.Android集成”,可以作为参考。或者,您能否强调Drools API的哪一部分据称来自同一份文件?无论如何,希望这有帮助@谢谢你的回复,但我已经检查了这个文档。从理论上讲,这是有帮助的,但在实施方面,没有太多的东西。如果没有具体说明缺少什么,仅仅是一个泛泛的“没有太多东西”,其他人很难提供帮助,或者根据需要修改更正。无论如何,我只是希望提供一个有用的参考例子(如我在上一篇评论中提到的文档),谢谢你的帮助,我已经提到了我在创建KieBuilder对象时遇到的错误。我需要解决这个问题才能加载我的drl文件。
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();