我在 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。
实际行为非常好,如下所示:
- 如果全局超时 > 方法超时,则应用方法超时
- 如果全局超时 <= 方法超时,则应用全局超时
似乎应用的超时是两者中的最小值,如果我们想要延长覆盖全局值的特定方法的超时,这是一个真正的问题。
有任何想法吗?我错过了什么吗?