00001
00025 package org.objectweb.jonas_rar.deployment.lib.wrapper;
00026
00027 import java.lang.reflect.InvocationTargetException;
00028 import java.lang.reflect.Method;
00029
00030 import javax.naming.Context;
00031
00032 import org.objectweb.jonas_lib.deployment.api.DeploymentDescException;
00033
00034 import org.objectweb.jonas_rar.deployment.api.RarDeploymentDesc;
00035 import org.objectweb.jonas_rar.deployment.api.RarDeploymentDescException;
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
00043
00049 public class RarManagerWrapper {
00050
00054 private static final String RAR_MANAGER_CLASSNAME = "org.objectweb.jonas_rar.deployment.lib.RarDeploymentDescManager";
00055
00059 private static Logger logger = Log.getLogger(Log.JONAS_EAR_PREFIX);
00060
00064 private RarManagerWrapper() {
00065 }
00066
00077 public static RarDeploymentDesc getRarDeploymentDesc(String rar, ClassLoader cl)
00078 throws DeploymentDescException {
00079 LoaderManager lm = LoaderManager.getInstance();
00080 RarDeploymentDesc rarDD = null;
00081 try {
00082 ClassLoader tools = lm.getToolsLoader();
00083 Class manager = tools.loadClass(RAR_MANAGER_CLASSNAME);
00084 Method m = manager.getDeclaredMethod("getInstance", new Class[] {java.lang.String.class, java.lang.ClassLoader.class});
00085 rarDD = (RarDeploymentDesc) m.invoke(null, new Object[] {rar, cl});
00086 } catch (InvocationTargetException ite) {
00087 Throwable t = ite.getTargetException();
00088 if (RarDeploymentDescException.class.isInstance(t)) {
00089 throw (RarDeploymentDescException) ite.getTargetException();
00090 } else {
00091 throw new RarDeploymentDescException("RarDeploymentDescManager.getInstance fails", t);
00092 }
00093 } catch (Exception e) {
00094
00095 throw new RarDeploymentDescException("Problems when using reflection on RarDeploymentDescManager", e);
00096 }
00097 return rarDD;
00098 }
00099
00105 public static void setParsingWithValidation(boolean b) {
00106 LoaderManager lm = LoaderManager.getInstance();
00107
00108 try {
00109 ClassLoader tools = lm.getToolsLoader();
00110 Class manager = tools.loadClass(RAR_MANAGER_CLASSNAME);
00111 Method m = manager.getDeclaredMethod("setParsingWithValidation", new Class[] {boolean.class});
00112 m.invoke(null, new Object[] {new Boolean(b)});
00113 } catch (Exception e) {
00114
00115 logger.log(BasicLevel.ERROR, e);
00116 }
00117 }
00118
00128 public static RarDeploymentDesc getInstance(Context ctx) throws DeploymentDescException {
00129 LoaderManager lm = LoaderManager.getInstance();
00130 RarDeploymentDesc rarDD = null;
00131
00132 try {
00133 ClassLoader tools = lm.getToolsLoader();
00134 Class manager = tools.loadClass(RAR_MANAGER_CLASSNAME);
00135 Method m = manager.getDeclaredMethod("getInstance", new Class[] {javax.naming.Context.class});
00136 rarDD = (RarDeploymentDesc) m.invoke(null, new Object[] {ctx});
00137 } catch (InvocationTargetException ite) {
00138 Throwable t = ite.getTargetException();
00139 if (RarDeploymentDescException.class.isInstance(t)) {
00140 throw (RarDeploymentDescException) ite.getTargetException();
00141 } else {
00142 throw new RarDeploymentDescException("RarDeploymentDescManager.getInstance fails", t);
00143 }
00144 } catch (Exception e) {
00145
00146 throw new RarDeploymentDescException("Problems when using reflection on RarDeploymentDescManager", e);
00147 }
00148
00149 return rarDD;
00150 }
00151
00152 }