Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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
Java 使用ksession.retract时出现锁定问题_Java_Drools - Fatal编程技术网

Java 使用ksession.retract时出现锁定问题

Java 使用ksession.retract时出现锁定问题,java,drools,Java,Drools,我目前有流口水的问题(5.6)。我们试图让我们的规则引擎安全地崩溃和死锁,但由于我们允许用户直接输入drools规则,这有点困难 我们当前的问题是:当把一些东西放在条件部分时,比如eval(myAPI.myMethod(“abc”)引发异常。但是,这会导致流口水后不顺畅 当我们试图让一切恢复正常时(收回对象和事实句柄并从数据库重新加载它们,在数据库中我们不断地保持ksession),我们会遇到一个锁问题: 调用ksession.retract(eventObject)时什么也没发生,调试显示它被

我目前有流口水的问题(5.6)。我们试图让我们的规则引擎安全地崩溃和死锁,但由于我们允许用户直接输入drools规则,这有点困难

我们当前的问题是:当把一些东西放在条件部分时,比如
eval(myAPI.myMethod(“abc”)引发异常。但是,这会导致流口水后不顺畅

当我们试图让一切恢复正常时(收回对象和事实句柄并从数据库重新加载它们,在数据库中我们不断地保持ksession),我们会遇到一个锁问题:

调用
ksession.retract(eventObject)时什么也没发生,调试显示它被锁定在
NamedEntryPoint.retract(…):548中的“this.lock.lock()”处

我试过很多方法来规避这个问题,但我不知道怎么做。外面有没有人,也许有答案?像一些限制锁定时间的配置参数,一些允许手动解锁的方法,或者一些允许完全关闭当前会话的方法(dispose不是一个选项,正如它所说的,如果在清理所有内容之前不使用它,可能会导致内存泄漏)

有什么想法吗?感谢和问候,
Kay

为什么
eval(myAPI.myMethod(“abc”)
首先要(或被允许)抛出异常?在代码中抛出一个异常,该异常应该从某些Pojo中的数据中生成布尔值,除非发生完全不可预见的事情,表明您的应用程序处于困境或穷途末路,没有恢复的机会。我知道,这些方法不应该导致任何异常,但由于我们允许开发人员使用我们的API,它具有数据库访问等功能,我们需要确保缺少的参数(空参数、缺少的参数、错误的参数类型,如不存在的枚举项等)不会导致任何问题。我们目前正在重新编写API,因此引发的异常较少,但由于某些原因,我们无法避免所有异常(例如,如果开发人员无法访问他试图在那里使用的方法)。因此,如果我们能够以某种方式避免这个“异常崩溃流口水”的问题,那将是一件非常棒的事情……这是一个第22条军规。也许您可以通过提供一个包装器
boolean failsafe(boolean b)
来逃脱,该包装器捕获myMethod&comp抛出的所有异常。此方法应捕获、设置标志、记录并返回false。在所有的插入、删除、收回之后:检查标志并撤销所做的一切。这将使发动机处于一致的状态,而您“只”剩下纠正这最后一次事故的问题。-你不可能一个例外地跳出火海,期望一切都干净稳定。