Hi Broc, thanks for the reply.

This sounds great to me. I'm concerned about one small note on this
page: http://code.google.com/appengine/docs/java/datastore/transactions.html

"If your app receives an exception when submitting a transaction, it
does not always mean that the transaction failed. You can receive
DatastoreTimeoutException, ConcurrentModificationException, or
DatastoreFailureException exceptions in cases where transactions have
been committed and eventually will be applied successfully. Whenever
possible, make your datastore transactions idempotent so that if you
repeat a transaction, the end result will be the same."

Doesn't that mean I can still get a ConcurrentModificationException
even if the write was/will be successful? And if so then that example
I outlined could still be possible?

Thanks

On Dec 14, 4:43 pm, Broc Seib <broc.s...@gmail.com> wrote:
> I think you are mistaken about ConcurrentModificationException meaning
> it will eventually commit.
>
> If you get a ConcurrentModificationException, then that means the
> entity *failed* to write (because another write has modified the
> update timestamp on that entity group). You must catch that exception
> and try to write again (unless you don't want to overwrite).
>
> You can see this behavior first hand here:http://gaetestjig.appspot.com/
> and click on the "Unique Constraint" tab. Click the "Advance Alice"
> button four times, and click the "Advance Bobby" button four times (in
> any order). Now click on either button a fifth time and it will write
> the entity to the data store, and clicking the other button will
> experience a ConcurrentModificationException.
>
> Broc
>
> On Dec 13, 5:48 pm, coltsith <conla...@gmail.com> wrote:
>
>
>
>
>
>
>
> > I recently got a ConcurrentModificationException, and the
> > documentation states that this will be "committed and eventually will
> > be applied successfully." However I got to thinking of a possible
> > outcome:
>
> > Request A modifies entity
> > Request B modifies entity and receives ConcurrentModificationException
> > D
> > Request E modifies entity
> > ConcurrentModificationException D commits and is applied, which
> > overwrites Request E's work.
>
> > Can this happen? Or does Request E get its own
> > ConcurrentModificationException since (D) hasn't been committed yet?
>
> > Many thanks

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-java@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to