为什么要使用@Transactional Jboss Seam

时间:2016-01-28 14:11:06

标签: java jboss-seam

我试图理解为什么在某些情况下我需要使用@Transactional,让我们看看。

如果我在没有@Transactional注释的情况下使用此方法,则日志返回jboss:“自己关闭连接。为您关闭连接”。

public void doSomething() {

        ((Session) em.getDelegate()).doWork(new Work() {
            @Transactional(TransactionPropagationType.NEVER)
            public void execute(Connection connection) throws SQLException {
                StringBuilder sqlSP = new StringBuilder();
                sqlSP.append("{ call ");
                sqlSP.append("myprocedure");
                sqlSP.append("(?)}");

                connection.setReadOnly(true);
                CallableStatement cs = connection.prepareCall(sqlSP.toString());

                cs.setInt(1, 1020);             
                cs.execute();

                //FORCE A EXCEPTION and JBOSS SHOW "Closing connection for you"
                throw new MyException("FATAL ERROR");
            }
        });
    }

但是当我把“@Transactional”问题消失时,我不明白为什么。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

处理数据库调用的标准方法是: 1.打开连接 2.开放会话和/或交易 做的事情 4.关闭交易和/或关系 5.密切联系

这基本上就是那个注释对你有什么作用;)我强烈建议学习更多关于用这些东西去除的东西。