In the framework, I'm trying to enforce optimistic locking and a unique 
constraint on the "name" attribute.  For optimistic locking, there's not a lot 
I can do except kick them out (they can always open a new window and use their 
back button to copy their changes and merge them in).  For name conflicts, I 
thought to add a message and let them try something else.

Here's the code:


  |     @End @Transactional @Override
  |     public String update() {
  |             getInstance().setUpdatedOn(new Date());
  |             try {
  |                     return super.update();
  |             } catch (OptimisticLockException e) {
  |                     facesMessages.add("#{messages.staleEditRule}");
  |                     return "aborted";
  |             } catch (EntityExistsException e) {
  |                     facesMessages.add("name", "#{messages.errNameExists}");
  |                     return null;
  |             } catch (RuntimeException e) {
  |                     facesMessages.add(e.toString());
  |                     return null;
  |             }
  |     }
  | 

Only problem is, this appears to work -- you correct the name, hit update, your 
changes appear to take, you're back in the view screen -- but when you next 
view the entity you edited, you find your changes never actually took.

I think I understand why this is happening -- the session is no longer valid 
after an exception -- but there's no indication even in log messages that this 
has happened, and the update was just silently dropped.

So I have two questions: 

1) Is the lost update detectable somehow?  I feel like EntityManager should 
have screamed at me for trying to update again after the exception, but it gave 
nary a peep.  

2) How do I gracefully recover from errors on update and reset the 
entityManager so further updates can succeed?  Should I make the unique 
constraint a validator instead?  Enforcing unique constraints must be a FAQ for 
Hibernate, but I haven't found an answer yet.



View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3982209#3982209

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3982209
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to