Using the documentation of Kodo with JDO:
Kodo provides explicit APIs to lock objects and to retrieve their
current lock level.
The Kodo JDO KodoPersistenceManager exposes the following methods to
lock objects explicitly
You have the next methods of locking a object:
public void lockPersistent (Object pc);
public void lockPersistent (Object pc, int level, long timeout);
public void lockPersistentAll (Object[] pcs);
public void lockPersistentAll (Object[] pcs, int level, long timeout);
public void lockPersistentAll (Collection pcs);
public void lockPersistentAll (Collection pcs, int level, long timeout);
And the next example:
// retrieve the lock level of an object
Stock stock = ...;
int level = KodoJDOHelper.getLockLevel (stock);
if (level == KodoJDOHelper.LOCK_WRITE)
PersistenceManager pm = ...;
pm.currentTransaction ().setOptimistic (true);
pm.currentTransaction ().begin ();
// override default of not locking during an opt trans to lock stock object
KodoPersistenceManager kpm = KodoJDOHelper.cast (pm);
kpm.lockPersistent (stock, KodoPersistenceManager.LOCK_WRITE, -1);
stock.setPrice (market.calculatePrice (stock));
pm.currentTransaction ().commit ();