Return-Path: Delivered-To: apmail-commons-dev-archive@www.apache.org Received: (qmail 84078 invoked from network); 28 Jul 2007 21:32:08 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 28 Jul 2007 21:32:08 -0000 Received: (qmail 12631 invoked by uid 500); 28 Jul 2007 21:32:08 -0000 Delivered-To: apmail-commons-dev-archive@commons.apache.org Received: (qmail 12111 invoked by uid 500); 28 Jul 2007 21:32:06 -0000 Mailing-List: contact dev-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list dev@commons.apache.org Received: (qmail 12102 invoked by uid 500); 28 Jul 2007 21:32:06 -0000 Delivered-To: apmail-jakarta-commons-dev@jakarta.apache.org Received: (qmail 12099 invoked by uid 500); 28 Jul 2007 21:32:06 -0000 Delivered-To: apmail-jakarta-commons-cvs@jakarta.apache.org Received: (qmail 12096 invoked by uid 99); 28 Jul 2007 21:32:06 -0000 Received: from Unknown (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 28 Jul 2007 14:32:06 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 28 Jul 2007 21:32:05 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 446911A981A; Sat, 28 Jul 2007 14:31:45 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r560618 - in /jakarta/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking: HierarchicalLockManager.java HierarchicalRWLockManager.java Date: Sat, 28 Jul 2007 21:31:45 -0000 To: commons-cvs@jakarta.apache.org From: ozeigermann@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070728213145.446911A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: ozeigermann Date: Sat Jul 28 14:31:44 2007 New Revision: 560618 URL: http://svn.apache.org/viewvc?view=rev&rev=560618 Log: Established first version of a hierarchical lock manager Modified: jakarta/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/HierarchicalLockManager.java jakarta/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/HierarchicalRWLockManager.java Modified: jakarta/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/HierarchicalLockManager.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/HierarchicalLockManager.java?view=diff&rev=560618&r1=560617&r2=560618 ============================================================================== --- jakarta/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/HierarchicalLockManager.java (original) +++ jakarta/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/HierarchicalLockManager.java Sat Jul 28 14:31:44 2007 @@ -16,9 +16,8 @@ */ package org.apache.commons.transaction.locking; - // Takes care of hierarchical locking with folders and resources -public interface HierarchicalLockManager extends LockManager { - public void lockAsFolder(String path, boolean exclusive) throws LockException; - public void lockAsResource(String path, boolean exclusive) throws LockException; +public interface HierarchicalLockManager extends LockManager { + + public void lockInHierarchy(M managedResource, String path, boolean exclusive) throws LockException; } Modified: jakarta/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/HierarchicalRWLockManager.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/HierarchicalRWLockManager.java?view=diff&rev=560618&r1=560617&r2=560618 ============================================================================== --- jakarta/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/HierarchicalRWLockManager.java (original) +++ jakarta/commons/proper/transaction/branches/TRANSACTION_2/src/java/org/apache/commons/transaction/locking/HierarchicalRWLockManager.java Sat Jul 28 14:31:44 2007 @@ -16,16 +16,69 @@ */ package org.apache.commons.transaction.locking; -public class HierarchicalRWLockManager extends RWLockManager implements - HierarchicalLockManager { +import java.util.concurrent.TimeUnit; + +public class HierarchicalRWLockManager implements HierarchicalLockManager { + + private final String rootPath; + + private final LockManager lm; + + public HierarchicalRWLockManager(String rootPath, LockManager lm) { + this.rootPath = rootPath; + this.lm = lm; + } + + public void lockInHierarchy(M managedResource, String path, boolean exclusive) + throws LockException { + // strip off root path + // TODO misses sane checks + String relativePath = path.substring(path.indexOf(rootPath)); + + // this is the root path we want to lock + if (relativePath.length() == 0) { + lock(managedResource, "/", exclusive); + return; + } + + // always read lock root + lock(managedResource, "/", false); + + String[] segments = relativePath.split("/"); + StringBuffer currentPath = new StringBuffer(relativePath.length()); + // for root path + currentPath.append('/'); + + for (int i = 0; i < segments.length; i++) { + String segment = segments[i]; + + currentPath.append(segment).append('/'); + String key = currentPath.toString(); + + if (i == segments.length - 1) { + // this is the resource itself + lock(managedResource, key, exclusive); + } else { + // this is one of the parent path segments + lock(managedResource, key, false); + } + } + } + + public void endWork() { + lm.endWork(); + } + + public void lock(M managedResource, Object key, boolean exclusive) throws LockException { + lm.lock(managedResource, key, exclusive); + } + + public void startWork(long timeout, TimeUnit unit) { + lm.startWork(timeout, unit); - public void lockAsFolder(String path, boolean exclusive) throws LockException { - // TODO Auto-generated method stub - } - public void lockAsResource(String path, boolean exclusive) throws LockException { - // TODO Auto-generated method stub - + public boolean tryLock(M managedResource, Object key, boolean exclusive) { + return lm.tryLock(managedResource, key, exclusive); } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org For additional commands, e-mail: dev-help@commons.apache.org