00001
00025 package org.objectweb.jonas_ejb.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_ejb.deployment.api.DeploymentDesc;
00033
00034 import org.objectweb.jonas_lib.deployment.api.DeploymentDescException;
00035
00036 import org.objectweb.jonas.common.Log;
00037 import org.objectweb.jonas.server.LoaderManager;
00038
00039 import org.objectweb.util.monolog.api.BasicLevel;
00040 import org.objectweb.util.monolog.api.Logger;
00041
00042
00048 public class EjbManagerWrapper {
00049
00053 private static final String EJB_MANAGER_CLASSNAME = "org.objectweb.jonas_ejb.deployment.lib.EjbDeploymentDescManager";
00054
00058 private static Logger logger = Log.getLogger(Log.JONAS_EAR_PREFIX);
00059
00063 private EjbManagerWrapper() { }
00064
00076 public static DeploymentDesc getDeploymentDesc(URL url, ClassLoader moduleCL, ClassLoader earCL)
00077 throws DeploymentDescException {
00078 LoaderManager lm = LoaderManager.getInstance();
00079 DeploymentDesc dd = null;
00080
00081 try {
00082 ClassLoader tools = lm.getToolsLoader();
00083 Class manager = tools.loadClass(EJB_MANAGER_CLASSNAME);
00084 Method m = manager.getDeclaredMethod("getInstance", new Class[] {});
00085 Object instance = m.invoke(null, new Object[] {});
00086 m = manager.getDeclaredMethod("getDeploymentDesc", new Class[] {URL.class, ClassLoader.class, ClassLoader.class});
00087 dd = (DeploymentDesc) m.invoke(instance, new Object[] {url, moduleCL, earCL});
00088 } catch (InvocationTargetException ite) {
00089 Throwable t = ite.getTargetException();
00090 if (DeploymentDescException.class.isInstance(t)) {
00091 throw (DeploymentDescException) ite.getTargetException();
00092 } else {
00093 throw new DeploymentDescException("EjbDeploymentDescManager.getDeploymentDesc fails", t);
00094 }
00095 } catch (Exception e) {
00096
00097 throw new DeploymentDescException("Problems when using reflection on EjbDeploymentDescManager", e);
00098 }
00099
00100 return dd;
00101 }
00102
00110 public static void setAvailableEjbJarsAndAltDDs(URLClassLoader earClassLoader, URL[] jarUrls, URL[] ejbsAltDDs) {
00111 LoaderManager lm = LoaderManager.getInstance();
00112 try {
00113 ClassLoader tools = lm.getToolsLoader();
00114 Class manager = tools.loadClass(EJB_MANAGER_CLASSNAME);
00115 Method m = manager.getDeclaredMethod("getInstance", new Class[] {});
00116 Object instance = m.invoke(null, new Object[] {});
00117 m = manager.getDeclaredMethod("setAvailableEjbJarsAndAltDDs", new Class[] {ClassLoader.class, URL[].class, URL[].class});
00118 m.invoke(instance, new Object[] {earClassLoader, jarUrls, ejbsAltDDs});
00119 } catch (Exception e) {
00120
00121 logger.log(BasicLevel.ERROR, e);
00122 }
00123 }
00124
00130 public static void setParsingWithValidation(boolean b) {
00131 LoaderManager lm = LoaderManager.getInstance();
00132 try {
00133 ClassLoader tools = lm.getToolsLoader();
00134 Class manager = tools.loadClass(EJB_MANAGER_CLASSNAME);
00135 Method m = manager.getDeclaredMethod("setParsingWithValidation", new Class[] {boolean.class});
00136 m.invoke(null, new Object[] {new Boolean(b)});
00137 } catch (Exception e) {
00138
00139 logger.log(BasicLevel.ERROR, e);
00140 }
00141 }
00142
00148 public static void removeCache(ClassLoader classLoader) {
00149 LoaderManager lm = LoaderManager.getInstance();
00150 try {
00151 ClassLoader tools = lm.getToolsLoader();
00152 Class manager = tools.loadClass(EJB_MANAGER_CLASSNAME);
00153 Method m = manager.getDeclaredMethod("getInstance", new Class[] {});
00154 Object instance = m.invoke(null, new Object[] {});
00155 m = manager.getDeclaredMethod("removeCache", new Class[] {ClassLoader.class});
00156 m.invoke(instance, new Object[] {classLoader});
00157 } catch (Exception e) {
00158
00159 logger.log(BasicLevel.ERROR, e);
00160 }
00161 }
00162
00163 }