2010-01-16 56 views
0

我有一個類別文檔,它由Id (int)Url (String)組成。我想在Id上有一個主要索引,在Url上有二級索引。我也想爲Id自動增加一個序列。所以我創建了一個SecondaryDatabase,然後我創建了一個Sequence。在序列的初始化我得到一個異常:Berkeley DB JE Base API輔助數據庫和序列的問題

Exception in thread "main" java.lang.IllegalArgumentException 
at com.sleepycat.util.UtfOps.getCharLength(UtfOps.java:137) 
at com.sleepycat.util.UtfOps.bytesToString(UtfOps.java:259) 
at com.sleepycat.bind.tuple.TupleInput.readString(TupleInput.java:152) 
at pl.edu.mimuw.zbd.berkeley.zadanie.rozwiazanie.MyDocumentBiding.entryToObject(MyDocumentBiding.java:12) 
at pl.edu.mimuw.zbd.berkeley.zadanie.rozwiazanie.MyDocumentBiding.entryToObject(MyDocumentBiding.java:1) 
at com.sleepycat.bind.tuple.TupleBinding.entryToObject(TupleBinding.java:76) 
at pl.edu.mimuw.zbd.berkeley.zadanie.rozwiazanie.UrlKeyCreator.createSecondaryKey(UrlKeyCreator.java:20) 
at com.sleepycat.je.SecondaryDatabase.updateSecondary(SecondaryDatabase.java:835) 
at com.sleepycat.je.SecondaryTrigger.databaseUpdated(SecondaryTrigger.java:42) 
at com.sleepycat.je.Database.notifyTriggers(Database.java:2004) 
at com.sleepycat.je.Cursor.putNotify(Cursor.java:1692) 
at com.sleepycat.je.Cursor.putInternal(Cursor.java:1616) 
at com.sleepycat.je.Cursor.putNoOverwrite(Cursor.java:663) 
at com.sleepycat.je.Sequence.<init>(Sequence.java:188) 
at com.sleepycat.je.Database.openSequence(Database.java:546) 
at pl.edu.mimuw.zbd.berkeley.zadanie.rozwiazanie.MyFullTextSearchEngine.init(MyFullTextSearchEngine.java:131) 
at pl.edu.mimuw.zbd.berkeley.zadanie.testy.MyFullTextSearchEngineTest.main(MyFullTextSearchEngineTest.java:18) 

看來序列的初始化過程中的輔助數據庫被強制進行更新。當我調試MyDocumentBiding的entryToObject方法時,它嘗試轉換爲對象的字節看起來是隨機的。

我在做什麼錯?

回答

0

我發現解決方案是爲序列創建一個單獨的數據庫,或者使SecondaryKeyCreator檢測何時添加序列數據並在這種情況下返回false。