Frage

ich eine Klasse Dokument haben, die von Id (int) und Url (String) besteht. Ich möchte einen Primärindex auf Id und Sekundärindex auf Url haben. Ich möchte auch eine Sequenz für Id Auto-Inkrementierung haben. Also habe ich eine SecondaryDatabase erstellen und dann erstelle ich eine Sequenz. Während der Initialisierung der Sequenz erhalte ich eine Ausnahme:

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)

Es scheint, dass die sekundäre Datenbank während der Initialisierung der Sequenz zu aktualisieren gezwungen wird. Wenn ich die entryToObject Methode debuggen die Bytes von MyDocumentBiding, dass es zu Objekt zu konvertieren versucht scheint zufällig.

Was mache ich falsch?

War es hilfreich?

Lösung

Ich fand heraus, dass die Lösung eine separate db für die Sequenz entweder zu erstellen oder die SecondaryKeyCreator erkennen zu machen, wenn es eine Sequenzdaten und return false in einer solchen Situation hinzuzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top