db4o和OSGi - 重新启动后清空数据库

时间:2008-11-18 16:59:01

标签: java osgi db4o

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

我有以下配置:

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

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

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

我尝试使用该服务,但它也无效。

我测试的下一步是将db4o直接包含到我的bundle中并且它有效(效果是db4o类由与模型对象相同的类加载器加载,我将其存储到数据库中)。 db4o论坛[1]中有一篇文章,但它无法解释为什么存在这个问题以及如何解决(正确)。我会继续我的调查,但我想知道是否还有其他人在我面前摆脱这个问题?

1 个答案:

答案 0 :(得分: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,它可以从客户端接收消息“停止”以停止。