2013-08-01 27 views
1

我正在为我的数据库访问编写测试,并倾向于通过销毁数据库文件,然后添加数据并运行测试来启动它们。 (这是为了测试我的业务逻辑 - 我隐式地信任DataNucleus代码。)如何在单个JVM运行中重新启动DataNucleus?

我的测试不停地传递第一次运行,然后每次后续运行都失败。这是没有意义的,除了我倾向于在S​​BT命令提示符下运行我的测试,它在一个非常长寿命的JVM实例中运行一切。在某个时候,我添加了一个设置来为测试分叉一个新的JVM,并且每次都开始工作。

我终于明白了(我认为......)是DataNucleus为JVM初始化了自己,并创建了缓存和环境视图。当我删除数据库文件时,系统无法知道它需要重新初始化和重新创建所有内容,因为JVM并没有停下来,也没有理由知道我已经改变了背后的东西。

显然,分叉测试解决了这个问题,但我想知道是否有一个不太极端的解决方案。基本上,有没有办法让DataNucleus系统重新初始化?最干净的东西大概是我在单元测试结束时可以调用的一种方法,但是我可以在开始时调用的reinitialize()reload()也可以。

我曾尝试致电close()PersistenceManagerFactory,但这似乎并没有忘记足够的东西。

回答

1

关闭并创建一个新的PMF对我很有用,因为它创建了一个新的StoreManager,它为数据存储创建连接池(无论它在哪里)。日志会告诉你连接到数据存储的连接开始和结束以及连接池初始化的位置

+0

我改变了我的测试夹具以使用'SchemaAwareStoreManager.delete'和'create',现在一切似乎都奏效。不幸的是,我同时改变了一些其他的东西,所以目前还不清楚我是不是正确地关闭了“PersistenceManagerFactory”,或者我正在做其他事情。无论如何,关闭'PersistenceManagerFactory'确实有效。谢谢! – TOB

相关问题