Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Play framework 1处理乐观锁定_Java_Jpa_Playframework_Version_Optimistic Locking - Fatal编程技术网

Java 使用Play framework 1处理乐观锁定

Java 使用Play framework 1处理乐观锁定,java,jpa,playframework,version,optimistic-locking,Java,Jpa,Playframework,Version,Optimistic Locking,我的头脑不太清醒。我使用的框架是Play1.2.5 比如说我在卖音乐会门票。我目前有以下情况: if (concert.ticketsSold < concert.tickets) { concert.ticketsSold ++; concert.save(); } 然而,当几个人同时预订时,TicketsSeld柜台的实际销售价值落后。当我卖出2700英镑时,我会说是2500英镑 这就是我开始阅读乐观锁例外的时候。在我在interweb上找到的所有示例中,人们倾向于捕

我的头脑不太清醒。我使用的框架是Play1.2.5

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

if (concert.ticketsSold < concert.tickets) {
    concert.ticketsSold ++;
    concert.save();
}
然而,当几个人同时预订时,TicketsSeld柜台的实际销售价值落后。当我卖出2700英镑时,我会说是2500英镑

这就是我开始阅读乐观锁例外的时候。在我在interweb上找到的所有示例中,人们倾向于捕捉OptimisticLockException,并向用户显示错误

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

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或其他。这些东西很难测试。你能证明票的数量应该改变,票的价值应该是多少吗?concert.refresh上应该执行什么代码?是的,我的测试方法是在从数据库获取模型后设置断点,然后在数据库中更改版本号和TicketsSeld计数器。。当代码运行时,新更新的对象永远不会被获取..Ha和refresh是JPA EntityManager中的一个标准方法:看起来这可能会有所帮助,如果是这样的话,将更新这个问题