Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools规则引擎中类对象的迭代列表问题_Drools_Drools Guvnor_Kie Workbench_Drools Kie Workbench - Fatal编程技术网

Drools规则引擎中类对象的迭代列表问题

Drools规则引擎中类对象的迭代列表问题,drools,drools-guvnor,kie-workbench,drools-kie-workbench,Drools,Drools Guvnor,Kie Workbench,Drools Kie Workbench,我使用Kie Workbench学习口水。 我的输入将是opportunityProduct类中的名称,我期待 Opportunity类中Ip中的输出。在规则引擎执行之后,我在输出中只得到空值 Pojo结构: Opportunity.Java : private java.lang.Boolean result; private java.lang.String ip; private java.util.List<com.sample2.sampledemo2.O

我使用Kie Workbench学习口水。 我的输入将是opportunityProduct类中的名称,我期待 Opportunity类中Ip中的输出。在规则引擎执行之后,我在输出中只得到空值

Pojo结构:

Opportunity.Java :
    private java.lang.Boolean result;
    private java.lang.String ip;
    private java.util.List<com.sample2.sampledemo2.OpportunityProduct> productlist;

OpportunityProduct.Java
    private java.lang.String name;
{
   "commands":[
      {
         "insert":{
            "out-identifier":"com.sample2.sampledemo2.Opportunity",
            "return-object":true,
            "object":{
               "com.sample2.sampledemo2.Opportunity":{
                  "productlist":[
                     {
                        "name":"abc"
                     }
                  ]
               }
            }
         }
      },
      {
         "fire-all-rules":""
      }
   ]
}
{
   "type":"SUCCESS",
   "msg":"Container abcdef successfully called.",
   "result":{
      "execution-results":{
         "results":[
            {
               "key":"",
               "value":0
            },
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "com..sample2.sampledemo2.Opportunity":{
                     "result":null,
                     "ip":null,
                     "productlist":[
                        {
                           "name":"abc"
                        }
                     ]
                  }
               }
            }
         ],
         "facts":[
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "org.drools.core.common.DefaultFactHandle":{
                     "external-form":"0:2:1366747666:1366747666:2:DEFAULT:NON_TRAIT:com.sample2.sampledemo2.Opportunity"
                  }
               }
            }
         ]
      }
   }
}
NAME                  CONDITION                               ACTION

           o:Opportunity(pd: productlist)
             OpportunityProduct
      (name == $param , this memberOf pd)      o.setIp($param);

Origination  "abc"                                  "IPP"
rule "Origination"
    when
        o:Opportunity(pd: productlist)
        (OpportunityProduct(name == "abc" , this memberOf pd))
    then
        o.setIp("IPP");
end
输出:

Opportunity.Java :
    private java.lang.Boolean result;
    private java.lang.String ip;
    private java.util.List<com.sample2.sampledemo2.OpportunityProduct> productlist;

OpportunityProduct.Java
    private java.lang.String name;
{
   "commands":[
      {
         "insert":{
            "out-identifier":"com.sample2.sampledemo2.Opportunity",
            "return-object":true,
            "object":{
               "com.sample2.sampledemo2.Opportunity":{
                  "productlist":[
                     {
                        "name":"abc"
                     }
                  ]
               }
            }
         }
      },
      {
         "fire-all-rules":""
      }
   ]
}
{
   "type":"SUCCESS",
   "msg":"Container abcdef successfully called.",
   "result":{
      "execution-results":{
         "results":[
            {
               "key":"",
               "value":0
            },
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "com..sample2.sampledemo2.Opportunity":{
                     "result":null,
                     "ip":null,
                     "productlist":[
                        {
                           "name":"abc"
                        }
                     ]
                  }
               }
            }
         ],
         "facts":[
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "org.drools.core.common.DefaultFactHandle":{
                     "external-form":"0:2:1366747666:1366747666:2:DEFAULT:NON_TRAIT:com.sample2.sampledemo2.Opportunity"
                  }
               }
            }
         ]
      }
   }
}
NAME                  CONDITION                               ACTION

           o:Opportunity(pd: productlist)
             OpportunityProduct
      (name == $param , this memberOf pd)      o.setIp($param);

Origination  "abc"                                  "IPP"
rule "Origination"
    when
        o:Opportunity(pd: productlist)
        (OpportunityProduct(name == "abc" , this memberOf pd))
    then
        o.setIp("IPP");
end
决策表:

Opportunity.Java :
    private java.lang.Boolean result;
    private java.lang.String ip;
    private java.util.List<com.sample2.sampledemo2.OpportunityProduct> productlist;

OpportunityProduct.Java
    private java.lang.String name;
{
   "commands":[
      {
         "insert":{
            "out-identifier":"com.sample2.sampledemo2.Opportunity",
            "return-object":true,
            "object":{
               "com.sample2.sampledemo2.Opportunity":{
                  "productlist":[
                     {
                        "name":"abc"
                     }
                  ]
               }
            }
         }
      },
      {
         "fire-all-rules":""
      }
   ]
}
{
   "type":"SUCCESS",
   "msg":"Container abcdef successfully called.",
   "result":{
      "execution-results":{
         "results":[
            {
               "key":"",
               "value":0
            },
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "com..sample2.sampledemo2.Opportunity":{
                     "result":null,
                     "ip":null,
                     "productlist":[
                        {
                           "name":"abc"
                        }
                     ]
                  }
               }
            }
         ],
         "facts":[
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "org.drools.core.common.DefaultFactHandle":{
                     "external-form":"0:2:1366747666:1366747666:2:DEFAULT:NON_TRAIT:com.sample2.sampledemo2.Opportunity"
                  }
               }
            }
         ]
      }
   }
}
NAME                  CONDITION                               ACTION

           o:Opportunity(pd: productlist)
             OpportunityProduct
      (name == $param , this memberOf pd)      o.setIp($param);

Origination  "abc"                                  "IPP"
rule "Origination"
    when
        o:Opportunity(pd: productlist)
        (OpportunityProduct(name == "abc" , this memberOf pd))
    then
        o.setIp("IPP");
end
Drl:

Opportunity.Java :
    private java.lang.Boolean result;
    private java.lang.String ip;
    private java.util.List<com.sample2.sampledemo2.OpportunityProduct> productlist;

OpportunityProduct.Java
    private java.lang.String name;
{
   "commands":[
      {
         "insert":{
            "out-identifier":"com.sample2.sampledemo2.Opportunity",
            "return-object":true,
            "object":{
               "com.sample2.sampledemo2.Opportunity":{
                  "productlist":[
                     {
                        "name":"abc"
                     }
                  ]
               }
            }
         }
      },
      {
         "fire-all-rules":""
      }
   ]
}
{
   "type":"SUCCESS",
   "msg":"Container abcdef successfully called.",
   "result":{
      "execution-results":{
         "results":[
            {
               "key":"",
               "value":0
            },
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "com..sample2.sampledemo2.Opportunity":{
                     "result":null,
                     "ip":null,
                     "productlist":[
                        {
                           "name":"abc"
                        }
                     ]
                  }
               }
            }
         ],
         "facts":[
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "org.drools.core.common.DefaultFactHandle":{
                     "external-form":"0:2:1366747666:1366747666:2:DEFAULT:NON_TRAIT:com.sample2.sampledemo2.Opportunity"
                  }
               }
            }
         ]
      }
   }
}
NAME                  CONDITION                               ACTION

           o:Opportunity(pd: productlist)
             OpportunityProduct
      (name == $param , this memberOf pd)      o.setIp($param);

Origination  "abc"                                  "IPP"
rule "Origination"
    when
        o:Opportunity(pd: productlist)
        (OpportunityProduct(name == "abc" , this memberOf pd))
    then
        o.setIp("IPP");
end

我无法确定我的输入是否错误或决策表中的条件是否错误。

在您的输入中,您发送了一个要插入的
Opportunity
对象,但您从未插入
OpportunityProduct
事实。你的规则需要两个事实才能生效

请记住,在Drools中,您只能对已插入会话的事实进行推理,并且事实中的嵌套对象不是事实本身

如果您不打算将
OpportunityProduct
作为独立事实插入,您可以做的一件事是使用
from
条件元素对非事实数据进行推理:

rule "Origination"
    when
        o:Opportunity(pd: productlist)
        OpportunityProduct(name == "abc") from pd
    then
        o.setIp("IPP");
end

希望有帮助,

在您的输入中,您发送了一个要插入的
Opportunity
对象,但您从未插入
OpportunityProduct
事实。你的规则需要两个事实才能生效

请记住,在Drools中,您只能对已插入会话的事实进行推理,并且事实中的嵌套对象不是事实本身

如果您不打算将
OpportunityProduct
作为独立事实插入,您可以做的一件事是使用
from
条件元素对非事实数据进行推理:

rule "Origination"
    when
        o:Opportunity(pd: productlist)
        OpportunityProduct(name == "abc") from pd
    then
        o.setIp("IPP");
end

希望能有所帮助,

这是由于kie服务器rest界面默认工作方式如下:

1) 在客户端A与B相关(A.B=B)

2) 先插入A,然后插入B

3) 在服务器端,每个insert命令都将有:

3.1)与B1实例(未插入)相关的A对象(插入kie会话)

3.2)另一个B2实例(B1的确切副本内容,但与A无关)

这里有两种解决方案:

1) 生活在这样的环境中,并从中受益

2) 做你自己的kie服务器扩展,我就是这么做的。我的所有客户都在使用这种kie服务器,通过反射插入所有连接到顶级对象的java对象(大多数情况下称为请求)


这是因为默认情况下kie服务器rest接口的工作方式如下:

1) 在客户端A与B相关(A.B=B)

2) 先插入A,然后插入B

3) 在服务器端,每个insert命令都将有:

3.1)与B1实例(未插入)相关的A对象(插入kie会话)

3.2)另一个B2实例(B1的确切副本内容,但与A无关)

这里有两种解决方案:

1) 生活在这样的环境中,并从中受益

2) 做你自己的kie服务器扩展,我就是这么做的。我的所有客户都在使用这种kie服务器,通过反射插入所有连接到顶级对象的java对象(大多数情况下称为请求)

问候