Show
all
Process Commander implements locks separately from the locking
mechanism supplied by the database software (such as Oracle) that
supports the PegaRULES database. Locks are exclusive to one Thread, and
operate system-wide in a multinode Process Commander system.
Basics
A Process Commander requestor can lock an open instance if
all of the following are true:
- The instance belongs to a concrete class that has Allow
Locking? checked in the class rule and
- The instance has ever been saved and committed to the PegaRULES
database.
- The requestor has an access role that conveys the privilege
needed. VAGUE
Properties identified on the Locking
tab of the Class rule form together define the lock identity. (If the
Locking tab contains no property names,
the properties that form a lock definition are the same as those that
form the external key, on the Database
tab.) All classes in one class group (which corresponds to one
database table) have the same properties in the lock definition.
Viewing locks
held
Viewing locks — Standard reports
To view locks held by your own requestor session, select> Process and Rules > Tools > Work Admin > My Locks. BYRNB 2/23/10
To view all locks held by any requestor, select> Process and Rules > Tools > Work Admin > All Locks and then drill down to
identify the details of the locked object. Hold the mouse pointer over
a row of the drill-down detail to identify the Operator ID of the
requestor holding the lock. BUG-1852
These two reports present instances of the
System-Locks class, corresponding to the
pr_sys_locks
table of the PegaRULES database.
PROJ-155 BUG-2344
Viewing locks — In an activity or flow
Locks are acquired by activities, using one of three methods
— Obj-Open, Obj-Open-by-Handle, and Obj-Refresh-and-Lock.
Optionally, each of these methods can store detailed results in a page
of class System-Locks. If a method failed to acquire a
lock because the object is already locked, information on this page
identifies the current requestor session that holds the lock. By
convention, this page is named LockInfo
in standard
rules. MARIK 2/24/06
As a debugging aid, the standard section rule
System-Locks.LockInfo and the standard harness rule
Work-.LockInfo can present information from that page to
an application user. The LockInfo page contains these properties:
B-22689
- pxExpireDateTime
- pxLockHandle
- pxOwnerID
- pxUpdateOperator
- pxCreateDateTime
The lock
string
A lock string uniquely identifies a lock. For instances that belong
to classes not associated with a class group, the text string consists
of the class name concatenated with the key parts of the object
(determined on the Keys area of the Basics tab of the Class form, or the Locking tab of the Class form).
For an object that is within the scope of a class group, the lock string
consists of the class group name concatenated with the value of the
key properties identified on the Keys tab
of the Class Group form. For example, for the Sample Work application,
the class group is named PegaSample and work objects in
the PegaSample-Task class are identified with a W-
prefix. The lock string for work object W-43 is thus:
PEGASAMPLE-TASK W-43
Expired
("soft") locks
Generally, a Thread that acquires a lock retains it until the
instance is saved again with a Commit method (which may complete an
Obj-Save or Obj-Delete method). However the system automatically
expires locks held longer than a specified timeout period. You
can change the default timeout interval of 120 minutes to a longer or
shorter period. This value is stored in the
Data-Admin-System data instance.
An expired or "soft" lock remains held by a requestor
session until the session releases it or until the requestor session
ends, but a soft lock can be stolen — broken and acquired
— by another requestor who opens the instance. In that case, any
updates by the first user that are not committed are lost.
Releasing
locks
A requestor can only release locks held by its own session, or by
another requestor session that has the same Operator ID. B-13601
GENTJ 04/20/05
A Commit method releases all the locks held by a requestor Thread that
were acquired with the ReleaseOnCommit box checked
when the object was opened. GENTJ 5/2/05
When a user signs off, any locks held by that requestor are
released.
In contrast, locks are not released
when a user closes a browser session by clicking the
Windows close box (rather than by logging out). The locks may be
needed by another Thread of the same operator, or by another operator
or process. Encourage users to log off through a button or link rather
than closing the window. CLINIC 3/25/05
Testing for
locks
To test whether a work object is locked, an activity can call the
standard activity Work-.WorkLock, which tries to lock the
work object. If it fails to acquire a lock, the
SuccessInfo
parameter is negative, indicating that the
work object is already locked. The FailureInfo
parameter
provides additional detail. SR-7068
To test whether a lock is held on a page already on your own
clipboard, call the function rule isPageLocked(tools,
pagename).
To test whether an object other than a work object is locked, use
one of several methods in the PublicAPI
LockManagerInterface. SR-7068
Debugging
To add detailed lock manager information to the Pega log, set the
Logging Level Settings tool with this category to Debug
:
BUG-2200
com.pega.pegarules.engine.database.LockManagerImpl
Concepts