Mark A Kruger wrote:
>
> FIRST: User "A" does the following:  
>       SELECT * FROM users WHERE username = 'bob'
>       WITH (updlock)
>
>   .... Presumably User "A" is now looking at Bob's information for editing
> on a web page 
> 
> SECOND:  Meanwhile User "B" runs the same query
>        SELECT * FROM users WHERE username = 'bob'
>       WITH (updlock)
>
>   ... What happens here? Does the JDBC throw an error?

It will wait until statement timeout. I don't know if that is recoverable in MS 
SQL Server (i.e., I don't know if User B can continue its transaction or has to 
rollback and try again).


>    .... How would we be able to determine (using SQL) that the record is
> indeed locked for updating without would we have to trap a specific error
> perhaps?

In Oracle and PostgreSQL I would force the issue by using SELECT .. FOR UPDATE 
NOWAIT which will force an immediate error if some other transaction has the 
lock. Again, don't know about MS SQL Server.


> THIRD:  Finally, User "A" is done and decides she 
>       1) Wants to update the record ... So she runs
>               UPDATE users SET name = 'bob smith'
>               WHERE  username = 'bob'
>       ... Is this update sufficient to release the lock? 

No, you need to commit the transaction.


>       ... Since JDBC will draw a connection from the connection pool - how
> will the database know that this update is the same user that locked the
> record previously?  Wouldn't we have to use individual usernames/permissions
> for the DB to make that work?

You need to maintain the transaction between requests, i.e. you need the magic 
CFX that Claude can write for you.


>       2) She decides that she doesn't want to do an update and cancels out
> or closes the page.
>               ... How would we go about releasing this specific lock?

Between the database and Claude's CFX it is just a rollback. I don't know how 
it is supposed to work betweeen the CFML page that talks to the CFX and the 
browser. I suppose some sort of timeout, and AJAX call or a gateway call in 
onSessionEnd.


> I'm having some trouble figuring out how this might be implemented... If
> it's possible or worth it.... 

It is possible, but I don't think it is worth it. Even when the magic CFX works 
there is always the issue of clustering: you are going to need a restartable, 
interweaveable XA datasource to make that work and the locking implications of 
that are downright scary.
Like I said, I will just stick to optimistic record locking.

Jochem

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Introducing the Fusion Authority Quarterly Update. 80 pages of hard-hitting,
up-to-date ColdFusion information by your peers, delivered to your door four 
times a year.
http://www.fusionauthority.com/quarterly

Archive: 
http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:252621
Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm
Unsubscribe: 
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4

Reply via email to