0

我是 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

我面临的问题是提供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>

这种方法有效。

然后我看到 changeset.xml 是直接从 Gunvor 提供的,我想使用它。我试图做这样的事情:

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");

这种方法行不通。访问时它会抱怨 401 http://localhost:8080/guvnor/org.drools.guvnor.Guvnor/package/test/LATEST。Gunvor 提供的 ChangeSet.xml 不包含身份验证信息。

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

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

谢谢

4

2 回答 2

0

是的,使用 changest over guvnor URL 是正确的方法。使用 URL 认证:

        UrlResource url = (UrlResource) ResourceFactory.newUrlResource(changeSetUrl);
        url.setBasicAuthentication("enabled");
        url.setUsername(userName);
        url.setPassword(pass);
于 2013-07-05T06:49:04.730 回答
0

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

于 2013-11-28T18:30:51.963 回答