/** * */ package org.activejpa.enhancer; import java.io.File; import java.net.URL; import java.net.URLClassLoader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author ganeshs * */ public class ActiveJpaAgentLoader { private static final Logger logger = LoggerFactory.getLogger(ActiveJpaAgentLoader.class); private static final ActiveJpaAgentLoader loader = new ActiveJpaAgentLoader(); private ActiveJpaAgentLoader() { } public static ActiveJpaAgentLoader instance() { return loader; } public void loadAgent() { logger.info("dynamically loading javaagent"); ClassLoader loader = null; try { loader = getClassLoader(); loader.loadClass("org.activejpa.enhancer.ActiveJpaAgentLoaderImpl").getMethod("loadAgent").invoke(null); } catch (Exception e) { throw new RuntimeException(e); } } private ClassLoader getClassLoader() throws Exception { File javaHome = new File(System.getProperty("java.home")); String toolsPath = javaHome.getName().equalsIgnoreCase("jre") ? "../lib/tools.jar" : "lib/tools.jar"; URL[] urls = new URL[] { ActiveJpaAgent.class.getProtectionDomain().getCodeSource().getLocation(), new File(javaHome, toolsPath).getCanonicalFile().toURI().toURL() }; return new URLClassLoader(urls, null); } }