我正在使用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)通过URL:
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
我不希望创建/编译动态规则等在我的代码,无论是动态加载一个.drl文件-准备好的罐子是我需要加载,如与com.myprojects:myProject的:最新作标识.
我试试这个(根据文件)
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 );
Run Code Online (Sandbox Code Playgroud)
[...]
但是,这会因Runtime Exception而失败,
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)
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么没有找到回购罐?当我在KIE WB中创建它时,KieModule不是回购中jar和jar的表示吗?或者我必须更改打印出的Maven Repo的默认ReleaseID
KieRepository repo = ks.getRepository();
repo.getDefaultReleaseId()
Run Code Online (Sandbox Code Playgroud)
解决了
org.default:artifact:1.0.0-SNAPSHOT ?
Run Code Online (Sandbox Code Playgroud)
这是Maven的问题吗?我错了什么?
这里是jar的内容pom.xml
<?xml version="1.0" encoding="UTF-8"?> …
Run Code Online (Sandbox Code Playgroud) 我使用KIE Workbench(6.1.0.Beta3)来编辑我的规则.由于Workbench还没有支持某些功能(例如将规则移到其他包中),我想在KIE-WB之外做这些事情.
为此,我克隆了我的存储库
git clone git://localhost:9418/my-kie-repository
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.我编辑一些文件,在本地提交,然后尝试git push
.但是我得到了错误
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
Run Code Online (Sandbox Code Playgroud)
因为我几乎可以肯定它是第一个问题,关于凭证,我在.git/config
文件中添加了行
[credential "git://localhost:9418"]
username = admin
password = admin
Run Code Online (Sandbox Code Playgroud)
不过,我得到了前面提到的错误.是的,KIE Workbench仍在运行,我也可以从那里获取/拉取没有问题.
有没有办法如何推回到KIE Workbench存储库?根据这条消息,一个"可能需要重新配置原点",但我不确定如何更改它.
有人知道如何正确设置吗?
我正在使用BPM Suite 6来创建一个git存储库和shell项目.然后我在Eclipse IDE中连接到git repo.
由BPM Suite Web GUI创建的Pom文件包含kie-maven-plugin.但是Eclipse抱怨这个"插件执行没有被生命周期配置覆盖".
从谷歌搜索这个错误我已经明白,这意味着Eclipse不知道何时在Eclipse的构建过程中执行这个插件.修复此问题的"最佳"方法似乎是为插件安装m2e连接器.
这样的连接器是否存在?
我正在尝试集成spring和JBPM,我做了谷歌的示例应用程序,发现一个github项目解释相同.
使用的框架版本:
我已经将github项目导入eclipse工作区,并且在maven clean之后我得到例外说:
Listed class "org.jbpm.task.Status" must not be an enum persistence.xml /jbpm-spring-web/src/main/resources/META-INF line 30 JPA Problem
Run Code Online (Sandbox Code Playgroud)
和src/main/resources/META-INF/Taskorm-JPA2.xml文件中的一些JPA查询异常如:
The abstract schema type 'OrganizationalEntity' is unknown. Taskorm-JPA2.xml /jbpm-spring-web/src/main/resources/META-INF line 375 JPA Problem
Run Code Online (Sandbox Code Playgroud)
和
The IN expression does not have a valid left expression. Taskorm-JPA2.xml /jbpm-spring-web/src/main/resources/META-INF line 7 JPA Problem
Run Code Online (Sandbox Code Playgroud)
如何解决这些异常?
persistence.xml看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd">
<persistence-unit name="org.jbpm.runtime" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/jbpm-ds</jta-data-source>
<mapping-file>META-INF/JBPMorm-JPA2.xml</mapping-file>
<mapping-file>META-INF/ProcessInstanceInfoMapping.xml</mapping-file>
<mapping-file>META-INF/Taskorm-JPA2.xml</mapping-file>
<class>org.jbpm.task.Attachment</class>
<class>org.jbpm.task.Content</class> …
Run Code Online (Sandbox Code Playgroud) 我们有一个Java应用程序,其中在Weblogic上部署了不同的模块。我们在不同的模块上使用了流口水,并试图通过将其定义为枚举类来使初始化KieContainer的类成为单例。
但是,似乎在生产环境中(通过耳文件部署应用程序)时,有不同的ClassLoader初始化该类,并且会收到以下异常:
null java.lang.IllegalStateException: There's already another KieContainer created from a different ClassLoader;
at org.drools.compiler.kie.builder.impl.KieServicesImpl.getKieClasspathContainer(KieServicesImpl.java:88);
at org.drools.compiler.kie.builder.impl.KieServicesImpl.getKieClasspathContainer(KieServicesImpl.java:73);
Run Code Online (Sandbox Code Playgroud)
您对如何解决这个问题有任何建议吗?
我正在使用单线程 drools 项目作为第一匹配策略/条件评估引擎。我正在使用以下代码从 kieContainer 获取 kieSession,并根据条件评估谓词。
KieContainer currentContainer = kieContainer.get();
StatelessKieSession newKIESession = currentContainer.newStatelessKieSession();
newKieSession.execute(predicate);
Run Code Online (Sandbox Code Playgroud)
对于给定的请求,评估大约需要 10 毫秒。但是,当我使用 10 个线程时,为了提高性能,这些请求中的每一个都开始花费大约 100 毫秒,有效地为我提供了相同的性能和更多的线程。
我应该为每个处理线程生成一个新容器,而不是从现有容器生成一个新会话吗?
//SEE LAST LINE BELOW
KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
KieFileSystem kfs = ks.newKieFileSystem();
byte[] drlAsBytes = retrieveDRLResource();
kfs.write(ResourceFactory.newByteArrayResource(drlAsBytes).setTargetPath(DROOLS_DEFAULT_PATH));
KieBuilder kb = ks.newKieBuilder(kfs);
kb.buildAll(); // kieModule is automatically deployed to KieRepository if successfully built.
if (kb.getResults().hasMessages(Level.ERROR)) {
throw new PolicyServiceException("Build Errors:\n" + kb.getResults().toString());
}
//******* SHOULD THIS BE DONE FOR EACH PROCESSING …
Run Code Online (Sandbox Code Playgroud)是什么区别"Drools的骆驼服务器"和"KIE-WB执行服务器"?它们是否与远程服务器中执行规则/进程的目的相同?
工作台包含执行服务器(用于执行进程和任务),还允许您通过远程API调用各种进程和任务相关的操作.因此,您可以"作为服务"设置流程引擎,并通过远程请求和/或在必要时向执行服务器发送必要的触发器,轻松地将其集成到应用程序中(无需将其作为一部分嵌入或管理)你的申请).
drools camel服务器(drools-camel-server)模块是一个战争,你可以部署它来为任何类型的客户端应用程序远程执行KnowledgeBases.这不仅限于JVM应用程序客户端,也包括可以通过REST接口使用HTTP的任何技术.此版本的执行服务器以本机方式支持无状态和有状态会话.
我已经下载了kie工作台并提取了kie-drools-wb-distribution-wars-6.2.0.Final-tomcat7.war
.我之前从未使用过tomcat,但是我想使用工作台,似乎没有工作台可以自行调整的选项.因此,我安装了tomcat 8.执行此操作后,我访问了tomcat管理器并部署了战争.(我不得不增加可接受文件大小的内存限制)
我现在已经/kie-drools-wb-distribution-wars-6.2.0.Final-tomcat7
列为一个应用程序,但它不会启动.当我尝试启动它时,我得到以下内容:
FAIL - Application at context path /kie-drools-wb-distribution-wars-6.2.0.Final-tomcat7 could not be started
FAIL - Encountered exception org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/kie-drools-wb-distribution-wars-6.2.0.Final-tomcat7]]
Run Code Online (Sandbox Code Playgroud)
这是catalina日志文件:
01-Apr-2015 18:51:54.136 SEVERE [localhost-startStop-1] org.apache.catalina.startup.ContextConfig.processContextConfig Parse error in context.xml for /kie-drools-wb-distribution-wars-6.2.0.Final-tomcat7
org.xml.sax.SAXParseException; systemId: file:/opt/apache-tomcat-8.0.21/webapps/kie-drools-wb-distribution-wars-6.2.0.Final-tomcat7/META-INF/context.xml; lineNumber: 17; columnNumber: 81; Error at (17, 81) : bitronix.tm.integration.tomcat55.BTMLifecycleListener
at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:1914)
at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:1946)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1187)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at …
Run Code Online (Sandbox Code Playgroud) 我试图在 Drools 6.5 中创建两个独立的规则组,但我无法弄清楚规则流组和议程组策略的用例是什么。他们两个看起来很相似。
我尝试将Drools 7.4.1集成到tomcat中的Webapp中。
当我在代码中调用以下语句来获取KieService时,我会得到null
。
KieServices ks = KieServices.Factory.get();
Run Code Online (Sandbox Code Playgroud)
如果从测试方法中调用相同的方法,则可以。
有人可以帮忙吗?