2016-01-28 30 views
0

我想了解为什么我需要在某些情况下使用@Transactional,让我们来看看。为什么要使用@Transactional Jboss Seam

如果我没有使用@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”的问题消失了,我不明白为什么。有人可以解释吗?

+0

你知道交易是什么吗? – Kayaman

回答

1

处理DB电话标准的方法是:1。 打开连接 2.打开的会话和/或交易 3.做的东西 4.关闭交易和/或seasion 5.密切的联系

这基本上是注解为你做了什么;)我强烈建议了解更多有关这些事情的信息。