On Dec 31, 2006, at 7:11 AM, Florijan Stamenkovic wrote:

I have a need in several of my tables to generate identifying numbers, but relative to a certain relationship. So, if there is a Book, I need to generate number 6 for it if Author currently relates to 5 other books... I have an approach of doing this, please anyone tell me if there is a better way to do it!

IMHO, the better way would be to get rid of the requirement altogether and use normal PK generation.


My approach:

1. Lock the working thread on a monitor that is "static final" in my SessionWorker class 2. Get the next number by using aBook.valueForKeyPath ("[EMAIL PROTECTED]"); //can not use @count in case of previous deletions
3.      Set the next number in aBook
4.      Save the changes of my working editing context
5.      Release the synchronization lock

This appears sound, though as you note below, this will work only if you have a single instance.


Questions:
Is there way to use EOF locking to lock on the database? It seems to me that would be more appropriate for what I am doing then the plain Java thread synching, and would work even if there were multiple application servers running, where the above approach would not. Any other ideas where this might flop and how to prevent it?

I think you're going to need to lock the entire table from any access during your transaction in order to guarantee no race condition (a read lock will not be sufficient). You can try the EOFetchSpecification.locksObjects() method, but I don't think that will do it: I think that does a SELECT FOR UPDATE, which obtains a read lock. That means that you'll need to go behind EOF's back and send the database-specific command yourself to lock down any access to that table for the length of the transaction. This, of course, has performance implications.

Shaun suggested using a stored procedure, which, if you're using a database that has them, is a good idea -- as is a unique constraint on those columns.


sacha


_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to