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) 

시퀀스의 초기화 동안 보조 데이터베이스 업데이트 강제 것으로 보인다 : 시퀀스의 초기화 동안 나는 예외를 얻을. MyDocumentBiding의 entryToObject 메소드를 디버깅 할 때 객체로 변환하려고 시도하는 바이트가 무작위로 보입니다.

내가 뭘 잘못하고 있니?

답변

0

해결 방법은 시퀀스에 대해 별도의 db를 만들거나 SecondaryKeyCreator가 시퀀스 데이터를 추가 할 때이를 감지하여 이러한 상황에서 false를 반환하는 것입니다.

관련 문제