为什么将Drools 6 KIE JAR加载到代码失败?

时间:2014-01-08 12:03:43

标签: java jar drools drools-guvnor kie

我正在使用JBoss AS 7.1.1.Final和KIE Workbench / Drools 6.0.1。,Java和Eclipse(Kepler)。

我需要KIE Workbench(以前称为Drools Guvnor)让人们用Facts和Rules以图形方式创建/编辑jar,然后将其作为jar存储在本地maven存储库中。这些罐子(以前称为pkg)然后我想以编程方式访问并将它们加载到我的Drools应用程序中。应用程序甚至可以(尽管不是优选地)在同一工作站上运行,因此可以访问存储库

a)通过网址:  http://localhost:8080/drools-wb-as7.0/maven2/com/myprojects/myProject/LATEST/myProject-LATEST.jar

b)通过filepath / classpath: /my/folder/jboss-as-7.1.1.Final/bin/repositories/kie/com/myprojects/myProject/LATEST/myProject-LATEST.jar

NOT 想要在我的代码中创建/编译规则等,既不动态地动态加载单个.drl文件 - 准备好的jar是我需要加载的,与 例如com.myprojects:myProject:LATEST as identifier。

我试试这个(根据文件)

KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.newKieContainer(
ks.newReleaseId("com.myprojects",   "myProject", "LATEST"));
KieScanner kScanner = ks.newKieScanner( kContainer );
kScanner.start( 10000L );

KieSession kSession = kContainer.newKieSession("defaultKieSession");
kSession.insert( fact );

[...]

但是,这会因运行时异常

而失败
Exception in thread "main" java.lang.RuntimeException: Cannot find KieModule: com.myprojects:myProject:LATEST
        at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:86)
        at com.myprojects.myproject.KieDroolsWBOnlinePuller.code(KieDroolsWBOnlinePuller.java:118)
        at com.myprojects.myproject.KieDroolsWBOnlinePuller.main(KieDroolsWBOnlinePuller.java:40)

我的问题是:为什么没有找到回购的罐子?当我在KIE WB中创建它时,KieModule不是回购中jar和jar的表示吗? 或者我必须更改使用

打印的Maven Repo的默认ReleaseID
KieRepository repo = ks.getRepository();
repo.getDefaultReleaseId()

解析为

org.default:artifact:1.0.0-SNAPSHOT ?

这是Maven的问题吗?我错了什么?

这里是jar的内容pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.myprojects</groupId>
  <artifactId>myProject</artifactId>
  <version>LATEST</version>
  <name>myProject</name>
  <repositories>
    <repository>
      <id>guvnor-m2-repo</id>
      <name>Guvnor M2 Repo</name>
      <url>http://localhost:8080/drools-wb-as7.0/maven2/</url>
    </repository>
  </repositories>
</project>

我还尝试过使用此代码通过URL加载jar:

KieServices ks = KieServices.Factory.get();
ReleaseId releaseId = ks.newReleaseId("com.myprojects", "myProject", "LATEST");
KieResources kres = ks.getResources();

String url = "http://127.0.0.1:8080/drools-wb-as7.0/maven2/com/myprojects/myProject/LATEST/myProject-LATEST.jar";
kres.newUrlResource( url );
KieContainer kContainer = ks.newKieContainer(releaseId);
KieSession kSession = kContainer.newKieSession("statelessDefautlKnowledgeSession");
[...]

这失败了同样的例外.... 有什么想法吗?

到目前为止我读过的一些资源(不能发布其他6个):

add drls etc. dynamically

load drls dynamically

1 个答案:

答案 0 :(得分:6)

就我而言,事实证明

<dependency>
  <groupId>org.kie</groupId>
  <artifactId>kie-ci</artifactId>
</dependency>
我的POM中缺少