gpt4 book ai didi

jakarta-ee - 挂起的事务是否超时?

转载 作者:行者123 更新时间:2023-12-02 02:56:19 24 4
gpt4 key购买 nike

我有一个在 JBOSS EAP 7 上运行的 JEE 应用程序。有一个长时间运行的异步方法可以将数据导入另一个系统。 bee 触发后,它在 5 分钟后遇到事务问题,这是 JBOSS 默认事务超时。到现在为止还挺好。我改变了行为(伪代码):

Before:
@Transactional(Required) //which is default
//The whole process takes usually longer than 5 min
void doImport{
for(n-number of datsets){
importOneDataSet();
}
}

After:
@Transactional
void doImport{
for(n-number of datsets){
importOneDataSet();
}
}
...
@Transactional(Requires_New)
//a new transaction is created and the "outer" is suspended
//to import one dataset is below 5min
void importOneDataSet(){
...
}

我假设外部事务超时在暂停/挂起时停止,但 5 分钟后我仍然遇到事务超时错误。

那么似乎挂起事务并不会影响其事务超时?该应用程序服务器是否特定于我们在 JEE 标准中定义的? 第三个问题是:你将如何解决这个问题?不打开外层交易?增加该事务的超时(仅)?

令人费解的是,我读过的大多数交易文章甚至都没有提到这个事实。关于该主题的唯一提示是 one blog post .

最佳答案

AFAIK 您无法配置外部事务超时会发生什么。嵌套事务永远不会设置暂停外部事务的超时时间。如果您不想影响外部事务超时,则应该使内部事务异步。这样该方法将立即返回并且不会影响外部 tnx 超时。所以在你的例子中,我会尝试使 importOneDataSet 异步。但是您应该知道,如果您将其设为异步,则无法保持完全导入的一致性(即使您将 tnx 类型设置为 required 事务管理器,外部事务也无法回滚内部异步事务的工作,也无法在多个线程上保持相同的事务打开)。因此,如果您的完全导入必须保持一致,或者您必须保持数据集导入的顺序,那么最简单的解决方案是增加导入的 tnx 时间。如果完全导入的超时时间太长(意味着如果出现错误,您会丢失太多工作),您应该将大的工作分开,只导入较小的工作块,在那里您可以独立于其他块重复单个工作块万一出错。

关于jakarta-ee - 挂起的事务是否超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49189873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com