gpt4 book ai didi

transactions - EJB (3.1) 容器内 iBATIS 3 中的事务管理

转载 作者:行者123 更新时间:2023-12-01 04:18:40 25 4
gpt4 key购买 nike

有没有人使用 iBATIS 3 作为 EJB 容器内的持久性框架?我最近开始构建一个新系统,我选择 EJB 3.1(EJB 的版本实际上与这个问题无关)作为我的应用程序框架和 iBATIS 3(这个版本是相关的!)作为我的持久性框架。我的业务逻辑是在使用 iBATIS 3 进行数据访问的 EJB 3.1 session bean 中实现的。我在 GlassFish v3 上运行)

我对这个堆栈的问题是事务管理。我已经通过编写一些简单的集成代码解决了我的问题,但我对必须这样做并不感到惊讶。所以我决定发布这个,看看其他人是否遇到过这个问题,如果有,他们是如何解决这个问题的。

我的要求是让 iBATIS 3 在 session bean 方法中透明地使用 EJB 事务(通常以声明方式定义)。 iBATIS 3 提供了 2 个事务工厂 JdbcTransactionFactory 和 ManagedTransactionFactory,我发现它们都不能在 EJB 环境中正常工作(查看 iBATIS 源代码很清楚它失败的原因)。

JdbcTransactionFactory 不合适,因为我希望忽略对 sqlSession.commit() 或 sqlSession.rollback() 的任何调用。所以我想我应该使用 ManagedTransactionFactory 因为它确实会导致对 sqlSession.commit() 或 sqlSession.rollback() 的任何调用被忽略,但是它也会导致 sqlSession.close() 不关闭 iBATIS 从sqlSession.open() 中的数据源(数据源是我提供给 iBATIS 的容器管理的数据源对象)。这会导致 GlassFish 耗尽其连接池并且应用程序失败。

所以我写了一个新的 TransactionFactory 实现,EJBTransactionFactory,它导致 sqlSession.commit() 或 sqlSession.rollback() 什么也不做,但是 关闭 调用 sqlSession.close() 时的连接。

我怀疑其他人也遇到过这个问题,你是怎么解决的?

最佳答案

关于transactions - EJB (3.1) 容器内 iBATIS 3 中的事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2663714/

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