package org.intrace.agentloader; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.List; import com.sun.tools.attach.VirtualMachine; import com.sun.tools.attach.VirtualMachineDescriptor; /** * Command line agent loader. */ public class AgentLoader { /** * Cmd line tool. * @param args * @throws Exception */ public static void main(String[] args) throws Exception { BufferedReader readIn = new BufferedReader(new InputStreamReader(System.in)); String inLine = ""; while (!"quit".equals(inLine)) { System.out.print("Enter command [attach/quit]: "); inLine = readIn.readLine(); if ("attach".equals(inLine)) { attachToVM(readIn); } } } private static void attachToVM(BufferedReader xiReadIn) { try { listProcIDs(); System.out.print("Choose VM: "); String inLine = xiReadIn.readLine(); if (!"".equals(inLine)) { VirtualMachine vm = VirtualMachine.attach(inLine); System.out.println("Attached to: " + vm.id()); while (!"done".equals(inLine)) { System.out.print("Enter command [load/done]: "); inLine = xiReadIn.readLine(); if ("load".equals(inLine)) { loadAgent(xiReadIn, vm); } } vm.detach(); System.out.println("Detatched from: " + vm.id()); } } catch (Exception e) { e.printStackTrace(); } } private static void loadAgent(BufferedReader xiReadIn, VirtualMachine vm) throws Exception { System.out.print("Enter path to agent jar (blank for default /traceagent.jar): "); String agentPath = xiReadIn.readLine(); String defaultAgentPath = "/traceagent.jar"; if ("".equals(agentPath)) { agentPath = defaultAgentPath; } System.out.print("Enter agent options: "); String agentOptions = xiReadIn.readLine(); String defaultAgentOpt = ""; if ("".equals(agentOptions)) { agentOptions = defaultAgentOpt; } vm.loadAgent(agentPath, agentOptions); System.out.println("Loaded agent into: " + vm.toString()); } private static void listProcIDs() { System.out.println("============== Begin List =============="); List<VirtualMachineDescriptor> vmList = VirtualMachine.list(); for (VirtualMachineDescriptor vm : vmList) { System.out.println(vm.displayName() + ":" + vm.id()); } System.out.println("============== End List =============="); } }