【发布时间】:2015-08-28 22:28:15
【问题描述】:
我正在开发一个酒店预订网站。它是一个 J2EE 1.4 Web 应用程序,使用 JSP 和 JDBC。
我有一种方法负责预订酒店房间。
booking()
从这个方法我调用其他四个方法
bookRooms()
makePayment()
confirmUserByMail()
confirmUserBySMS()
我知道两个用户可以尝试同时预订同一个房间,而在我当前的系统中,两个用户最终可能会预订同一个房间。
我应该如何处理事务以避免这个并发问题?
这可能是很常见的情况,但我以前从未处理过这种情况,所以请指导我。
【问题讨论】:
-
在 bookRooms 方法中,您可以保留房间。在 makePayment 方法中,您可以预订房间或释放房间。这就像一个数据库事务,所有更改都已完成,或者您回滚更改。
-
@Gilbert Le Blanc 你能否详细说明一下。
-
如果您可以切换到 spring - 它具有基于 txns 的注释、更好的安全性、bean 支持...请参阅github.com/tgkprog/sel2inSmsSend 的示例@阅读我的说明
-
“J2EE 使用 JSP 和 JDBC”,换句话说,你手头没有 EJB?您真的是指十多年前的 J2EE 1.2/1.3/1.4 中的“J2EE”吗?您实际上不使用 Java EE 5 或 6 或 7 吗?还是您认为 Tomcat 是“J2EE”服务器?您的目标/部署到哪台服务器?标准 Java EE 仅提供用于完全透明的自动事务管理的 EJB。另见 a.o. stackoverflow.com/questions/18369356/… 了解一些相关背景信息。
-
@BalusC 基本上我们有一个在 J2EE 1.4 中开发的旧应用程序,它运行在 Tomcat Web 服务器中,这个新部分是对该主应用程序的增强。并且应用程序所有者对升级任何东西都不感兴趣。所以我不能使用 EjB /spring 等,尽管它们提供完全透明的自动事务管理。我理解你的观点,但我的双手被束缚了。我必须对 Jsp 和 JDBC 严格。
标签: java jsp jakarta-ee jdbc transactions