1
14
15 package com.liferay.portal.kernel.bean;
16
17 import java.lang.Object;
18 import java.lang.reflect.InvocationHandler;
19 import java.lang.reflect.InvocationTargetException;
20 import java.lang.reflect.Method;
21
22
28 public class ContextClassLoaderBeanHandler implements InvocationHandler {
29
30 public ContextClassLoaderBeanHandler(Object bean, ClassLoader classLoader) {
31 _bean = bean;
32 _classLoader = classLoader;
33 }
34
35 public Object getBean() {
36 return _bean;
37 }
38
39 public ClassLoader getClassLoader() {
40 return _classLoader;
41 }
42
43 public Object invoke(Object proxy, Method method, Object[] args)
44 throws Throwable {
45
46 Thread currentThread = Thread.currentThread();
47
48 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
49
50 try {
51 if ((_classLoader != null) &&
52 (contextClassLoader != _classLoader)) {
53
54 currentThread.setContextClassLoader(_classLoader);
55 }
56
57 return method.invoke(_bean, args);
58 }
59 catch (InvocationTargetException ite) {
60 throw ite.getTargetException();
61 }
62 finally {
63 if ((_classLoader != null) &&
64 (contextClassLoader != _classLoader)) {
65
66 currentThread.setContextClassLoader(contextClassLoader);
67 }
68 }
69 }
70
71 private Object _bean;
72 private ClassLoader _classLoader;
73
74 }