首页 文章

db4o - DatabaseClosedException

提问于
浏览
0

我试图通过arquillian测试用例存储db4o实体,并得到DatabaseClosedException:


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

测试运行:1,失败:0,错误:1,跳过:0,时间过去:2.149秒<<<失败! test_save(com.walterjwhite.address.api.datastore.TestAddressDatastore)经过的时间:0.68秒<<<错误! com.db4o.ext.DternalClosedException位于com.db4o.internal.ObjectContainerBase.checkClosed(ObjectContainerBase.java:303)com.db4o.internal.ObjectContainerBase.checkTransaction(ObjectContainerBase.java:331)com.db4o.internal.ObjectContainerBase . at com.bopLevelStore(ObjectContainerBase.java:412)com.db4o.internal.ObjectContainerBase.storeInternal(ObjectContainerBase.java:1602)at com.db4o.internal.ObjectContainerBase.store(ObjectContainerBase.java:1584)at com.db4o.internal.ObjectContainerBase .store(ObjectContainerBase.java:1576)位于com.db4o.internal.ObjectContainerSession.store(ObjectContainerSession.java:360)的com.walterjwhite.datastore.api.AbstractDatastore.save(AbstractDatastore.java:79)com.walterjwhite . address.api.datastore.org $ JBoss的$焊接$ beans 0b7a0e6e-330E-4c1b-8c9e-1e90ab004c80 $ JAR-ManagedBean-class_com $ walterjwhite $地址$ $ API数据存储$ AddressDatastore _ $$ _ WeldClientProxy.save(ORG $ $ jboss的焊缝$ beans 0b7a0e6e-330E-4c1b-8c9e-1e90ab004c80 $ JAR-ManagedBean-class_com $ walterjwhite $ address $ api $ datastore $ AddressDatastore _ $$ _ WeldClientProxy.java)位于sun的sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)的com.walterjwhite.address.api.datastore.TestAddressDatastore.test_save(TestAddressDatastore.java:67) . 在org.junit.runners的java.lang.reflect.Method.invoke(Method.java:616)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中的reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) .model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44)org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod . java:41)at org.jboss.arquillian.junit.Arquillian $ 6 $ 1.invoke(Arquillian.java:259)at the sun.reflect org.jboss.arquillian.impl.execution.LocalTestExecuter.execute(LocalTestExecuter.java:63)at sun.reflect sun.reflect.NativeMethodAccessorImpl.invoke上的.NativeMethodAccessorImpl.invoke0(Native Method)(NativeMetho) dAccessorImpl.java:57)位于org.jboss.arquillian.impl.core.ObserverImpl的java.lang.reflect.Method.invoke(Method.java:616)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) .invoke(ObserverImpl.java:90)org.jboss.arquillian.impl.core.EventContextImpl.invokeObservers(EventContextImpl.java:98)org.jboss.arquillian.impl.core.EventContextImpl.proceed(EventContextImpl.java:80) )org.jboss.arquillian.impl.core.ManagerImpl.fire(ManagerImpl.java:126)org.jboss.arquillian.impl.core.ManagerImpl.fire(ManagerImpl.java:106)org.jboss.arquillian的org.jboss.arquillian.impl.core.ManagerImpl.fire(ManagerImpl.java:126) . 位于org.jboss.arquillian.impl.execution的org.jboss.arquillian.impl.client.protocol.local.LocalContainerMethodExecutor.invoke(LocalContainerMethodExecutor.java:50)中的impl.core.EventImpl.fire(EventImpl.java:67) . RemoteTestExecuter.execute(RemoteTestExecuter.java:97)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at su n.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于org.jboss.arquillian.impl.core.ObserverImpl.invoke的java.lang.reflect.Method.invoke(Method.java:616)中(ObserverImpl.java: 90)在org.jboss.arcillian.arquillian的一个org.jboss.arquillian.impl.core.EventContextImpl.proceed(EventContextImpl.java:80)的org.jboss.arquillian.impl.core.EventContextImpl.invokeObservers(EventContextImpl.java:98)位于org.jboss.arquillian.impl.core.EventImpl.fire的org.jboss.arquillian.impl.core.ManagerImpl.fire(ManagerImpl.java:106)中的.impl.core.ManagerImpl.fire(ManagerImpl.java:126) (EventImpl.java:67)org.jboss.arquillian.impl.execution.ClientTestExecuter.execute(ClientTestExecuter.java:65)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl .java:57)在org.jboss.arqu的java.lang.reflect.Method.invoke(Method.java:616)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) illian.impl.core.ObserverImpl.invoke(ObserverImpl.java:90)at在org.jboss.arquillian.impl的org.jboss.arquillian.impl.core.EventContextImpl.proceed(EventContextImpl.java:80)中的org.jboss.arquillian.impl.core.EventContextImpl.invokeObservers(EventContextImpl.java:98) . client.ContainerDeploymentContextHandler.createContext(ContainerDeploymentContextHandler.java:133)位于sun.reflect的sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)的org.jboss.arquillian.impl.client.ContainerDeploymentContextHandler.createTestContext(ContainerDeploymentContextHandler.java:120) . NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)位于org.jboss.arquillian.impl的java.lang.reflect.Method.invoke(Method.java:616)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于org.jboss.arquillian.impl.core.EventContextImpl.proceed(EventContextImpl.java:87)的.core.ObserverImpl.invoke(ObserverImpl.java:90)org.jboss.arquillian.impl.TestContextHandler.createTestContext(TestContextHandler.java) :82)在sun.reflect.NativeMeth od.ccessorImpl.invoke0(本机方法)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method . 的java:616)在org.jboss.arquillian.impl.core.ObserverImpl.invoke(ObserverImpl.java:90)在org.jboss.arquillian.impl.core.EventContextImpl.proceed(EventContextImpl.java:87)在org.jboss .arquillian.impl.TestContextHandler.createClassContext(TestContextHandler.java:68)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(Method.java:616)在org.jboss.arquillian.impl.core.ObserverImpl.invoke(ObserverImpl.java:90)在org.jboss . org.jboss.arquillian.impl.TestConte中的arquillian.impl.core.EventContextImpl.proceed(EventContextImpl.java:87) xtHandler.createSuiteContext(TestContextHandler.java:54)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43)在java.lang.reflect.Method.invoke(Method.java:616)在org.jboss.arquillian.impl.core.ObserverImpl.invoke(ObserverImpl.java:90)在org.jboss.arquillian.impl.core位于org.jboss.arquillian.impl.core.Manager中的orE.jboss.arquillian.impl.core.ManagerImpl.fire(ManagerImpl.java:126)的.EventContextImpl.proceed(EventContextImpl.java:87) . 事件测试 . 事件测试 . 事件测试)org.jboss.arquillian.junit.Arquillian $ 6.evaluate(Arquillian.java:251)org.jboss.arquillian.junit.Arquillian $ 4.evaluate(Arquillian.java:214)at org.jboss.arquillian.junit . Arquillian.multiExecute(Arquillian.java:303)在org.jboss.arquillian.junit.Arquillian.access $ 300(Arquillian.java:45)在org.jboss.arquillian.junit.Arquillian $ 5.在org.junit.runners的org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)的org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)中评估(Arquillian.java:228) .blockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:193)atg.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:52)at org . junit.runners.ParentRunner.runChildren(ParentRunner.java:191)org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:42)org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:184) at org.jboss.arquillian.junit.Arquillian $ 2.evaluate(Arquillian.java:173)org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:303)at org.jboss.arquillian.junit.Arquillian . 访问$在org.jboss.arquillian.junit.Arquillian $ 3.evaluate 300(Arquillian.java:45)(Arquillian.java:187)在org.junit.runners.ParentRunner.run(ParentRunner.java:236)在org.jboss .arquill ian.junit.Arquillian.run(Arquillian.java:127)org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35)at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet( JUnit4Provider.java:115)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl . java:57)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于org.apache.maven.surefire.booter.ProviderFactory $ ClassLoaderProxy.invoke(ProviderFactory)的java.lang.reflect.Method.invoke(Method.java:616) . java:103)在org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150)的$ Proxy0.invoke(未知来源)org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter) .java:91)at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)

@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,这将是一个不同的异常 .

我在代码中放了一些调试语句,以确保在存储调用之后才调用dispose方法,这样我就可以排除这个潜在的问题 .

准备容器还需要做些什么?

谢谢,

沃尔特

3 回答

  • 1

    你看到在tmp中创建的文件test.db4o了吗?确保编写db的目录存在,并且可以尝试创建它的进程访问 .

  • 0

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

  • 0

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

    在我将其更改为适用于服务器的单一范围后,它起作用了 .

    沃尔特

相关问题