1 package com.freemindcafe.jmx.sample2.server;
3 import java.io.IOException;
4 import java.lang.management.ManagementFactory;
5 import java.net.ServerSocket;
6 import java.rmi.registry.LocateRegistry;
7 import java.rmi.registry.Registry;
8 import java.util.HashMap;
9 import java.util.Random;
11 import javax.management.MBeanServer;
12 import javax.management.MBeanServerFactory;
13 import javax.management.ObjectName;
14 import javax.management.remote.JMXConnectorServer;
15 import javax.management.remote.JMXConnectorServerFactory;
16 import javax.management.remote.JMXServiceURL;
17 import javax.management.remote.rmi.RMIConnectorServer;
19 import com.sun.jndi.rmi.registry.RegistryContextFactory;
23 private static final Random random =
new Random();
25 public static void main(String[] args)
29 LocateRegistry.createRegistry(jmxPort);
32 MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
35 JMXServiceURL address =
new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi://localhost:"+jmxPort+
"/EIPRMIConnector");
36 HashMap<String, String> environment =
new HashMap<String, String>();
37 environment.put(
"java.naming.factory.initial", RegistryContextFactory.class.getName());
38 environment.put(RMIConnectorServer.JNDI_REBIND_ATTRIBUTE,
"true");
39 JMXConnectorServer connector = JMXConnectorServerFactory.newJMXConnectorServer(address, environment, mBeanServer);
42 ObjectName mbeanName =
new ObjectName(
"com.eMeter.localhost.appName.appInstance:name=EIP.IHelloService");
44 mBeanServer.registerMBean(helloService, mbeanName);
46 System.out.println(
"Waiting forever...");
47 Thread.sleep(Long.MAX_VALUE);
50 private static int findFreePort(
int minPortNumber,
int maxPortNumber) {
51 if (minPortNumber >= maxPortNumber) {
52 throw new RuntimeException(
"Invalid port number range min ["
53 + minPortNumber +
"] max [" + maxPortNumber +
"]");
55 for (
int i = 0; i < 20; i++) {
56 int port = createAcceptablePort(minPortNumber, maxPortNumber);
57 if (checkPortIsFree(port)) {
61 throw new RuntimeException(
"Unable to find a free port");
64 private static int createAcceptablePort(
int minPortNumer,
int maxPortNumber) {
65 synchronized (random) {
66 int randomInt = random.nextInt();
67 final int portWithoutOffset = Math.abs(randomInt
68 % (maxPortNumber - minPortNumer + 1));
69 return portWithoutOffset + minPortNumer;
74 private static boolean checkPortIsFree(
int port) {
77 socket =
new ServerSocket(port);
78 int localPort = socket.getLocalPort();
81 }
catch (IOException e) {