закрытые открытые курсоры java berkeley db - PullRequest
1 голос
/ 13 сентября 2011

Я получаю это исключение открытых курсоров при закрытии некоторых магазинов на Беркли, БД:

Exception in thread "main" java.lang.IllegalStateException: Database still has 1 open cursors while trying to close.
    at com.sleepycat.je.Database.closeInternal(Database.java:462)
    at com.sleepycat.je.Database.close(Database.java:314)
    at com.sleepycat.persist.impl.Store.closeDb(Store.java:1449)
    at com.sleepycat.persist.impl.Store.close(Store.java:1058)
    at com.sleepycat.persist.EntityStore.close(EntityStore.java:626)

Эта ошибка возникает "на myStore.close ()":

public void close() throws DatabaseException {
    myStore.close();
    myDB.close();
    env.close();
}

Но я не открывал курсор вручную.

Я искал эту ошибку и не нашел ничего особенного, что мне нужно было сделать (потому что я не открывал курсор вручную).

Так что я думаю, что сделал что-то не так при открытии базы данных. Что я делаю при открытии магазина:

myStore = new EntityStore(env, "StoreTest", storeConfig);
PrimaryIndex<Long, MYClass> myPrimaryIndex = myStore.getPrimaryIndex(Long.class, MyClass.class);

Опять же: я не открывал курсор вручную.

1 Ответ

0 голосов
/ 29 марта 2012

Любой вызов EntityIndex.entities () открывает курсор независимо от того, назначаете ли вы его переменной или нет.Поэтому убедитесь, что вы присваиваете его объекту EntityCursor и впоследствии вызываете его метод close (), например:

EntityCursor<Employee> cursor = primaryIndex.entities();
try {
         ...
} finally {
    cursor.close();
}

У меня была похожая проблема, и это было решением, также опубликованным наOTN форумы здесь: https://forums.oracle.com/forums/thread.jspa?messageID=10241239

...