如何使用普通JDBC处理J2EE 1.4中的事务

Bac*_*ria 11 java jsp transactions jdbc java-ee

我正在开发一个酒店预订网站.它是一个J2EE 1.4 Web应用程序,使用JSP和JDBC.

我有一种方法负责预订酒店房间.

booking()
Run Code Online (Sandbox Code Playgroud)

从这个方法我称其他四种方法

bookRooms()
makePayment()
confirmUserByMail()
confirmUserBySMS()
Run Code Online (Sandbox Code Playgroud)

我知道有两个用户可以尝试同时预订同一个房间,而在我目前的系统中,两个用户可能最终会使用同一个房间.

我应该如何处理事务以避免这种并发问题?

这可能是非常常见的情况,但我之前从未处理过这种情况,所以请指导我.

Das*_*man 0

我确信有高级方法可以做到这一点,但我只会使用一个简单的布尔值 isFull 并在预订时使其变为 true。

boolean roomIsFull = false;
if (roomIsFull)
{
    //Sir this room is already booked. Please Pick Another.
}
else
{
    //Do your stuff.
    roomIsFull = true;
}
Run Code Online (Sandbox Code Playgroud)

然后您仍然可以使用当前的代码。

为了确保一个房间只被预订一次,可以使用synchronized关键字来确保该方法只能使用一次(这不是最好的,因为不能同时预订两个不同的房间)

其他选项是使用 volatile 关键字,这样如果正在访问房间对象,其他方法就可以看到它。

资料来源:http ://www.vogella.com/tutorials/JavaConcurrency/article.html#concurrency_overview