00001
00025 package org.objectweb.jonas_web.deployment.lib.wrapper;
00026
00027 import java.lang.reflect.InvocationTargetException;
00028 import java.lang.reflect.Method;
00029 import java.net.URL;
00030 import java.net.URLClassLoader;
00031
00032 import org.objectweb.jonas_web.deployment.api.WebContainerDeploymentDesc;
00033 import org.objectweb.jonas_web.deployment.api.WebContainerDeploymentDescException;
00034
00035 import org.objectweb.jonas.common.Log;
00036 import org.objectweb.jonas.server.LoaderManager;
00037
00038 import org.objectweb.util.monolog.api.BasicLevel;
00039 import org.objectweb.util.monolog.api.Logger;
00040
00047 public class WebManagerWrapper {
00048
00052 private static Logger logger = Log.getLogger(Log.JONAS_EAR_PREFIX);
00053
00057 private static final String WEBMANAGER_CLASSNAME = "org.objectweb.jonas_web.deployment.lib.WebDeploymentDescManager";
00058
00062 private WebManagerWrapper() { }
00063
00075 public static WebContainerDeploymentDesc getDeploymentDesc(URL url, ClassLoader moduleCL, ClassLoader earCL)
00076 throws WebContainerDeploymentDescException {
00077 LoaderManager lm = LoaderManager.getInstance();
00078 WebContainerDeploymentDesc webDD = null;
00079
00080 try {
00081 ClassLoader tools = lm.getToolsLoader();
00082 Class manager = tools.loadClass(WEBMANAGER_CLASSNAME);
00083 Method m = manager.getDeclaredMethod("getInstance", new Class[] {});
00084 Object instance = m.invoke(null, new Object[] {});
00085 m = manager.getDeclaredMethod("getDeploymentDesc", new Class[] {URL.class, ClassLoader.class,
00086 ClassLoader.class});
00087 webDD = (WebContainerDeploymentDesc) m.invoke(instance, new Object[] {url, moduleCL, earCL});
00088 } catch (InvocationTargetException ite) {
00089 Throwable t = ite.getTargetException();
00090 if (WebContainerDeploymentDescException.class.isInstance(t)) {
00091 throw (WebContainerDeploymentDescException) ite.getTargetException();
00092 } else {
00093 throw new WebContainerDeploymentDescException("WebDeploymentDescManager.getDeploymentDesc fails", t);
00094 }
00095 } catch (Exception e) {
00096
00097 throw new WebContainerDeploymentDescException("Problems when using reflection on WebDeploymentDescManager", e);
00098 }
00099
00100 return webDD;
00101 }
00102
00110 public static void setAltDD(URLClassLoader earClassLoader, URL[] warUrls, URL[] warsAltDDs) {
00111 LoaderManager lm = LoaderManager.getInstance();
00112
00113 try {
00114 ClassLoader tools = lm.getToolsLoader();
00115 Class manager = tools.loadClass(WEBMANAGER_CLASSNAME);
00116 Method m = manager.getDeclaredMethod("getInstance", new Class[] {});
00117 Object instance = m.invoke(null, new Object[] {});
00118 m = manager.getDeclaredMethod("setAltDD", new Class[] {ClassLoader.class, URL[].class, URL[].class});
00119 m.invoke(instance, new Object[] {earClassLoader, warUrls, warsAltDDs});
00120 } catch (Exception e) {
00121
00122 logger.log(BasicLevel.ERROR, e);
00123 }
00124 }
00125
00131 public static void setParsingWithValidation(boolean b) {
00132 LoaderManager lm = LoaderManager.getInstance();
00133
00134 try {
00135 ClassLoader tools = lm.getToolsLoader();
00136 Class manager = tools.loadClass(WEBMANAGER_CLASSNAME);
00137 Method m = manager.getDeclaredMethod("setParsingWithValidation", new Class[] {boolean.class});
00138 m.invoke(null, new Object[] {new Boolean(b)});
00139 } catch (Exception e) {
00140
00141 logger.log(BasicLevel.ERROR, e);
00142 }
00143 }
00144
00150 public static void removeCache(ClassLoader classLoader) {
00151 LoaderManager lm = LoaderManager.getInstance();
00152
00153 try {
00154 ClassLoader tools = lm.getToolsLoader();
00155 Class manager = tools.loadClass(WEBMANAGER_CLASSNAME);
00156 Method m = manager.getDeclaredMethod("getInstance", new Class[] {});
00157 Object instance = m.invoke(null, new Object[] {});
00158 m = manager.getDeclaredMethod("removeCache", new Class[] {ClassLoader.class});
00159 m.invoke(instance, new Object[] {classLoader});
00160 } catch (Exception e) {
00161
00162 logger.log(BasicLevel.ERROR, e);
00163 }
00164 }
00165
00176 public static WebContainerDeploymentDesc getDeploymentDesc(String warName, ClassLoader cl)
00177 throws WebContainerDeploymentDescException {
00178 LoaderManager lm = LoaderManager.getInstance();
00179 WebContainerDeploymentDesc desc = null;
00180
00181 try {
00182 ClassLoader tools = lm.getToolsLoader();
00183 Class manager = tools.loadClass(WEBMANAGER_CLASSNAME);
00184 Method m = manager.getDeclaredMethod("getDeploymentDesc", new Class[] {String.class, ClassLoader.class});
00185 desc = (WebContainerDeploymentDesc) m.invoke(null, new Object[] {warName, cl});
00186 } catch (InvocationTargetException ite) {
00187 Throwable t = ite.getTargetException();
00188 if (WebContainerDeploymentDescException.class.isInstance(t)) {
00189 throw (WebContainerDeploymentDescException) ite.getTargetException();
00190 } else {
00191 throw new WebContainerDeploymentDescException("WebDeploymentDescManager.getDeploymentDesc fails", t);
00192 }
00193 } catch (Exception e) {
00194
00195 throw new WebContainerDeploymentDescException("Problems when using reflection on WebDeploymentDescManager", e);
00196 }
00197
00198 return desc;
00199 }
00200
00201 }