0

Guvnor (JBoss BRMS) を使用して、JBoss EAP 5.3 内にデプロイされた Drools ルール エンジンを管理しています。RDBMS に Oracle 11g インスタンスを使用するように Guvnor を変更しました。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 は数学関数を処理できますか? そうでない場合、どうすればこれを使用できますか?

ありがとう

4

1 に答える 1