2010-01-16 3 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) 

Кажется, что во время инициализации последовательности вторичной базы данных вынужден обновить. Когда я отлаживаю метод entryToObject MyDocumentBiding, байты, которые он пытается преобразовать в объект, кажутся случайными.

Что я делаю неправильно?

ответ

0

Я выяснил, что решение состоит в том, чтобы создать отдельный бит для последовательности или сделать SecondaryKeyCreator обнаружением, когда он добавляет данные последовательности и возвращает ложь в такой ситуации.

 Смежные вопросы

  • Нет связанных вопросов^_^