Изменение JBoss BRMS (Drools) для использования Oracle 11g: Невозможно собрать пакет

Я использую Guvnor (JBoss BRMS) для управления моим механизмом правил drools, который развернут в JBoss EAP 5.3. Я изменил Guvnor для использования экземпляра Oracle 11g для его RDBMS. Я использовал Guvnor для создания нового файла repository.xml и поместил его в папку "bin" каталога JBoss. Гувнор и Друлз работали нормально и, казалось, были рады подключиться к экземпляру 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 использует решение СУБД по умолчанию, правило проверяет и создает нормально. После переноса СУБД в 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

Могут ли слюни / guvnor обрабатывать математические функции? Если нет, то как мне использовать это?

Спасибо

1 ответ

Кажется, что есть проблема с вашей конфигурацией базы данных, guvnor / jackrabbit может не создать все необходимые таблицы в репозитории oracle. попробуйте сделать новое соединение БД с новой схемой оракула.

Другие вопросы по тегам