2012-11-20 39 views
0

我正在使用Guvnor(JBoss BRMS)來管理我在JBoss EAP 5.3中部署的drools規則引擎。我已經改變Guvnor爲其RDBMS使用Oracle 11g實例。我使用Guvnor來生成一個新的repository.xml,並將其放入JBoss目錄的'bin'文件夾中。 Guvnor和Drools運行良好,似乎很高興能夠連接到Oracle 11g實例。更改JBoss BRMS(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以來,該規則無法再被驗證並生成了該包。

我不知道爲什麼會發生這種情況。任何幫助提供將非常感激。

感謝

UPDATE權,我找到了我認爲這是問題。在上面的例子中,我發現有一些東西是我錯誤的原因。我正在使用'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處理數學函數?如果不是,我該如何去使用它?

感謝

+0

您是否嘗試導出repository.xml並導入它,而不是替換bin文件夾中的原始repository.xml? – uaarkoti

+0

嗨jBug,我找不到導入存儲庫的選項,只有導出。 – ScreamingMage

回答

0

好像有一個與您的數據庫配置,的Guvnor /兔崽子問題可能無法建立在Oracle庫中的所有必要的表。嘗試做一個新的數據庫連接到一個新的oracle模式。

+0

嗨alikox,我會給這個旋轉,看看如果它解決了這個問題。 – ScreamingMage

+0

有一件事,我創建了一個新的模式,它似乎創建了所有的表。在異常中引用的表存在,它只是試圖將null插入到它出於某種原因。 – ScreamingMage

+0

我嘗試了你建議的alikox,但沒有奏效。我很想回到使用由Guvnor提供的默認JackRabbit解決方案 – ScreamingMage