// ------------------------------------------------------ ClusterLockManager
@Override
public void unlock(Serializable lockId) {
ClusterNode myself = getLocalClusterNode();
if (myself == null) {
throw new IllegalStateException("Must call start() before first call to unlock()");
}
ClusterLockState category = getClusterLockState(lockId, false);
if (category == null) {
getLocalHandler().unlockFromCluster(lockId, myself);
} else if (myself.equals(category.getHolder())) {
category.invalidate();
getLocalHandler().unlockFromCluster(lockId, myself);
removeLockState(category);
}
}