代码之家  ›  专栏  ›  技术社区  ›  xcut

JTA:如何测试JMS和JDBC失败?

  •  0
  • xcut  · 技术社区  · 15 年前

    我们目前正在一个系统上测试JTA失败行为,该系统使用JMS接收消息,持久化消息,并使用另一个类发送结果。

    整个东西是用弹簧绑在一起的。当前的单元测试使用HSQLDB、apacheactivemq和Bitronix进行事务管理。这方面的成功是有限的,主要是因为HSQLDB没有实现XA事务。

    所以问题是:如何在事务单元测试中最好地模拟数据库故障?有没有办法让标准的JDBC驱动程序(比如Oracle)在测试过程中失败?

    2 回复  |  直到 15 年前
        1
  •  3
  •   maximdim    15 年前

    您需要决定到底要测试什么—例如,如果您想用Bitronix测试Oracle在XA事务中的行为,那么模仿DAOs(如duffymo所建议的)对您没有帮助。在这种情况下,您需要找到一种在事务处理过程中中断连接的方法,然后看看Bitronix/Oracle将如何处理恢复—例如启发式结果等等。

    请注意,在相当多的情况下,有一些方法可以在不实际使用XA事务的情况下获得相同的功能。它可以更简单、更快、更易测试。例如,在非常常见的情况下,当消息从MOM和数据库中执行的DML中使用时,有一种常见的模式,即如何在没有XA的情况下离开,即使两个资源管理器正在更新。

        2
  •  1
  •   duffymo    15 年前

    因为您使用的是Spring,所以很容易编写DAO接口的新的、仅测试的实现,该实现以可重复的、可预测的方式运行。只为测试注入“古怪的刀”。

    当然,您使用的是XA驱动程序来连接数据库。否则,两阶段提交将不起作用。