bitronix事务管理器

时间:2011-02-18 22:00:30

标签: spring jta

我正在尝试从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());
}

我想在子类中保留上下文配置文件并使其工作,任何想法都非常赞赏....

1 个答案:

答案 0 :(得分:1)

错误消息基本上意味着您在抛出异常时第二次创建了具有唯一名称'xyzDb'的连接池(请记住您需要在BTM的池上设置uniqueName属性吗?)。您不能这样做:每个连接池必须具有唯一的名称,并且必须先关闭,然后才能创建另一个具有相同名称的连接池。

我认为你的两个上下文文件之间存在一些重叠导致这种情况,或者连接池并不总是像他们应该那样关闭。不幸的是,您发布的信息太少,无法得到明确的答案。