00001
00025 package org.objectweb.jonas_ws.deployment.lib.wrapper;
00026
00027 import java.lang.reflect.InvocationTargetException;
00028 import java.lang.reflect.Method;
00029 import java.net.URL;
00030
00031 import org.objectweb.jonas_ws.deployment.api.WSDeploymentDesc;
00032 import org.objectweb.jonas_ws.deployment.api.WSDeploymentDescException;
00033
00034 import org.objectweb.jonas.common.Log;
00035 import org.objectweb.jonas.server.LoaderManager;
00036
00037 import org.objectweb.util.monolog.api.BasicLevel;
00038 import org.objectweb.util.monolog.api.Logger;
00039
00040
00047 public class WSManagerWrapper {
00048
00052 private static final String WS_MANAGER_CLASSNAME = "org.objectweb.jonas_ws.deployment.lib.WSDeploymentDescManager";
00053
00057 private static Logger logger = Log.getLogger(Log.JONAS_EAR_PREFIX);
00058
00062 private WSManagerWrapper() { }
00063
00075 public static WSDeploymentDesc getDeploymentDesc(URL url, ClassLoader moduleCL, ClassLoader earCL)
00076 throws WSDeploymentDescException {
00077 LoaderManager lm = LoaderManager.getInstance();
00078 WSDeploymentDesc wsDD = null;
00079
00080 try {
00081 ClassLoader tools = lm.getToolsLoader();
00082 Class manager = tools.loadClass(WS_MANAGER_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 wsDD = (WSDeploymentDesc) m.invoke(instance, new Object[] {url, moduleCL, earCL});
00088 } catch (InvocationTargetException ite) {
00089 Throwable t = ite.getTargetException();
00090 if (WSDeploymentDescException.class.isInstance(t)) {
00091 throw (WSDeploymentDescException) ite.getTargetException();
00092 } else {
00093 throw new WSDeploymentDescException("WSDeploymentDescManager.getDeploymentDesc fails", t);
00094 }
00095 } catch (Exception e) {
00096
00097 throw new WSDeploymentDescException("Problems when using reflection on WSDeploymentDescManager", e);
00098 }
00099
00100 return wsDD;
00101 }
00102
00115 public static WSDeploymentDesc getDeploymentDesc(URL url, URL unpackedURL, ClassLoader moduleCL, ClassLoader earCL)
00116 throws WSDeploymentDescException {
00117 LoaderManager lm = LoaderManager.getInstance();
00118 WSDeploymentDesc wsDD = null;
00119
00120 try {
00121 ClassLoader tools = lm.getToolsLoader();
00122 Class manager = tools.loadClass(WS_MANAGER_CLASSNAME);
00123 Method m = manager.getDeclaredMethod("getInstance", new Class[] {});
00124 Object instance = m.invoke(null, new Object[] {});
00125 m = manager.getDeclaredMethod("getDeploymentDesc", new Class[] {URL.class, URL.class, ClassLoader.class,
00126 ClassLoader.class});
00127 wsDD = (WSDeploymentDesc) m.invoke(instance, new Object[] {url, unpackedURL, moduleCL, earCL});
00128 } catch (InvocationTargetException ite) {
00129 Throwable t = ite.getTargetException();
00130 if (WSDeploymentDescException.class.isInstance(t)) {
00131 throw (WSDeploymentDescException) ite.getTargetException();
00132 } else {
00133 throw new WSDeploymentDescException("WSDeploymentDescManager.getDeploymentDesc fails", t);
00134 }
00135 } catch (Exception e) {
00136
00137 throw new WSDeploymentDescException("Problems when using reflection on WSDeploymentDescManager", e);
00138 }
00139
00140 return wsDD;
00141 }
00142
00148 public static void setParsingWithValidation(boolean b) {
00149 LoaderManager lm = LoaderManager.getInstance();
00150
00151 try {
00152 ClassLoader tools = lm.getToolsLoader();
00153 Class manager = tools.loadClass(WS_MANAGER_CLASSNAME);
00154 Method m = manager.getDeclaredMethod("setParsingWithValidation", new Class[] {boolean.class});
00155 m.invoke(null, new Object[] {new Boolean(b)});
00156 } catch (Exception e) {
00157
00158 logger.log(BasicLevel.ERROR, e);
00159 }
00160 }
00161
00167 public static void removeCache(ClassLoader cl) {
00168 LoaderManager lm = LoaderManager.getInstance();
00169
00170 try {
00171 ClassLoader tools = lm.getToolsLoader();
00172 Class manager = tools.loadClass(WS_MANAGER_CLASSNAME);
00173 Method m = manager.getDeclaredMethod("getInstance", new Class[] {});
00174 Object instance = m.invoke(null, new Object[] {});
00175 m = manager.getDeclaredMethod("removeCache", new Class[] {ClassLoader.class});
00176 m.invoke(instance, new Object[] {cl});
00177 } catch (Exception e) {
00178
00179 logger.log(BasicLevel.ERROR, e);
00180 }
00181 }
00182
00183 }