Question

J'ai un document de classe qui se compose de Id (int) et Url (String). Je voudrais avoir un index primaire sur Id et l'indice secondaire sur Url. Je voudrais également avoir une séquence pour l'identification automatique incrémentation. Je crée donc un SecondaryDatabase puis-je créer une séquence. Lors de l'initialisation de la séquence que je reçois une exception:

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)

Il semble que, pendant l'initialisation de la séquence de la base de données secondaire est obligé de mettre à jour. Lorsque je déboguer la méthode entryToObject de MyDocumentBiding les octets qu'il tente de convertir en objet semble aléatoire.

Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Je trouve que la solution consiste à créer un db séparé pour la séquence ou de faire le SecondaryKeyCreator détecter quand il ajoute une donnée de séquence et return false dans une telle situation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top