我正在尝试从JPA迁移到JTA并使用bitronix事务管理器。尝试运行单元测试时,我收到以下错误消息。根据bitronix文档,这是正常的b / c我的spring上下文配置试图加载资源两次(一次在基类中,然后在测试类中,请参见下面的代码),我尝试过与atomikos相同,我得到了类似的结果。
引起: java.lang.IllegalArgumentException异常: 具有uniqueName'xyzDb'的资源 已经注册
我的基类
@ContextConfiguration(locations = {"classpath:com/xyz/baseContext.xml"})
@Transactional
public abstract class AbstractTestSupport extends Assert implements ApplicationContextAware
{
在某些单元测试中,我必须扩展测试支持并添加如下所示的上下文配置文件。所以它为基类加载一次上下文,为子类加载另一次,并且失败
儿童班
@ContextConfiguration(locations = {"classpath:com/xyz/testContext.xml"})
public class UnitTest extends AbstractTestSupport
{
在测试之后,我正在关闭上下文,所以只要不使用另一个上下文配置文件扩展基类,下一个测试就可以正常工作。
@AfterClass
public static void onTearDownAfterClass() throws Exception
{
applicationContext.shutdownApplicationContext();
assertFalse("Spring application context is still active after shutdown. ", applicationContext.isActive());
}
我想在子类中保留上下文配置文件并使其工作,任何想法都非常赞赏....
答案 0 :(得分:1)
错误消息基本上意味着您在抛出异常时第二次创建了具有唯一名称'xyzDb'的连接池(请记住您需要在BTM的池上设置uniqueName属性吗?)。您不能这样做:每个连接池必须具有唯一的名称,并且必须先关闭,然后才能创建另一个具有相同名称的连接池。
我认为你的两个上下文文件之间存在一些重叠导致这种情况,或者连接池并不总是像他们应该那样关闭。不幸的是,您发布的信息太少,无法得到明确的答案。