Drools 将KnowledgeAgent与Gunvor提供的changeset.xml一起使用

Drools 将KnowledgeAgent与Gunvor提供的changeset.xml一起使用,drools,drools-guvnor,Drools,Drools Guvnor,我是Drools的新手,尝试将其与Gunvor集成,因为我们希望我们的应用程序能够动态使用用户创建的最新规则 我正在使用Drools和Guvnor 5.5 我首先在Gunvor中创建一个包,然后创建了一个测试客户端,代码如下: ResourceFactory.getResourceChangeScannerService().start(); ResourceFactory.getResourceChangeNotifierService().start(); KnowledgeAgent ag

我是Drools的新手,尝试将其与Gunvor集成,因为我们希望我们的应用程序能够动态使用用户创建的最新规则

我正在使用Drools和Guvnor 5.5

我首先在Gunvor中创建一个包,然后创建了一个测试客户端,代码如下:

ResourceFactory.getResourceChangeScannerService().start();
ResourceFactory.getResourceChangeNotifierService().start();
KnowledgeAgent agent =
        KnowledgeAgentFactory.newKnowledgeAgent("validation agent");
agent.applyChangeSet(changeSetUrlResource);
StatefulKnowledgeSession session =
        agent.getKnowledgeBase().newStatefulKnowledgeSession();
// play with session
UrlResource changeSetUrlResource = (UrlResource)ResourceFactory.newUrlResource(
    "http://localhost:8080/guvnor/org.drools.guvnor.Guvnor/package/test/LATEST/ChangeSet.xml");
changeSetUrlResource.setBasicAuthentication("enabled");
changeSetUrlResource.setUsername("guest");
changeSetUrlResource.setPassword("guest");
我面临的问题是如何提供changeset.xml

首先,我创建了changeset.xml并将其放在我的类路径中,然后通过类似于
changeSetUrlResource=ResourceFactory.newClassPathResource(“drools/changeset.xml”)
的内容准备changeSetUrlResource,如

<change-set xmlns='http://drools.org/drools-5.0/change-set'
    xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >
    <add>
         <resource source='http://localhost:8080/guvnor/org.drools.guvnor.Guvnor/package/test/LATEST' type='PKG'
         basicAuthentication="enabled" username="guest" password="guest"/>
    </add>
</change-set>
这种方法行不通。当访问
http://localhost:8080/guvnor/org.drools.guvnor.Guvnor/package/test/LATEST
。Gunvor提供的ChangeSet.xml不包含身份验证信息

鉴于Gunvor提供了ChangeSet.xml,我相信有一种合适的方法可以将其与知识代理一起使用。然而,我在网上做了一些搜索,除了完全关闭Gunvor中的身份验证之外,我找不到相关信息

配置Drools KnowledgeAgent以使用Gunvor上的changeset.xml的正确方法应该是什么


谢谢

是的,使用转换guvnor URL是正确的方法。使用URL身份验证:

        UrlResource url = (UrlResource) ResourceFactory.newUrlResource(changeSetUrl);
        url.setBasicAuthentication("enabled");
        url.setUsername(userName);
        url.setPassword(pass);

我认为您提供的身份验证是为了通过web从guvnor获取变更集,但在变更集文件中,您提供的是特定资源(如包或其他)的身份验证信息。我认为尝试在没有身份验证的情况下获取变更集,或者使用“guest”“guest”作为用户名和密码。还有一件事,您可以转到guvnor,在管理左侧面板上,您可以为特定用户为特定包授予身份验证或权限(用户权限)

这就是我在问题中提到的。它不起作用。连接到变更集URL是可行的,但代理将连接到变更集xml中引用的URL,该部分失败。用于连接到变更集URL的身份验证信息不会传递到该后续连接:(我遗漏了什么?用户名和密码?你能用这些凭据从浏览器登录guvnor吗?我能。正如我在最初的问题中提到的,我已经尝试了与你提到的完全相同的方法,它正在抱怨401访问包URL(如Gunvor的changeset.xml中引用的)是我创建知识库的工作代码。请查看它是否有用。我相信它会工作,但您的代码不使用KnowledgeAgent。仅供参考,以防您忽略:KnowledgeAgent用于监视用于创建知识库的资源,当资源中有更新时,它将更新/重新创建知识库。但是在您的代码中您只需直接创建知识库。