1 45 46 package org.openejb.alt.config; 47 48 import org.openejb.OpenEJBException; 49 import org.openejb.util.SafeToolkit; 50 import org.openejb.util.FileUtils; 51 52 import java.util.HashMap ; 53 import java.net.URL ; 54 import java.io.File ; 55 56 59 public class TempCodebase { 60 61 protected static final HashMap tempCodebases = new HashMap (); 62 63 private final String codebase; 64 private final ClassLoader classLoader; 65 66 public TempCodebase(String codebase) throws OpenEJBException { 67 this.codebase = codebase; 68 ClassLoader cl = null; 69 try { 70 URL [] urlCodebase = new URL [1]; 71 urlCodebase[0] = createTempCopy(codebase).toURL(); 72 cl = new java.net.URLClassLoader (urlCodebase, TempCodebase.class.getClassLoader()); 73 } catch (java.net.MalformedURLException mue) { 74 throw new OpenEJBException(SafeToolkit.messages.format("cl0001", codebase, mue.getMessage())); 75 } catch (SecurityException se) { 76 throw new OpenEJBException(SafeToolkit.messages.format("cl0002", codebase, se.getMessage())); 77 } 78 this.classLoader = cl; 79 } 80 81 public String getCodebase() { 82 return codebase; 83 } 84 85 public ClassLoader getClassLoader() { 86 return classLoader; 87 } 88 89 public static TempCodebase getTempCodebase(String codebase) throws OpenEJBException { 90 if (codebase == null) { 91 codebase = "CLASSPATH"; 92 } 93 TempCodebase tempCodebase = (TempCodebase)tempCodebases.get(codebase); 94 if (tempCodebase == null){ 95 tempCodebase = new TempCodebase(codebase); 96 tempCodebases.put(codebase, tempCodebase); 97 } 98 return tempCodebase; 99 } 100 101 public Class loadClass(String className) throws OpenEJBException { 102 ClassLoader cl = getClassLoader(); 103 Class clazz = null; 104 try { 105 clazz = cl.loadClass(className); 106 } catch (ClassNotFoundException cnfe) { 107 throw new OpenEJBException(SafeToolkit.messages.format("cl0007", className, codebase)); 108 } 109 return clazz; 110 } 111 112 public static void unloadTempCodebase(String codebase) { 113 tempCodebases.remove(codebase); 115 } 116 117 126 protected static ClassLoader getCodebaseTempClassLoader(String codebase) throws OpenEJBException { 127 if (codebase == null) codebase = "CLASSPATH"; 128 129 ClassLoader cl = (ClassLoader ) tempCodebases.get(codebase); 130 if (cl == null) { 131 synchronized (SafeToolkit.codebases) { 132 cl = (ClassLoader ) SafeToolkit.codebases.get(codebase); 133 if (cl == null) { 134 try { 135 URL [] urlCodebase = new URL [1]; 136 urlCodebase[0] = createTempCopy(codebase).toURL(); 137 138 cl = new java.net.URLClassLoader (urlCodebase, SafeToolkit.class.getClassLoader()); 140 141 tempCodebases.put(codebase, cl); 142 } catch (java.net.MalformedURLException mue) { 143 throw new OpenEJBException(SafeToolkit.messages.format("cl0001", codebase, mue.getMessage())); 144 } catch (SecurityException se) { 145 throw new OpenEJBException(SafeToolkit.messages.format("cl0002", codebase, se.getMessage())); 146 } 147 } 148 } 149 } 150 return cl; 151 } 152 153 162 protected static ClassLoader getTempClassLoader(String codebase) throws OpenEJBException { 163 ClassLoader cl = null; 164 try { 165 URL [] urlCodebase = new URL [1]; 166 urlCodebase[0] = createTempCopy(codebase).toURL(); 167 168 cl = new java.net.URLClassLoader (urlCodebase, SafeToolkit.class.getClassLoader()); 170 } catch (java.net.MalformedURLException mue) { 171 throw new OpenEJBException(SafeToolkit.messages.format("cl0001", codebase, mue.getMessage())); 172 } catch (SecurityException se) { 173 throw new OpenEJBException(SafeToolkit.messages.format("cl0002", codebase, se.getMessage())); 174 } 175 return cl; 176 } 177 178 protected static File createTempCopy(String codebase) throws OpenEJBException { 179 File file = null; 180 181 try { 182 File codebaseFile = new File (codebase); 183 185 file = File.createTempFile("openejb_validate", ".jar", null); 186 file.deleteOnExit(); 187 188 FileUtils.copyFile(file, codebaseFile); 189 } catch (Exception e) { 190 throw new OpenEJBException(SafeToolkit.messages.format("cl0002", codebase, e.getMessage())); 191 } 192 return file; 193 } 194 } 195 | Popular Tags |