package org.easyframe.tutorial.lessonb; import java.sql.SQLException; import jef.database.SqlTemplate; import org.easyframe.enterprise.spring.CommonDao; import org.easyframe.tutorial.lesson1.entity.Foo2; import org.easyframe.tutorial.lesson2.entity.Student; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; /** * JTA事务的测试/演示 * @author jiyi * */ @ContextConfiguration(locations = { "classpath:spring/spring-test-jta.xml" }) public class CaseJTA extends AbstractJUnit4SpringContextTests { @Autowired private CommonDao dao; @Autowired private JTATestService service; @Before public void setup() throws SQLException { dao.getNoTransactionSession().getMetaData("ds1") .dropTable(Foo2.class); dao.getNoTransactionSession().getMetaData("ds2") .dropTable(Student.class); dao.getNoTransactionSession().getMetaData("ds1") .createTable(Foo2.class); dao.getNoTransactionSession().getMetaData("ds2") .createTable(Student.class); // LogUtil.show(dao.getNoTransactionSession().getMetaData("ds1").getTables()); // LogUtil.show(dao.getNoTransactionSession().getMetaData("ds2").getTables()); } /** * 观察输出结果,两张表的记录数都增加了1,说明两个库的操作都被提交了。 * @throws SQLException */ @Test public void testSuccessJTA() throws SQLException { SqlTemplate ds1 = dao.getSession().getSqlTemplate("ds1"); SqlTemplate ds2 = dao.getSession().getSqlTemplate("ds2"); long o1 = ds1.countBySql("select count(*) from foo2"); long o2 = ds2.countBySql("select count(*) from student"); service.success1(); long n1 = ds1.countBySql("select count(*) from foo2"); long n2 = ds2.countBySql("select count(*) from student"); System.out.printf("Foo %d -> %d%n", o1, n1); System.out.printf("Student %d -> %d%n", o2, n2); } /** * 观察输出结果,两张表的记录数都增加了1,说明两个库的操作都被提交了。 * @throws SQLException */ @Test public void testFailure1() throws SQLException { SqlTemplate ds1 = dao.getSession().getSqlTemplate("ds1"); SqlTemplate ds2 = dao.getSession().getSqlTemplate("ds2"); long o1 = ds1.countBySql("select count(*) from foo2"); long o2 = ds2.countBySql("select count(*) from student"); service.failure1(); long n1 = ds1.countBySql("select count(*) from foo2"); long n2 = ds2.countBySql("select count(*) from student"); System.out.printf("Foo %d -> %d%n", o1, n1); System.out.printf("Student %d -> %d%n", o2, n2); } /** * 操作中出现错误,两张表都被回滚,操作前后数据不变。 * @throws SQLException */ @Test public void testFailure2() throws SQLException { SqlTemplate ds1 = dao.getSession().getSqlTemplate("ds1"); SqlTemplate ds2 = dao.getSession().getSqlTemplate("ds2"); long o1 = ds1.countBySql("select count(*) from foo2"); long o2 = ds2.countBySql("select count(*) from student"); try{ service.failure2(); }catch(Exception e){ System.out.println("method exit with exceptions"); } long n1 = ds1.countBySql("select count(*) from foo2"); long n2 = ds2.countBySql("select count(*) from student"); System.out.printf("Foo %d -> %d%n", o1, n1); System.out.printf("Student %d -> %d%n", o2, n2); } /** * 操作中出现错误,两张表都被回滚,操作前后数据不变。 * @throws SQLException */ @Test public void testFailure3() throws SQLException { SqlTemplate ds1 = dao.getSession().getSqlTemplate("ds1"); SqlTemplate ds2 = dao.getSession().getSqlTemplate("ds2"); long o1 = ds1.countBySql("select count(*) from foo2"); long o2 = ds2.countBySql("select count(*) from student"); try{ service.failure3(); }catch(Exception e){ System.out.println("method exit with exceptions"); } long n1 = ds1.countBySql("select count(*) from foo2"); long n2 = ds2.countBySql("select count(*) from student"); System.out.printf("Foo %d -> %d%n", o1, n1); System.out.printf("Student %d -> %d%n", o2, n2); } }