Я использую db4o 6.4.54 в среде OSGi в качестве хранилища моделей. Каждый раз, когда я перезапускаю фреймворк OSGi, база данных кажется пустой, хотя файл есть и определенно не пустой.
У меня такая конфигурация:
Базовый пакет, который зависит от стандартного пакета db4o_osgi, предоставляемого db4o. Пакет пользовательского интерфейса, который зависит от основного плагина, откуда он получает модель.
Базовый пакет создает сервер в памяти с помощью метода openServer (String, 0), а затем создает отдельных клиентов для каждого запроса / потока.
Проблема в том, что каждый раз при создании сервера db4o запросы не возвращают результата.
Пытался воспользоваться услугой, но она тоже не сработала.
Следующим шагом в моем тестировании было включение db4o непосредственно в мой комплект, и это сработало (в результате классы db4o загружались тем же загрузчиком классов, что и объект модели, который я сохранил в базе данных). На форуме db4o есть одно сообщение [1], но оно не объясняет, почему существует эта проблема и как ее следует решить (правильно). Я продолжу свои исследования, но мне интересно, решал ли кто-нибудь эту проблему до меня?
@nawroth - К сожалению, я не помню, что произошло. Это было давно по студенческому проекту. Я думаю, что я пошел другим путем или проигнорировал проблему. Я проверю свои источники, чтобы узнать, что случилось с проблемой.




Вы зафиксировали изменения и закрыли клиентское соединение при закрытии пакета osgi?
Например: что-то вроде
ObjectContainer client;
public void start(BundleContext context) throws Exception {
client = Db4oClientServer.openClient(...);
}
public void stop(BundleContext context) throws Exception {
if (!client.ext().isClosed())
client.close();
}
Или загляните в мой автономный Db4oServer, который может получить сообщение «STOP» от клиента, который нужно остановить.
Я столкнулся с похожей проблемой прямо сейчас. Вы когда-нибудь ее решали?