View Javadoc

1   /**
2    *
3    * Copyright 2003-2004 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  package org.apache.geronimo.jetty.interceptor;
18  
19  import org.mortbay.http.HttpRequest;
20  import org.mortbay.http.HttpResponse;
21  
22  
23  /**
24   * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat, 10 Dec 2005) $
25   */
26  public class ThreadClassloaderBeforeAfter implements BeforeAfter {
27  
28      private final BeforeAfter next;
29      private final int threadIndex;
30      private final int classLoaderIndex;
31      private final ClassLoader classLoader;
32  
33      public ThreadClassloaderBeforeAfter(BeforeAfter next, int threadIndex, int classLoaderIndex, ClassLoader classLoader) {
34          this.next = next;
35          this.threadIndex = threadIndex;
36          this.classLoaderIndex = classLoaderIndex;
37          this.classLoader = classLoader;
38      }
39  
40      public void before(Object[] context, HttpRequest httpRequest, HttpResponse httpResponse) {
41          Thread thread = Thread.currentThread();
42          context[threadIndex] = thread;
43          context[classLoaderIndex] = thread.getContextClassLoader();
44          thread.setContextClassLoader(classLoader);
45          if (next != null) {
46              next.before(context, httpRequest, httpResponse);
47          }
48      }
49  
50      public void after(Object[] context, HttpRequest httpRequest, HttpResponse httpResponse) {
51          if (next != null) {
52              next.after(context, httpRequest, httpResponse);
53          }
54          ((Thread)context[threadIndex]).setContextClassLoader((ClassLoader)context[classLoaderIndex]);
55      }
56  
57  }