[jboss-user] [EJB/JBoss] - When is the optimistic lock check done?

sdawson do-not-reply at jboss.com
Thu Jul 13 17:37:35 EDT 2006


Hello,

I have a question regarding when an optimistic lock check is performed.  As per the EJB 3.0 specification, when we attempt to merge a detatched entity that has a stale version, the exception is thrown.  However, consider the following case:


  | @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
  | public void versionTest(Long id, String value) {
  |        DbSample sample = entityManager.find(DbSample.class, id);
  |        id.setValue(value);
  |        entityManager.flush();
  | }
  | 

(where DbSample is an entity bean with a @Version property)

Now, consider the following set of events:

Client A calls versionTest(1, "ClientA") and a breakpoint is set after the sample is fetched
Client B calls versionTest(1, "ClientB") and a breakpoint is set after the sample is fetched
Client B is allowed to continue its transaction and commit.
Client A is then allowed to continue its transaction and commit.

Instead of an optimistic lock exception being thrown, the result is that the value "ClientB" is saved to the database, and the version is incremented by 1.  The ClientA method call seems to be silently ignored despite committing last.

Is this the expected behaviour?  The EJB 3.0 specification states that the optimistic lock check is supposed to be done at transaction commit time.  This seems like a bug.  Thoughts?

-Sean

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

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3957902



More information about the jboss-user mailing list