2013-12-18 43 views
1

在執行計劃中,如果在選擇除最後一個屬性之外的屬性時調用自定義函數,則會引發java.lang.IndexOutOfBoundsException。如果在選擇最後一個屬性時調用此自定義函數,則不會發生異常。讓我以一個例子來澄清這一點。使用執行計劃中的自定義函數選擇輸出屬性時出現WSO2CEP 3.0.0錯誤

我有流定義inStream = [名稱,姓氏,地址]和outStream = [名稱,姓氏,地址]分別作爲輸入和輸出流使用。我寫了一個連接字符串的自定義函數。當我使用它像下面在執行計劃(選擇最後一個屬性時自定義函數時),

from inStream 
select name, surname, ns:concat('Address is: ' , address) as address 
insert into outStream 

我得到outStream = [「邁克爾」「傑克遜」,「地址是:印第安納」]爲inStream中= ['Micheal','Jackson','Indiana']。但是,當我將查詢更改爲

from inStream 
select ns:concat('Name is: ', name) as name, surname, address 
insert into outStream 

我收到異常。這是一個錯誤?我應該如何處理這個問題?

回答

2

是的,它似乎是一個錯誤。創建了一個JIRA並附加了修復程序。這一定會在下一個版本中修復。如果您希望修復立即可用,您可以檢出Siddhi code並應用JIRA中給出的修補程序,並將相關jar(本例中爲siddhi-core_2.0.0.wso2v4.jar)複製到您的repository/components/plugins文件夾中CEP服務器實例。

作爲一種變通方法,您可以在最後使用自定義函數,然後通過將此查詢的輸出傳遞給另一個查詢來簡單地將屬性交換爲所需順序(如果事件是走出CEP,那麼你也可以在事件格式器級別重新排序)。

HTH,

+0

將補丁文件放入/repository/components/patches中是否足夠?我是否必須申請修補代碼,重新編譯和提取jar? – iargin

+0

您必須將修補程序應用於源代碼,重新編譯該jar並替換/repository/components/plugins中的現有jar。 (只需將源補丁放入/repository/components/patches中即可修補)。 – lasantha

+0

沒有-Dmaven.test.skip = true選項我無法編譯代碼。錯誤:無法執行目標org.apache.maven.plugins:maven-compiler-plugin:2.3.2:項目siddhi-core上的testCompile(default-testCompile):編譯失敗 [錯誤] ** \ 2.0.0- was2v4 \ modules \ siddhi-core \ src \ test \ java \ org \ wso2 \ siddhi \ test \ standard \ table \ rdbms \ BasicDataSource.java:[30,7]錯誤:BasicDataSource不是抽象的並且不重寫抽象方法getParentLogger ()在CommonDataSource中。通過跳過測試,生成的jar名稱是siddhi-core-2.0.0-wso2v4。我也必須改變它。無論如何,補丁都可以工作。 – iargin

相關問題