Изменение 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. попробуйте сделать новое соединение БД с новой схемой оракула.