如何以及是否值得集成Java的webapp +滴料+的Guvnor?(How and is it w

2019-07-30 03:22发布

我打算介绍的Java规则,目前在评估Drools的外部化(物理和逻辑)从应用程序的业务规则的过程。

由于这些业务规则会很经常的事,我希望企业通过GUI作出的规则进行必要的更改。

我用Google搜索上集成的Java Web应用程序+的Drools +的Guvnor,我不会在任何地方得到。

我的问题:

  1. 是否支持Drools的编辑规则的轻量级图形用户界面?
  2. 是的Drools的Guvnor一个轻量级的图形用户界面,或者是有一种方法步骤下来?
  3. 如何方便地集成应用程序的Guvnor阅读规则?

在一般的简单实现集成的Java应用程序+ Drools的+的Guvnor的任何其他建议将是巨大的。

到教程任何指针也将做到这一点对我来说。

Answer 1:

我在做一个类似于你想做的事的过程。

由于这些业务规则会很经常的事,我希望企业通过GUI作出的规则进行必要的更改。

警告警告警告! 这是一个普遍的误解,认为只要有一个GUI,非程序员可以使用它。 那是......不结束我来。 它可以帮助,但编程困难的部分不是写代码,它的未来具有良好的解决方案,以正确的问题。 我敢肯定,一些比较聪明,技术倾向的业务人员可以做的东西用的Guvnor,但不要指望它是某种形式的黄砖路到神奇的极乐之地。 您还必须提供商务人士一个健全的数据模型和API可以让他们做他们需要什么,但以防止它们被意外他们不想做什么做什么。

1.不支持Drools的编辑规则的一个轻量级的GUI?

2.是的Drools的Guvnor一个轻量级的图形用户界面,或者是有一种方法步骤下来?

那么,“轻量级”是主题进行讨论,但作品的Guvnor相当好,并且不要求比浏览器更多,所以我认为这是确定。

3.如何易于集成应用程序的Guvnor阅读规则?

那么,一旦你得到的Guvnor启动和运行,接线您的应用程序使用KnowledgeAgent连接的Guvnor,并听取了新规则的更新是不是特别辛苦。

不幸的是,Drools的一般和的Guvnor特别有一堆,你可能必须解决(比如,你要爆炸的Guvnor WAR文件和编辑文件WEB-INF / beans.xml中设立非怪癖默认配置...)。 但是,一旦你已经得到了理顺,我觉得它工作得很好。

至于文档的Javadoc可以在次有点稀疏,但网站有一些不错的东西,包括一些书籍。

总而言之,呓和的Guvnor是强大的工具,但它不是小事,让他们的工作。 如果你真的需要他们提供什么,他们是值得的,但它也可能是值得考虑,如果一个简单的脚本解决方案就足够了。


现在,如果你发现自己其实需要Drools的,这里是我的建议的顶件- 保持独立的数据模型,您的数据库和规则 。 它意味着有很多无聊的转换代码来写,但它是值得的。

我工作的应用程序使用JPA数据库的问题,而且它不会一直非常愉快的使用该数据模型在我们的规则。 几个原因:

什么是适合你的数据层并不一定适合Drools的,反之亦然。

我们有一个树状结构,这在JPA自然是@OneToMany与父节点列表中的孩子们的关系。 在Drools中列出的工作是相当痛苦的,所以我们把它夷为平地的地方,我们插入一个结构ParentNode对象,和一堆ChildNode对象,这是更容易的工作。

敢于重构。

该规则的数据模型需要生活的Guvnor里面,太 - 这意味着你可以打破所有规则,如果重命名实体类或类似的东西。 对于规则的单独的数据模型意味着你可以重构你的数据库的东西无后顾之忧。

告诉他们,他们需要看到的。

数据库可以增长相当复杂,但规则通常不需要关心许多复杂性。 揭露这些复杂的人编辑的规则会导致很多不必要的混乱。 例如,我们发现,对于我们的场景,但绝对没有必要暴露规则的作家很多一对多的关系(这被证明是非常复杂的Drools的处理) - 所以我们让他们看起来像一个一对多的,而不是,一切都变得更自然。

保护。

我们设计我们的大多数规则是这样的伪代码工作:

rule "Say hello to user"
when 
  user : User
then
  insert(new ShowMessageCommand("Hello " + user.getName() + "!"))
end

......等等,每个规则包,它明确规定,响应命令,你可以插入,和他们做什么。 我们已经运行我们的应用程序的规则之后,我们挑选出插入到在他们的规则和行为的会话对象( 访问者模式已经被证明是非常有用的,以避免长时间if instanceof / else if instanceof / else链)。

我很高兴我们这样做了,而不是让规则作家做任何他们认为他们想与我们的JPA对象做。

不管怎么说,希望这有助于。



Answer 2:

以上答案是很好的解释。 但在如何整合Java和Drools的-的Guvnor是如下...

private static KnowledgeBase readKnowledgeBase() throws Exception {
KnowledgeAgent kagent = KnowledgeAgentFactory
        .newKnowledgeAgent( "MortgageAgent" );
kagent.applyChangeSet( ResourceFactory
        .newClassPathResource( "changeset.xml" ) );
KnowledgeBase kbase = kagent.getKnowledgeBase();
kagent.dispose();
return kbase;
}

<?xml version="1.0" encoding="UTF-8"?>
<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 drools-change-set-5.0.xsd'>
  <add>
    <resource
  source='http://localhost:8080/guvnor-webapp/org.drools.guvnor.Guvnor/package/mortgages/LATEST'
  type='PKG' basicAuthentication='enabled' username='admin' password='admin' />

  </add>
</change-set>

希望这是有帮助。



文章来源: How and is it worth to integrate Java Webapp + drools + Guvnor?