Проблема с вторичными базами данных и последовательностями базы данных Berkeley DB JE Base API - PullRequest
0 голосов
/ 17 января 2010

У меня есть класс Document, который состоит из Id (int) и Url (String). Я хотел бы иметь первичный индекс на Id и вторичный индекс на Url. Я также хотел бы иметь последовательность для автоматического увеличения Id. Поэтому я создаю базу данных SecondaryDatabase, а затем я создаю последовательность. Во время инициализации последовательности я получаю исключение:

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, байты, которые он пытается преобразовать в объект, кажутся случайными.

Что я делаю не так?

1 Ответ

0 голосов
/ 17 января 2010

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

...