@Override public void executeCommand() { pluginManager.hotswap(reloadMap); }
private static Class<?> reloadProxyByteCode(ClassLoader classLoader, String proxyName, byte[] proxyBytes) { try { final Class<?> originalProxyClass = classLoader.loadClass(proxyName); try { Map<Class<?>, byte[]> reloadMap = new HashMap<Class<?>, byte[]>(); reloadMap.put(originalProxyClass, proxyBytes); // TODO : is this standard way how to reload class? PluginManager.getInstance().hotswap(reloadMap); return originalProxyClass; } catch (Exception e) { throw new RuntimeException(e); } } catch (ClassNotFoundException e) { //it has not actually been loaded yet } return null; } }
public void executeSingleCommand() { try { Class<?> clazz = classLoader.loadClass(className); Map<String, String> signatureMap = ProxyClassSignatureHelper.getNonSyntheticSignatureMap(clazz); if (!signatureMap.equals(signatureMapOrig)) { byte[] generateProxyClass = ProxyGenerator.generateProxyClass(className, clazz.getInterfaces()); Map<Class<?>, byte[]> reloadMap = new HashMap<Class<?>, byte[]>(); reloadMap.put(clazz, generateProxyClass); PluginManager.getInstance().hotswap(reloadMap); LOGGER.reload("Class '{}' has been reloaded.", className); } } catch (ClassNotFoundException e) { LOGGER.error("Error redefining java proxy {}", e, className); } }
Map<Class<?>, byte[]> reloadMap = new HashMap<Class<?>, byte[]>(); reloadMap.put(originalProxyClass, bytes); PluginManager.getInstance().hotswap(reloadMap); return originalProxyClass; } catch (Exception e) {
public static Class<?> toClass(ClassFile ct, ClassLoader loader, ProtectionDomain domain) { if (MAGIC_IN_PROGRESS.get()) { try { final Class<?> originalProxyClass = loader.loadClass(ct.getName()); try { ByteArrayDataOutputStream out = new ByteArrayDataOutputStream(); ct.write(out); Map<Class<?>, byte[]> reloadMap = new HashMap<Class<?>, byte[]>(); reloadMap.put(originalProxyClass, out.getBytes()); // TODO : is this standard way how to reload class? PluginManager.getInstance().hotswap(reloadMap); return originalProxyClass; } catch (Exception e) { throw new RuntimeException(e); } } catch (ClassNotFoundException e) { //it has not actually been loaded yet return ClassFileUtils.toClass(ct, loader, domain); } } return ClassFileUtils.toClass(ct, loader, domain); }