Return-Path: X-Original-To: apmail-ode-commits-archive@www.apache.org Delivered-To: apmail-ode-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 2032F17CA9 for ; Fri, 6 Nov 2015 10:50:57 +0000 (UTC) Received: (qmail 84435 invoked by uid 500); 6 Nov 2015 10:50:56 -0000 Delivered-To: apmail-ode-commits-archive@ode.apache.org Received: (qmail 84340 invoked by uid 500); 6 Nov 2015 10:50:56 -0000 Mailing-List: contact commits-help@ode.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ode.apache.org Delivered-To: mailing list commits@ode.apache.org Received: (qmail 83803 invoked by uid 99); 6 Nov 2015 10:50:56 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 06 Nov 2015 10:50:56 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 78641E5709; Fri, 6 Nov 2015 10:50:56 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sathwik@apache.org To: commits@ode.apache.org Date: Fri, 06 Nov 2015 10:51:11 -0000 Message-Id: <0deafdad153647aa9b2fdcf33e8c2f50@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [16/30] ode git commit: Initialization of cluster enabled instance lock manager Initialization of cluster enabled instance lock manager Project: http://git-wip-us.apache.org/repos/asf/ode/repo Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/94f19ed6 Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/94f19ed6 Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/94f19ed6 Branch: refs/heads/ODE-563 Commit: 94f19ed6168b81b8db067bd510c3a7e99aaecc28 Parents: 224dc21 Author: suba Authored: Wed Jul 8 11:30:17 2015 +0530 Committer: suba Committed: Wed Jul 8 11:30:17 2015 +0530 ---------------------------------------------------------------------- .../java/org/apache/ode/axis2/ODEServer.java | 10 +- .../ode/axis2/deploy/DeploymentPoller.java | 10 +- .../ode/axis2/service/DeploymentWebService.java | 10 +- .../org/apache/ode/bpel/clapi/ClusterLock.java | 43 +++++++- .../apache/ode/bpel/clapi/ClusterManager.java | 35 ++---- .../engine/AbstractInstanceLockManager.java | 38 +++++++ .../apache/ode/bpel/engine/BpelEngineImpl.java | 8 +- .../hazelcast/HazelcastClusterImpl.java | 49 ++++----- .../hazelcast/HazelcastDeploymentLock.java | 60 ++++++++++ .../hazelcast/HazelcastInstanceLock.java | 109 +++++++++++++++++++ 10 files changed, 298 insertions(+), 74 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java ---------------------------------------------------------------------- diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java index 9b133fc..34e245a 100644 --- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java +++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java @@ -384,8 +384,14 @@ public class ODEServer { } if (_clusterManager != null) { - __log.debug("shutting down cluster manager."); - _clusterManager = null; + try { + __log.debug("shutting down cluster manager."); + _clusterManager.shutdown(); + _clusterManager = null; + } catch (Exception ex) { + __log.debug("Cluster manager shutdown failed.", ex); + + } } if (_connector != null) { http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java ---------------------------------------------------------------------- diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java index 7912db6..98f5f82 100644 --- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java +++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java @@ -41,7 +41,7 @@ package org.apache.ode.axis2.deploy; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ode.axis2.ODEServer; -import org.apache.ode.bpel.clapi.ClusterManager; +import org.apache.ode.bpel.clapi.ClusterLock; import org.apache.ode.bpel.engine.cron.CronScheduler; import org.apache.ode.bpel.engine.cron.SystemSchedulesConfig; import org.apache.ode.utils.WatchDog; @@ -367,16 +367,16 @@ public class DeploymentPoller { */ private boolean pollerTryLock(String key) { if(clusterEnabled) { - ClusterManager cm = _odeServer.getBpelServer().getContexts().clusterManager; - cm.putIfAbsent(key,key); - return _odeServer.getBpelServer().getContexts().clusterManager.tryLock(key); + ClusterLock clusterLock = _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock(); + clusterLock.putIfAbsent(key,key); + return clusterLock.tryLockMap(key); } else return true; } private boolean unlock(String key) { if(clusterEnabled) { - return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key); + return _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlockMap(key); } else return true; } http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java ---------------------------------------------------------------------- diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java index 66221dc..7e4b347 100644 --- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java +++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java @@ -45,7 +45,7 @@ import org.apache.axiom.om.OMText; import org.apache.axiom.soap.SOAPEnvelope; import org.apache.axiom.soap.SOAPFactory; import org.apache.axis2.AxisFault; -import org.apache.ode.bpel.clapi.ClusterManager; +import org.apache.ode.bpel.clapi.ClusterLock; import org.apache.axis2.context.MessageContext; import org.apache.axis2.description.AxisService; import org.apache.axis2.description.AxisOperation; @@ -387,9 +387,9 @@ public class DeploymentWebService { */ private boolean lock(String key) { if(clusterEnabled) { - ClusterManager cm = _odeServer.getBpelServer().getContexts().clusterManager; - cm.putIfAbsent(key,key); - return cm.lock(key); + ClusterLock clusterLock = _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock(); + clusterLock.putIfAbsent(key,key); + return clusterLock.lockMap(key); } else return true; } @@ -399,7 +399,7 @@ public class DeploymentWebService { */ private boolean unlock(String key) { if(clusterEnabled) { - return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key); + return _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlockMap(key); } else return true; } http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java ---------------------------------------------------------------------- diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java index ff17188..9eaf705 100644 --- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java +++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java @@ -1,5 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ package org.apache.ode.bpel.clapi; +import java.util.concurrent.TimeUnit; + public interface ClusterLock { /** * Acquire the lock for each file in the file system @@ -7,7 +27,7 @@ public interface ClusterLock { * @param key * @return */ - boolean lock(String key); + boolean lockMap(String key); /** * Release the lock acquired by each file @@ -15,13 +35,28 @@ public interface ClusterLock { * @param key * @return */ - boolean unlock(String key); + boolean unlockMap(String key); + + /** + * Tries to acquire the lock for the specified key ant time period. + * @param key + * @return + */ + boolean tryLockMap(String key); /** - * Tries to acquire the lock for the specified key. * * @param key + * @param time + * @param tu * @return */ - boolean tryLock(String key); + boolean tryLockMap(String key, int time, TimeUnit tu); + + /** + * Check whether the map has a value for given key, if absent put the value to map + * @param key + * @param keyVal + */ + void putIfAbsent(String key, String keyVal); } http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java ---------------------------------------------------------------------- diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java index c57358c..6f610a4 100644 --- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java +++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java @@ -19,7 +19,6 @@ package org.apache.ode.bpel.clapi; import java.io.File; -import java.util.List; public interface ClusterManager { @@ -30,31 +29,15 @@ public interface ClusterManager { void init(File file); /** - * Return whether the local member is Master or not - * @return + * shutdown the cluster instance */ - boolean getIsMaster(); + void shutdwon(); /** - * Acquire the lock for each file in the file system - * @param key - * @return - */ - boolean lock(String key); - - /** - * Release the lock acquired by each file - * @param key - * @return - */ - boolean unlock(String key); - - /** - * Tries to acquire the lock for the specified key. - * @param key + * Return whether the local member is Master or not * @return */ - boolean tryLock(String key); + boolean getIsMaster(); /** * Set the Process Store object which uses for clustering @@ -69,14 +52,10 @@ public interface ClusterManager { void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent); /** - * Check whether the map has a value for given key, if absent put the value to map - * @param key - * @param keyVal - */ - void putIfAbsent(String key, String keyVal); - - /** * Register the cluster for message listener */ void registerClusterProcessStoreMessageListener(); + + ClusterLock getDeploymentLock(); + ClusterLock getInstanceLock(); } http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java ---------------------------------------------------------------------- diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java new file mode 100644 index 0000000..a534e11 --- /dev/null +++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.ode.bpel.engine; + +import java.util.concurrent.TimeUnit; + +/** + * Abstract class to implement an instance lock manager. Instance lock provide process instance isolation from + * concurrent access when entering jacob + */ +public abstract class AbstractInstanceLockManager { + abstract void unlock(Long iid); + + abstract void lock(Long iid, int i, TimeUnit microseconds) throws InterruptedException, + TimeoutException; + + /** Exception class indicating a time-out occured while obtaining a lock. */ + public static final class TimeoutException extends Exception { + private static final long serialVersionUID = 7247629086692580285L; + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java ---------------------------------------------------------------------- diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java index 19bf53e..81d8a4c 100644 --- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java +++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java @@ -115,7 +115,7 @@ public class BpelEngineImpl implements BpelEngine { private SharedEndpoints _sharedEps; /** Manage instance-level locks. */ - private final InstanceLockManager _instanceLockManager = new InstanceLockManager(); + private final AbstractInstanceLockManager _instanceLockManager; final Contexts _contexts; @@ -124,8 +124,14 @@ public class BpelEngineImpl implements BpelEngine { public BpelEngineImpl(Contexts contexts) { _contexts = contexts; + if(_contexts.clusterManager != null) { + _instanceLockManager = _contexts.clusterManager.getInstanceLock(); + } + + else _instanceLockManager = new InstanceLockManager(); _sharedEps = new SharedEndpoints(); _sharedEps.init(); + } public SharedEndpoints getSharedEndpoints() { http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java ---------------------------------------------------------------------- diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java index 11e1313..aa24947 100644 --- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java +++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java @@ -43,9 +43,12 @@ public class HazelcastClusterImpl implements ClusterManager { private String nodeID; private String uuid; private Member leader; - private IMap lock_map; + private IMap deployment_lock_map; + private IMap instance_lock_map; private ITopic clusterMessageTopic; private ClusterProcessStore _clusterProcessStore; + private ClusterLock _hazelcastDeploymentLock; + private ClusterLock _hazelcastInstanceLock; public void init(File configRoot) { @@ -74,37 +77,13 @@ public class HazelcastClusterImpl implements ClusterManager { uuid = localMember.getUuid(); __log.info("Registering HZ localMember ID " + nodeID); markAsMaster(); - lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK); + deployment_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK); + instance_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_PROCESS_INSTANCE_LOCK); clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG); - } - } - - public void putIfAbsent(String key, String keyVal) { - lock_map.putIfAbsent(key, keyVal); - } - - public boolean lock(String key) { - lock_map.lock(key); - if (__log.isDebugEnabled()) { - __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true); - } - return true; - } - - public boolean unlock(String key) { - lock_map.unlock(key); - if (__log.isDebugEnabled()) { - __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false); - } - return true; - } - public boolean tryLock(String key) { - boolean state = lock_map.tryLock(key); - if (__log.isDebugEnabled()) { - __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state); + _hazelcastDeploymentLock = (ClusterLock) new HazelcastDeploymentLock(deployment_lock_map); + _hazelcastInstanceLock = (ClusterLock) new HazelcastInstanceLock(instance_lock_map); } - return state; } class ClusterMemberShipListener implements MembershipListener { @@ -181,5 +160,17 @@ public class HazelcastClusterImpl implements ClusterManager { public void registerClusterProcessStoreMessageListener() { clusterMessageTopic.addMessageListener(new ClusterMessageListener()); } + + public void shutdown() { + if(_hazelcastInstance != null) _hazelcastInstance.getLifecycleService().shutdown(); + } + + public ClusterLock getDeplymentLock(){ + return _hazelcastDeploymentLock; + } + + public ClusterLock getInstanceLock(){ + return _hazelcastInstanceLock; + } } http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java ---------------------------------------------------------------------- diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java new file mode 100644 index 0000000..4d0aac1 --- /dev/null +++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ode.clustering.hazelcast; + +import com.hazelcast.core.IMap; +import org.apache.ode.bpel.clapi.ClusterLock; + +public class HazelcastDeploymentLock implements ClusterLock{ + private static final Log __log = LogFactory.getLog(HazelcastDeploymentLock.class); + + private IMap _lock_map; + + HazelcastDeploymentLock(IMap lock_map) { + _lock_map = lock_map; + } + + public void putIfAbsent(String key, String keyVal) { + _lock_map.putIfAbsent(key, keyVal); + } + + public boolean lockMap(String key) { + _lock_map.lock(key); + if (__log.isDebugEnabled()) { + __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true); + } + return true; + } + + public boolean unlockMap(String key) { + _lock_map.unlock(key); + if (__log.isDebugEnabled()) { + __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false); + } + return true; + } + + public boolean tryLockMap(String key) { + boolean state = _lock_map.tryLock(key); + if (__log.isDebugEnabled()) { + __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state); + } + return state; + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java ---------------------------------------------------------------------- diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java new file mode 100644 index 0000000..3b8ab41 --- /dev/null +++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ode.clustering.hazelcast; + +import com.hazelcast.core.IMap; +import org.apache.ode.bpel.clapi.ClusterLock; +import org.apache.ode.bpel.engine.AbstractInstnaceLockManager; + +import java.util.concurrent.TimeUnit; + +public class HazelcastInstanceLock extends AbstractInstnaceLockManager implements ClusterLock { + private static final Log __log = LogFactory.getLog(HazelcastInstanceLock.class); + + private IMap _lock_map; + + + HazelcastInstanceLock(IMap lock_map) { + _lock_map = lock_map; + } + + private void putIfAbsent(String key, String keyVal) { + _lock_map.putIfAbsent(key, keyVal); + } + + public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException, + AbstractInstanceLockManager.TimeoutException { + if (iid == null) { + if(__log.isDebugEnabled()) { + __log.debug(" Instance Id null at lock[]"); + } + return; + } + + String thrd = Thread.currentThread().toString(); + + if(__log.isDebugEnabled()) { + __log.debug(thrd + ": lock(iid=" + iid + ", time=" + time + tu + ")"); + } + + putIfAbsent(iid.toString(),iid.toString()); + + if (!tryLockMap(iid.toString(),time, tu)) { + + if(__log.isDebugEnabled()) { + __log.debug(thrd + ": lock(iid=" + iid + ", " + + "time=" + time + tu + ")-->TIMEOUT"); + } + throw new AbstractInstanceLockManager.TimeoutException(); + } + + } + + public void unlock(Long iid) { + if (iid == null) { + if(__log.isDebugEnabled()) { + __log.debug(" unlock, instance id is null"); + } + return; + } + + String thrd = Thread.currentThread().toString(); + + unlockMap(iid.toString()); + + if(__log.isDebugEnabled()) { + __log.debug(thrd + " unlock(iid=" + iid + ")"); + } + } + + private boolean lockMap(String key) { + _lock_map.lock(key); + return true; + } + + private boolean unlockMap(String key) { + if (_lock_map.get(key) == "true") { + _lock_map.unlock(key); + _lock_map.replace(key,"false"); + } + return true; + } + + private boolean tryLockMap(String key) { + boolean state = _lock_map.tryLock(key); + return state; + } + + private boolean tryLockMap(String key,int time, TimeUnit tu) { + boolean state = _lock_map.tryLock(key,time,tu); + _lock_map.replace(key,"" +state); + return state; + } +}