Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * CustomAgent.java
- * https://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx
- */
- package example.rmi.agent;
- import java.io.IOException;
- import java.lang.management.ManagementFactory;
- import java.net.InetAddress;
- import java.rmi.registry.LocateRegistry;
- import java.util.HashMap;
- import javax.management.MBeanServer;
- import javax.management.remote.JMXConnectorServer;
- import javax.management.remote.JMXConnectorServerFactory;
- import javax.management.remote.JMXServiceURL;
- /**
- * This CustomAgent will start an RMI COnnector Server using only
- * port "example.rmi.agent.port".
- *
- * @author dfuchs
- */
- public class CustomAgent {
- private CustomAgent() { }
- public static void premain(String agentArgs)
- throws IOException {
- // Ensure cryptographically strong random number generator used
- // to choose the object number - see java.rmi.server.ObjID
- //
- System.setProperty("java.rmi.server.randomIDs", "true");
- // Start an RMI registry on port specified by example.rmi.agent.port
- // (default 3000).
- //
- final int port= Integer.parseInt(
- System.getProperty("example.rmi.agent.port","3000"));
- System.out.println("Create RMI registry on port "+port);
- LocateRegistry.createRegistry(port);
- // Retrieve the PlatformMBeanServer.
- //
- System.out.println("Get the platform's MBean server");
- MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
- // Environment map.
- //
- System.out.println("Initialize the environment map");
- HashMap<String,Object> env = new HashMap<String,Object>();
- // This where we would enable security - left out of this
- // for the sake of the example....
- //
- // Create an RMI connector server.
- //
- // As specified in the JMXServiceURL the RMIServer stub will be
- // registered in the RMI registry running in the local host on
- // port 3000 with the name "jmxrmi". This is the same name the
- // out-of-the-box management agent uses to register the RMIServer
- // stub too.
- //
- // The port specified in "service:jmx:rmi://"+hostname+":"+port
- // is the second port, where RMI connection objects will be exported.
- // Here we use the same port as that we choose for the RMI registry.
- // The port for the RMI registry is specified in the second part
- // of the URL, in "rmi://"+hostname+":"+port
- //
- System.out.println("Create an RMI connector server");
- final String hostname = InetAddress.getLocalHost().getHostName();
- //JMXServiceURL url =
- // new JMXServiceURL("service:jmx:rmi://"+hostname+
- // ":"+port+"/jndi/rmi://"+hostname+":"+port+"/jmxrmi");
- //Added to allow connection through a firewall
- // We use (port+1) to export the RMI connection objects
- JMXServiceURL url =
- new JMXServiceURL("service:jmx:rmi://"+hostname+
- ":"+(port+1)+"/jndi/rmi://"+hostname+":"+port+"/jmxrmi");
- // Now create the server from the JMXServiceURL
- //
- JMXConnectorServer cs =
- JMXConnectorServerFactory.newJMXConnectorServer(url, env, mbs);
- // Start the RMI connector server.
- //
- System.out.println("Start the RMI connector server on port "+port);
- cs.start();
- }
- }
- <project name="Agent" basedir="." default="main">
- <property name="src.dir" value="src"/>
- <property name="build.dir" value="build"/>
- <property name="classes.dir" value="${build.dir}/classes"/>
- <property name="jar.dir" value="${build.dir}/jar"/>
- <property name="main-class" value="example.rmi.agent.CustomAgent"/>
- <target name="clean">
- <delete dir="${build.dir}"/>
- </target>
- <target name="compile">
- <mkdir dir="${classes.dir}"/>
- <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
- </target>
- <target name="jar" depends="compile">
- <mkdir dir="${jar.dir}"/>
- <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
- <manifest>
- <attribute name="Main-Class" value="${main-class}"/>
- </manifest>
- </jar>
- </target>
- <target name="run" depends="jar">
- <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
- </target>
- <target name="clean-build" depends="clean,jar"/>
- <target name="main" depends="clean,run"/>
- <!-- Builds dist.agent.jar -->
- <target name="build-agent-jar" description="build an agent jar that can be used with -javaagent" depends="compile">
- <mkdir dir="${jar.dir}"/>
- <jar basedir="${classes.dir}" destfile="${jar.dir}/${ant.project.name}.jar">
- <manifest>
- <attribute name="Premain-Class" value="example.rmi.agent.CustomAgent"/>
- </manifest>
- </jar>
- <echo>To use this application with agent try:</echo>
- <echo>java -Dexample.rmi.port=3000 -javaagent:${dist.agent.jar} -classpath [application-classpath] [application-classpath] [application-main-class]</echo>
- </target>
- </project>
- Dec 18, 2011 4:57:46 PM RMIConnector connect
- FINER: [javax.management.remote.rmi.RMIConnector: jmxServiceURL=service:jmx:rmi://localhost:6005/jndi/rmi://localhost:6004/jmxrmi]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement