6

我在 JBoss 5.1 上部署了一个基于 EJB 3.0 的应用程序。在 ${JBOSS_HOME}/server/default/deploy/transaction-jboss-beans.xml 的属性transactionTimeout上配置的事务超时的全局值对于我们的大多数 EJB 方法都很好。但是,我们有一些方法的持续时间预计会比那里设置的值长得多。我们想专门为这些方法覆盖超时。

我们已经尝试按照此处的说明进行操作,即让全局值具有合理的值,然后尝试通过 jboss.xml 中的部署描述符或方法中的 jboss 特定注释来专门覆盖某些方法。

这些方法在无状态会话 bean 容器中进行管理。我什至强迫这些方法创建一个新事务,因为在某些地方据说只有在那个时刻创建事务时注释才有效。

../..
import org.jboss.ejb3.annotation.TransactionTimeout;
../..
    @Override
        @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
        @TransactionTimeout(900)
        public FileInfoObject setFileVariable(Desk desk, String variable, int maxBytes,
                String mimeAccepted, FileWithStream file)
                throws ParticipationFinishedException, PersistenceException {

../..
        }

预期的行为是,对于此方法,超时应为 900。

实际行为非常好,如下所示:

  • 如果全局超时 > 方法超时,则应用方法超时
  • 如果全局超时 <= 方法超时,则应用全局超时

似乎应用的超时是两者中的最小值,如果我们想要延长覆盖全局值的特定方法的超时,这是一个真正的问题。

有任何想法吗?我错过了什么吗?

4

0 回答 0