【问题标题】:Drools stateful session per request每个请求的 Drools 有状态会话
【发布时间】:2018-05-23 00:03:57
【问题描述】:

我们正在尝试使用 Drool 作为我们的规则引擎服务。下面列出了我们到目前为止所做的工作

无状态会话满足了我们的大部分需求(给出一组数据,执行规则并返回数据,就是这样)。但是使用无状态,我们不得不妥协 Drools 有状态会话提供的许多重要特性。

所以我们尝试对每个请求使用有状态会话。这意味着会话应在请求结束后立即处理。此外,即使会话名称相同,并行请求也不应相互干扰

我们发现容器运行时策略配置(Workbench > Deploy > {any container} > Process Configuration > Runtime strategy)

但即使将容器策略配置为 Per Request,它的行为仍然与 Singleton 相同(每次请求后会话不会被释放)

我们读它的地方很少,运行时策略只在 jBPM 中实现

我们向KIE服务器发出请求的方式如下所示

 Request: POST {HOST}/kie-server/services/rest/server/containers/instances/TestRequest_1.0.4 
 {
   "lookup": "ab-session", //stateful session
   "commands": [
     {
       "insert": {
         "out-identifier": "125",
         "object": {
           "com.myteam.testrequest.Product": {
            "id": "123",
            "name": "Hoo Hoo",
            "count": 0
           }
         },
         "return-object": "true"
       }
     },
     {
       "insert": {
         "out-identifier": "126",
         "object": {
           "com.myteam.testrequest.Product": {
            "id": "123",
            "name": "Hoo Hoo",
            "count": 0
           }
         },
         "return-object": "true"
       }
     },
     {"fire-all-rules": "hf2"}
   ]
  }

我们需要帮助来实现这一要求。另外,如果我们做错了什么,请帮助理解

【问题讨论】:

  • 你能在哪里解决这个问题?
  • 我们的一些理解是不对的。 drools 中的无状态会话实际上是有状态会话的按请求实现。这意味着有状态支持的所有命令也支持无状态。 (我们最初认为无状态会话不支持modify 之类的命令)如果您想针对每个请求策略进行回答,则仅在jBPM 中可用

标签: jboss drools jbpm kie-workbench drools-kie-server


【解决方案1】:

在 kmodule.xml 中你可以尝试添加“prototype”范围,因为默认是“singleton”:

<ksession name="SessionName" type="stateful" default="false" clockType="realtime" scope="prototype"/>

【讨论】:

    猜你喜欢
    • 2013-06-15
    • 2010-11-30
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2010-11-25
    相关资源
    最近更新 更多