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) 个答案