更改JBoss BRMS(Drools)以使用Oracle 11g:无法构建程序包

时间:2012-11-20 18:06:33

标签: jboss oracle11g drools guvnor

我正在使用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以来,该规则无法再进行验证并构建了包。

我不知道为什么会这样。我们非常感谢您提供的任何帮助。

由于

更新是的,我发现了我认为的问题。我在上面的例子中遗漏了一些我发现错误的原因。我正在使用'Math'函数(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可以处理数学函数吗?如果没有,我该如何使用它?

由于

1 个答案:

答案 0 :(得分:0)

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