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



我正在使用Guvnor(JBoss BRMS)来管理部署在JBoss EAP 5.3中的drools规则引擎。我已经将Guvnor更改为使用Oracle11g实例作为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迁移到Oracle11g之后,就无法再验证规则和构建包。

我不知道为什么会发生这种事。如有任何帮助,我们将不胜感激。

感谢

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

感谢

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

最新更新