]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ExecutionScope.java
Fix ressource leak
[gpl/argeo-slc.git] / runtime / org.argeo.slc.core / src / main / java / org / argeo / slc / core / execution / ExecutionScope.java
index 2cbd70897b93a39d4f68a8e21e745d4226d32ed6..a2a5a9b0ca7f81ec3f0a949c7ad10469e8768210 100644 (file)
@@ -1,3 +1,18 @@
+/*
+ * 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;
@@ -11,6 +26,10 @@ import org.argeo.slc.execution.ExecutionStack;
 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);
 
@@ -86,7 +105,7 @@ public class ExecutionScope implements Scope {
                        obj = newObj;
                        threadLocal.set(obj);
                        threadLocalBeanName.set(name);
-                       if (log.isDebugEnabled()) {
+                       if (log.isTraceEnabled()) {
                                log.debug(obj.getClass() + " instantiated. (beanName=" + name
                                                + ")");
                        }
@@ -112,8 +131,11 @@ public class ExecutionScope implements Scope {
        }
 
        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) {
@@ -122,4 +144,8 @@ public class ExecutionScope implements Scope {
                throw new UnsupportedOperationException();
        }
 
+       public Object resolveContextualObject(String key) {
+               return executionContext.get().getVariable(key);
+       }
+
 }