我在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”以被停止。