I doubt there will be any need for additional synchronization.
I think I know what's going on in your system. My previous scenario
wasn't correct because I thought the ID was a part of the primary key
and there was an exception thrown while storing the new value - due to a
duplicate key violation. Those IDs are not a part of the primary key, so
that isn't the cause.
Instead, I believe the ID is updated successfully, but a thread is slow
in storing the new ID value - which ends up decrementing the ID in the
database instead of incrementing it. Then the invoice generation fails
due to a duplicate key violation. From that point on, every attempt to
increment the ID value and create a new invoice with it will fail
because the new ID value already exists in the invoice file.
-Adrian
On 5/20/2010 11:57 AM, James McGill wrote:
On Thu, May 20, 2010 at 10:46 AM, Adrian Crum<[email protected]> wrote:
James,
I uploaded a patch that might fix your problem:
Thanks Adrian. Your approach adds JVM-based synchronization to minilang
simple methods.
I still wonder if this means the create services need to be synchronized and
not just the id generators.
I'll try it out and keep you posted.
James