[romanb] Added a first documentation for the Locking Manager component
This commit is contained in:
parent
3056d9daa5
commit
990548d315
@ -0,0 +1,57 @@
|
|||||||
|
At the page where the lock is requested...
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// Get a locking manager instance
|
||||||
|
$lockingMngr = new Doctrine_Locking_Manager_Pessimistic();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Ensure that old locks which timed out are released before we try to acquire our lock
|
||||||
|
$lockingMngr->releaseAgedLocks(300); // 300 seconds = 5 minutes timeout
|
||||||
|
|
||||||
|
// Try to get the lock on a record
|
||||||
|
$gotLock = $lockingMngr->getLock(
|
||||||
|
$myRecordToLock, // The record to lock. This can be any Doctrine_Record
|
||||||
|
'Bart Simpson' // The unique identifier of the user who is trying to get the lock
|
||||||
|
);
|
||||||
|
|
||||||
|
if($gotLock)
|
||||||
|
{
|
||||||
|
echo "Got lock!";
|
||||||
|
// ... proceed
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo "Sorry, someone else is currently working on this record";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(Doctrine_Locking_Exception $dle)
|
||||||
|
{
|
||||||
|
echo $dle->getMessage();
|
||||||
|
// handle the error
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
At the page where the transaction finishes...
|
||||||
|
<?php
|
||||||
|
// Get a locking manager instance
|
||||||
|
$lockingMngr = new Doctrine_Locking_Manager_Pessimistic();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if($lockingMngr->releaseLock($myRecordToUnlock, 'Bart Simpson'))
|
||||||
|
{
|
||||||
|
echo "Lock released";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo "Record was not locked. No locks released.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(Doctrine_Locking_Exception $dle)
|
||||||
|
{
|
||||||
|
echo $dle->getMessage();
|
||||||
|
// handle the error
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1 @@
|
|||||||
|
The following code snippet demonstrates the use of Doctrine's pessimistic offline locking capabilities.
|
@ -0,0 +1,23 @@
|
|||||||
|
[<b>Note</b>: The term 'Transaction' doesnt refer to database transactions here but to the general meaning of this term]<br />
|
||||||
|
[<b>Note</b>: This component is in <b>Alpha State</b>]<br />
|
||||||
|
<br />
|
||||||
|
Locking is a mechanism to control concurrency. The two most well known locking strategies
|
||||||
|
are optimistic and pessimistic locking. The following is a short description of these
|
||||||
|
two strategies from which only pessimistic locking is currently supported by Doctrine.<br />
|
||||||
|
<br />
|
||||||
|
<b>Optimistic Locking:</b><br />
|
||||||
|
The state/version of the object(s) is noted when the transaction begins.
|
||||||
|
When the transaction finishes the noted state/version of the participating objects is compared
|
||||||
|
to the current state/version. When the states/versions differ the objects have been modified
|
||||||
|
by another transaction and the current transaction should fail.
|
||||||
|
This approach is called 'optimistic' because it is assumed that it is unlikely that several users
|
||||||
|
will participate in transactions on the same objects at the same time.<br />
|
||||||
|
<br />
|
||||||
|
<b>Pessimistic Locking:</b><br />
|
||||||
|
The objects that need to participate in the transaction are locked at the moment
|
||||||
|
the user starts the transaction. No other user can start a transaction that operates on these objects
|
||||||
|
while the locks are active. This ensures that the user who starts the transaction can be sure that
|
||||||
|
noone else modifies the same objects until he has finished his work.<br />
|
||||||
|
<br />
|
||||||
|
Doctrine's pessimistic offline locking capabilities can be used to control concurrency during actions or procedures
|
||||||
|
that take several HTTP request and response cycles and/or a lot of time to complete.
|
@ -0,0 +1,2 @@
|
|||||||
|
Roman Borschel - romanb at #doctrine (freenode)<br />
|
||||||
|
Don't hesitate to contact me if you have questions, ideas, ect.
|
@ -0,0 +1,2 @@
|
|||||||
|
- Possibility to release locks of a specific Record type (i.e. releasing all locks on 'User'
|
||||||
|
objects).
|
@ -0,0 +1,5 @@
|
|||||||
|
The pessimistic offline locking manager stores the locks in the database (therefore 'offline').
|
||||||
|
The required locking table is automatically created when you try to instantiate an instance
|
||||||
|
of the manager and the ATTR_CREATE_TABLES is set to TRUE.
|
||||||
|
This behaviour may change in the future to provide a centralised and consistent table creation
|
||||||
|
procedure for installation purposes.
|
@ -241,8 +241,10 @@ $menu = array("Getting started" =>
|
|||||||
|
|
||||||
"Locking Manager" => array(
|
"Locking Manager" => array(
|
||||||
"Introduction",
|
"Introduction",
|
||||||
"Pessimistic locking",
|
"Examples",
|
||||||
"Examples"),
|
"Planned",
|
||||||
|
"Technical Details",
|
||||||
|
"Maintainer"),
|
||||||
/**
|
/**
|
||||||
"Debugger" => array(
|
"Debugger" => array(
|
||||||
"Introduction",
|
"Introduction",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user