0

我正在使用 Guvnor (JBoss BRMS) 来管理部署在 JBoss EAP 5.3 中的 drools 规则引擎。我已将 Guvnor 更改为使用 Oracle 11g 实例作为它的 RDBMS。我使用 Guvnor 生成了一个新的 repository.xml 并将其放入 JBoss 目录的“bin”文件夹中。Guvnor 和 Drools 运行良好,似乎很高兴连接到 Oracle 11g 实例。

然后我继续创建一个包并添加一个新规则。我添加的规则如下:

dialect "mvel"

rule "TimeToClearRule"
when
    #conditions
then
    #actions
end

我验证了这个规则,然后重建了包。一切正常!

但是,我随后在规则上方添加了一个函数,目的是在规则中使用它。规则更改为以下内容:

dialect "mvel"

function double logNormalPdf(double mu, double sigma, double timeT) {
    return 0.0;
}

rule "TimeToClearRule"
when
    #conditions
then
    #actions
end

我验证了这个规则并重建了包。但是,随后抛出了一个错误。它无法“保存项目”。在我的 JBoss 日志中,显示了以下错误(注意:不是完整的堆栈跟踪,仅添加了我认为是根本原因的内容)

 17:59:51,815 ERROR [BundleWriter] Error while storing blob. id=9d26c61c-4dde-4009-a518-1f226431aa80/{http://www.jboss.org/drools-repository/1.0}compiledPackage idx=0 size=4353
 java.lang.IllegalStateException: Unable to insert index for string: compiledPackage
at org.apache.jackrabbit.core.persistence.pool.NGKDbNameIndex.insertString(NGKDbNameIndex.java:66)
at org.apache.jackrabbit.core.persistence.pool.DbNameIndex.stringToIndex(DbNameIndex.java:95)
at org.apache.jackrabbit.core.persistence.pool.BundleDbPersistenceManager$DbBlobStore.createId(BundleDbPersistenceManager.java:1334)

Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("DROOLS"."PM_WS_DEFAULT_NAMES"."ID")

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)

当 Drools/Guvnor 使用默认 DBMS 解决方案时,规则验证并构建良好。自从将 DBMS 移至 Oracle 11g 后,无法再验证规则并构建包。

我不知道为什么会这样。提供的任何帮助将不胜感激。

谢谢

更新是的,我发现我认为是问题所在。我在上面的示例中遗漏了一些东西,我发现这是导致错误的原因。我正在使用“数学”函数(java.lang.Math),这似乎导致了上面显示的错误。我正在创建的规则如下:

import java.lang.Math

dialect "mvel"

function double logNormalPdf(double mu, double sigma, double timeT) {
    return Math.log(2);
}

rule "TimeToClearRule"
when
    #conditions
then
    #actions
end

drools/guvnor 可以处理数学函数吗?如果没有,我该如何使用它?

谢谢

4

1 回答 1

0

您的数据库配置似乎有问题,guvnor / jackrabbit 可能无法在 oracle 存储库中创建所有必要的表。尝试与新的 oracle 模式建立新的数据库连接。

于 2012-11-23T21:35:15.067 回答