static boolean loadAgent ( ) { synchronized ( AgentLoader . class . getName ( ) . intern ( ) ) { if ( ! agentIsAvailable ( ) && VIRTUAL_MACHINE_LOAD_AGENT != null ) { try { warnIfOSX ( ) ; String name = ManagementFactory . getRuntimeMXBean ( ) . getName ( ) ; Object vm = VIRTUAL_MACHINE_ATTACH . invoke ( null , name . substring ( 0 , name . indexOf ( ' ' ) ) ) ; try { File agent = getAgentFile ( ) ; LOGGER . info ( "Trying to load agent @ {}" , agent ) ; if ( agent != null ) { VIRTUAL_MACHINE_LOAD_AGENT . invoke ( vm , agent . getAbsolutePath ( ) ) ; } } finally { VIRTUAL_MACHINE_DETACH . invoke ( vm ) ; } } catch ( InvocationTargetException ite ) { Throwable cause = ite . getCause ( ) ; LOGGER . info ( "Failed to attach to VM and load the agent: {}: {}" , cause . getClass ( ) , cause . getMessage ( ) ) ; } catch ( Throwable t ) { LOGGER . info ( "Failed to attach to VM and load the agent: {}: {}" , t . getClass ( ) , t . getMessage ( ) ) ; } } final boolean b = agentIsAvailable ( ) ; if ( b ) { LOGGER . info ( "Agent successfully loaded and available!" ) ; } return b ; } }
Attempts to load the agent through the Attach API