【问题标题】:db4o - DatabaseClosedExceptiondb4o - 数据库关闭异常
【发布时间】:2011-09-19 04:45:45
【问题描述】:

我正在尝试通过一个 arquillian 测试用例使用 db4o 存储一个实体,并得到一个 DatabaseClosedException:


测试集:com.walterjwhite.address.api.datastore.TestAddressDatastore

测试运行:1,失败:0,错误:1,跳过:0,经过的时间:2.149 秒

@Produces
protected ObjectServer openServer(ApplicationContext applicationContext)
{
    return (Db4oClientServer.openServer("/tmp/test.db4o", 0));
}

@Produces
public ObjectContainer getObjectContainer(ObjectServer objectServer)
{
    return (objectServer.openClient());
}

对于我的测试用例,我正在使用 /tmp 中的文件创建一个对象服务器。创建文件后,通过 setter 自动注入对象容器,否则 objectContainer 将为 null,这将是一个不同的异常。

我在代码中加入了一些调试语句,以确保在 store 调用之后才调用 dispose 方法,这样我就可以排除潜在的问题。

我还需要做什么来准备容器?

谢谢,

沃尔特

【问题讨论】:

    标签: java db4o jboss-arquillian


    【解决方案1】:

    当我过去发生这种情况时,在引发此异常之前,较早的错误已关闭数据库。我的建议是在抛出此错误之前查找其他错误。

    【讨论】:

    • 好的,会的。可能是在施工过程中工厂抛出了异常,我没有记录它,因此不知道。
    【解决方案2】:

    你看到文件 test.db4o 是在 tmp 中创建的吗? 确保您编写数据库的目录存在并且可以被尝试创建它的进程访问。

    【讨论】:

    • 是的,我指出该文件已创建并且大于 0 字节。
    【解决方案3】:

    我想通了...我没有在我的 bean 上指定正确的范围...我编写了一个没有 Weld / CDI 的简单测试应用程序,它运行良好。 ObjectServer 在打开后几乎立即关闭。

    在我将其更改为适当的范围(即服务器的单例)后,它就可以工作了。

    沃尔特

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多