Db4o и OSGi - пустая база данных после перезапуска

Я использую db4o 6.4.54 в среде OSGi в качестве хранилища моделей. Каждый раз, когда я перезапускаю фреймворк OSGi, база данных кажется пустой, хотя файл есть и определенно не пустой.

У меня такая конфигурация:

Базовый пакет, который зависит от стандартного пакета db4o_osgi, предоставляемого db4o. Пакет пользовательского интерфейса, который зависит от основного плагина, откуда он получает модель.

Базовый пакет создает сервер в памяти с помощью метода openServer (String, 0), а затем создает отдельных клиентов для каждого запроса / потока.

Проблема в том, что каждый раз при создании сервера db4o запросы не возвращают результата.

Пытался воспользоваться услугой, но она тоже не сработала.

Следующим шагом в моем тестировании было включение db4o непосредственно в мой комплект, и это сработало (в результате классы db4o загружались тем же загрузчиком классов, что и объект модели, который я сохранил в базе данных). На форуме db4o есть одно сообщение [1], но оно не объясняет, почему существует эта проблема и как ее следует решить (правильно). Я продолжу свои исследования, но мне интересно, решал ли кто-нибудь эту проблему до меня?

Я столкнулся с похожей проблемой прямо сейчас. Вы когда-нибудь ее решали?

nawroth 22.09.2009 03:00

@nawroth - К сожалению, я не помню, что произошло. Это было давно по студенческому проекту. Я думаю, что я пошел другим путем или проигнорировал проблему. Я проверю свои источники, чтобы узнать, что случилось с проблемой.

Danail Nachev 02.06.2011 10:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
543
1

Ответы 1

Вы зафиксировали изменения и закрыли клиентское соединение при закрытии пакета 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» от клиента, который нужно остановить.

Другие вопросы по теме