@Override public int doStartTag() throws PageException { // if(timeoutInMillis==0)timeoutInMillis=30000; // print.out("doStartTag"); manager = pageContext.getConfig().getLockManager(); // check attributes if (name != null && scope != SCOPE_NONE) { throw new LockException( LockException.OPERATION_CREATE, this.name, "invalid attribute combination", "attribute [name] and [scope] can't be used together"); } if (name == null && scope == SCOPE_NONE) { name = "id-" + id; } String lockType = null; if (name == null) { String cid = pageContext.getConfig().getIdentification().getId(); // Session if (scope == SCOPE_REQUEST) { lockType = "request"; name = "__request_" + cid + "__" + ((RequestImpl) pageContext.requestScope())._getId(); } // Session else if (scope == SCOPE_SESSION) { lockType = "session"; name = "__session_" + cid + "__" + pageContext.sessionScope()._getId(); } // Application else if (scope == SCOPE_APPLICATION) { lockType = "application"; name = "__application_" + cid + "__" + ((ApplicationImpl) pageContext.applicationScope())._getId(); } // Server else if (scope == SCOPE_SERVER) { lockType = "server"; name = "__server_" + ((ServerImpl) pageContext.serverScope())._getId(); } } Struct cflock = new StructImpl(); cflock.set("succeeded", Boolean.TRUE); cflock.set("errortext", ""); pageContext.variablesScope().set("cflock", cflock); start = System.nanoTime(); try { ((PageContextImpl) pageContext) .setActiveLock( new ActiveLock( type, name, timeoutInMillis)); // this has to be first, otherwise LockTimeoutException has // nothing to release data = manager.lock(type, name, timeoutInMillis, pageContext.getId()); } catch (LockTimeoutException e) { LockManagerImpl mi = (LockManagerImpl) manager; Boolean hasReadLock = mi.isReadLocked(name); Boolean hasWriteLock = mi.isWriteLocked(name); String msg = LockTimeoutExceptionImpl.createMessage( type, name, lockType, timeoutInMillis, hasReadLock, hasWriteLock); _release(pageContext, System.nanoTime() - start); name = null; cflock.set("succeeded", Boolean.FALSE); cflock.set("errortext", msg); if (throwontimeout) throw new LockException(LockException.OPERATION_TIMEOUT, this.name, msg); return SKIP_BODY; } catch (InterruptedException e) { _release(pageContext, System.nanoTime() - start); cflock.set("succeeded", Boolean.FALSE); cflock.set("errortext", e.getMessage()); if (throwontimeout) throw Caster.toPageException(e); return SKIP_BODY; } return EVAL_BODY_INCLUDE; }