Locking Objects

LockManager.java
01/* Copyright (C) 2004 - 2007 db4objects Inc. http://www.db4o.com */ 02 03package com.db4odoc.semaphores; 04 05import com.db4o.*; 06import com.db4o.ext.*; 07 08/** 09 * This class demonstrates a very rudimentary implementation of 10 * virtual "locks" on objects with db4o. All code that is intended to 11 * obey these locks will have to call lock() and unlock(). 12 */ 13public class LockManager { 14 15 private final String SEMAPHORE_NAME = "locked: "; 16 17 private final int WAIT_FOR_AVAILABILITY = 300; // 300 18 // milliseconds 19 20 private final ExtObjectContainer _objectContainer; 21 22 public LockManager(ObjectContainer objectContainer) { 23 _objectContainer = objectContainer.ext(); 24 } 25 26 public boolean lock(Object obj) { 27 long id = _objectContainer.getID(obj); 28 return _objectContainer.setSemaphore(SEMAPHORE_NAME + id, 29 WAIT_FOR_AVAILABILITY); 30 } 31 32 public void unlock(Object obj) { 33 long id = _objectContainer.getID(obj); 34 _objectContainer.releaseSemaphore(SEMAPHORE_NAME + id); 35 } 36}