Tôi mới tham gia JPA nên tha thứ cho tôi nếu không rõ ràng.Làm cách nào để xử lý một javax.persistence.OptimisticLockException?
Về cơ bản, tôi muốn ngăn việc sửa đổi đồng thời bằng cách sử dụng Khóa lạc quan. Tôi đã thêm thuộc tính @Version vào lớp thực thể của mình.
Tôi cần biết liệu thuật toán này có đang xử lý OptimisticLockException không. Tôi sẽ sử dụng Execute Around Idiom như vậy:
interface UpdateUnitOfWork
{
doUpdate(User user); /* may throw javax.persistence.PersistenceException */
}
public boolean exec(EntityManager em, String userid, UpdateUnitOfWork work)
{
User u = em.find(User, userid);
if(u == null)
return;
try
{
work.doUpdate(u);
return true;
}
catch(OptimisticLockException ole)
{
return false;
}
}
public static void main(..) throws Exception
{
EntityManagerFactory emf = ...;
EntityManager em = null;
try
{
em = emf.createEntityManager();
UpdateUnitOfWork uow = new UpdateUnitOfWork() {
public doUpdate(User user)
{
user.setAge(34);
}
};
boolean success = exec(em, "petit", uow);
if(success)
return;
// retry 2nd time
success = exec(em, "petit", uow);
if(success)
return;
// retry 3rd time
success = exec(em, "petit", uow);
if(success)
return;
}
finally
{
em.close();
}
}
Các câu hỏi tôi có là làm thế nào để bạn quyết định khi nào phải ngừng thử lại?