+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed 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.argeo.slc.core.execution;
import org.apache.commons.logging.Log;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.config.Scope;
+/**
+ * When Spring beans are instantiated with this scope, the same instance is
+ * reused across an execution.
+ */
public class ExecutionScope implements Scope {
private final static Log log = LogFactory.getLog(ExecutionScope.class);
obj = newObj;
threadLocal.set(obj);
threadLocalBeanName.set(name);
- if (log.isDebugEnabled()) {
+ if (log.isTraceEnabled()) {
log.debug(obj.getClass() + " instantiated. (beanName=" + name
+ ")");
}
}
public void registerDestructionCallback(String name, Runnable callback) {
- // TODO: implement it
- // throw new UnsupportedOperationException();
+ if (Thread.currentThread() instanceof ExecutionThread) {
+ ExecutionThread executionThread = (ExecutionThread) Thread
+ .currentThread();
+ executionThread.registerDestructionCallback(name, callback);
+ }
}
public Object remove(String name) {
throw new UnsupportedOperationException();
}
+ public Object resolveContextualObject(String key) {
+ return executionContext.get().getVariable(key);
+ }
+
}