我在OSGi环境中使用db4o 6.4.54作为模型存储。每次我重新启动OSGi框架时,数据库似乎都是空的,尽管文件在那里并且肯定不是空的。

我有以下配置:

核心软件包,它取决于db4o提供的标准db4o_osgi软件包。一个UI捆绑包,它取决于从中获取模型的核心插件。

核心捆绑包通过openServer(String,0)方法创建内存服务器,然后为每个请求/线程创建单独的客户端。

问题在于,每次创建db4o服务器时,查询都不会返回结果。

我尝试使用该服务,但也无法正常工作。

测试的下一步是将db4o直接包含在我的包中,并且可以正常工作(结果是db4o类由与存储在数据库中的模型对象相同的类加载器加载)。 db4o论坛上有一篇文章[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();
}


或者查看my standalone Db4oServer,它可能会收到来自客户端的消息“ STOP”以被停止。

07-24 19:06
查看更多