有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通过Play framework 1处理乐观锁定

我的头脑不太清醒。我使用的框架是Play 1.2.5

比如说我在卖音乐会门票。我目前有以下几点:

if (concert.ticketsSold < concert.tickets) {
    concert.ticketsSold ++;
    concert.save();
}

然而,当几个人同时预订时,售票柜台的实际销售价值“滞后”。当我卖出2700英镑时,我会说是2500英镑

这是我开始阅读有关乐观锁例外的文章的时候。在我在互联网上找到的所有例子中,人们倾向于捕捉乐观锁异常,并向用户显示错误

我想要的是,系统在向用户显示错误之前,重试一定次数。我写的代码如下:

boolean saved = false;
int tries = 0;
while (!saved) {
    try {
        if (concert.ticketsSold < concert.tickets) {
            concert.ticketsSold ++;
            concert.save();
            saved = true;
        } else break;
    } catch (OptimisticLockException e) {
        // reload concert object from the database
        concert.refresh();
    }
    if (tries > 9) break;
    tries++;
}

如上所述,我尝试从数据库中重新加载对象,以获得“更新”的对象,并获得正确数量的已售出票证,但无论我尝试什么(刷新、重新加载、提交和开始新事务),对象都不会刷新,我仍然会得到对象的正常“缓存”版本

你知道我做错了什么吗

非常感谢

阿克塞尔

PS:我没有使用任何缓存系统,比如memchached或其他


共 (0) 个答案