db4o и OSGi - пустая база после перезапуска - PullRequest
0 голосов
/ 18 ноября 2008

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

У меня есть следующая конфигурация:

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

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

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

Я пытался использовать сервис, но он также не работал.

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

1 Ответ

1 голос
/ 21 января 2010

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

...