00001
00027 package org.objectweb.jonas_client.deployment.lib.wrapper;
00028
00029 import java.lang.reflect.InvocationTargetException;
00030 import java.lang.reflect.Method;
00031 import java.net.URL;
00032 import java.net.URLClassLoader;
00033
00034 import org.objectweb.jonas_client.deployment.api.ClientContainerDeploymentDesc;
00035 import org.objectweb.jonas_client.deployment.api.ClientContainerDeploymentDescException;
00036
00037 import org.objectweb.jonas.common.Log;
00038 import org.objectweb.jonas.server.LoaderManager;
00039
00040 import org.objectweb.util.monolog.api.BasicLevel;
00041 import org.objectweb.util.monolog.api.Logger;
00042
00049 public class ClientManagerWrapper {
00050
00054 private static Logger logger = Log.getLogger(Log.JONAS_CLIENT_PREFIX);
00055
00059 private ClientManagerWrapper() { }
00060
00072 public static ClientContainerDeploymentDesc getDeploymentDesc(URL url, ClassLoader moduleCL, ClassLoader earCL)
00073 throws ClientContainerDeploymentDescException {
00074 LoaderManager lm = LoaderManager.getInstance();
00075 ClientContainerDeploymentDesc ccDD = null;
00076
00077 try {
00078 ClassLoader tools = lm.getToolsLoader();
00079 Class manager = tools.loadClass("org.objectweb.jonas_client.deployment.lib.ClientDeploymentDescManager");
00080 Method m = manager.getDeclaredMethod("getInstance", new Class[] {});
00081 Object instance = m.invoke(null, new Object[] {});
00082 m = manager.getDeclaredMethod("getDeploymentDesc", new Class[] {URL.class, ClassLoader.class,
00083 ClassLoader.class});
00084 ccDD = (ClientContainerDeploymentDesc) m.invoke(instance, new Object[] {url, moduleCL, earCL});
00085 } catch (InvocationTargetException ite) {
00086 Throwable t = ite.getTargetException();
00087 if (ClientContainerDeploymentDescException.class.isInstance(t)) {
00088 throw (ClientContainerDeploymentDescException) ite.getTargetException();
00089 } else {
00090 throw new ClientContainerDeploymentDescException("ClientDeploymentDescManager.getDeploymentDesc fails", t);
00091 }
00092 } catch (Exception e) {
00093 e.printStackTrace();
00094
00095 throw new ClientContainerDeploymentDescException("Problems when using reflection on ClientDeploymentDescManager", e);
00096 }
00097
00098 return ccDD;
00099 }
00100
00108 public static void setAltDD(URLClassLoader earClassLoader, URL[] clientUrls, URL[] clientsAltDDs) {
00109 LoaderManager lm = LoaderManager.getInstance();
00110 try {
00111 ClassLoader tools = lm.getToolsLoader();
00112 Class manager = tools.loadClass("org.objectweb.jonas_client.deployment.lib.ClientDeploymentDescManager");
00113 Method m = manager.getDeclaredMethod("getInstance", new Class[] {});
00114 Object instance = m.invoke(null, new Object[] {});
00115 m = manager.getDeclaredMethod("setAltDD", new Class[] {ClassLoader.class, URL[].class, URL[].class});
00116 m.invoke(instance, new Object[] {earClassLoader, clientUrls, clientsAltDDs});
00117 } catch (Exception e) {
00118
00119 logger.log(BasicLevel.ERROR, e);
00120 }
00121 }
00122
00123 }