[jboss-cvs] JBossAS SVN: r103467 - trunk/server/src/main/java/org/jboss.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Apr 1 20:45:38 EDT 2010


Author: smarlow at redhat.com
Date: 2010-04-01 20:45:38 -0400 (Thu, 01 Apr 2010)
New Revision: 103467

Modified:
   trunk/server/src/main/java/org/jboss/Shutdown.java
Log:
JBAS-7825 adjust shutdown for jsr-160 changes

Modified: trunk/server/src/main/java/org/jboss/Shutdown.java
===================================================================
--- trunk/server/src/main/java/org/jboss/Shutdown.java	2010-04-01 23:17:33 UTC (rev 103466)
+++ trunk/server/src/main/java/org/jboss/Shutdown.java	2010-04-02 00:45:38 UTC (rev 103467)
@@ -31,16 +31,21 @@
 import java.lang.reflect.Proxy;
 import java.lang.reflect.UndeclaredThrowableException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Hashtable;
 
 import javax.management.MBeanServerConnection;
 import javax.management.ObjectName;
+import javax.management.remote.JMXConnector;
+import javax.management.remote.JMXConnectorFactory;
+import javax.management.remote.JMXServiceURL;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 
 import org.jboss.bootstrap.api.as.server.JBossASServer;
 import org.jboss.naming.HttpNamingContextFactory;
 import org.jboss.security.SecurityAssociation;
+import org.jboss.security.SecurityContextAssociation;
 import org.jboss.security.SimplePrincipal;
 import org.jnp.interfaces.NamingContext;
 
@@ -57,9 +62,14 @@
    /////////////////////////////////////////////////////////////////////////
    //                         Command Line Support                        //
    /////////////////////////////////////////////////////////////////////////
-   
+
    public static final String PROGRAM_NAME = System.getProperty("program.name", "shutdown");
-   
+   public static final String DEFAULT_BASEURL = "service:jmx:rmi:///jndi/rmi://";
+   public static final String DEFAULT_RMIOBJECTNAME = "/jmxrmi";
+   public static final String DEFAULT_JMXSERVICEURL = "service:jmx:rmi:///jndi/rmi://localhost:1090/jmxrmi";
+   public static final String DEFAULT_HOSTNAME = "localhost";
+   public static final String DEFAULT_PORT ="1090";
+
    protected static void displayUsage()
    {
       System.out.println("A JMX client to shutdown (exit or halt) a remote JBoss server.");
@@ -70,7 +80,9 @@
       System.out.println("    -h, --help                Show this help message (default)");
       System.out.println("    -D<name>[=<value>]        Set a system property");
       System.out.println("    --                        Stop processing options");
-      System.out.println("    -s, --server=<url>        Specify the JNDI URL of the remote server");
+      System.out.println("    -s, --server=<url>        The JMX service URL of the remote server (e.g. "+ DEFAULT_JMXSERVICEURL +") ");
+      System.out.println("    -o, --host=<HOSTNAME>     The name of the remote server (e.g. "+ DEFAULT_HOSTNAME +") ");
+      System.out.println("    -r, --port=<PORTNUMBER>   The rmiRegistryPort of the remote server (e.g. "+ DEFAULT_PORT +") ");
       System.out.println("    -n, --serverName=<url>    Specify the JMX name of the ServerImpl");
       System.out.println("    -a, --adapter=<name>      Specify JNDI name of the MBeanServerConnection to use");
       System.out.println("    -u, --user=<name>         Specify the username for authentication");
@@ -79,6 +91,8 @@
       System.out.println("operations:");
       System.out.println("    -S, --shutdown            Shutdown the server");
       System.out.println();
+      System.out.println("for convenience, you can specify --host and --port but not with the --server=<url> which overrides host + port. ");
+
    }
 
    public static void main(final String[] args) throws Exception
@@ -88,8 +102,8 @@
          displayUsage();
          System.exit(0);
       }
-      
-      String sopts = "-:hD:s:n:a:u:p:S";
+
+      String sopts = "-:hD:s:n:a:u:p:S::v::o:r:";
       LongOpt[] lopts =
       {
          new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h'),
@@ -98,7 +112,10 @@
          new LongOpt("serverName", LongOpt.REQUIRED_ARGUMENT, null, 'n'),
          new LongOpt("shutdown", LongOpt.NO_ARGUMENT, null, 'S'),
          new LongOpt("user", LongOpt.REQUIRED_ARGUMENT, null, 'u'),
+         new LongOpt("verbose", LongOpt.NO_ARGUMENT, null, 'v'),
          new LongOpt("password", LongOpt.REQUIRED_ARGUMENT, null, 'p'),
+         new LongOpt("host", LongOpt.REQUIRED_ARGUMENT, null, 'o'),
+         new LongOpt("port", LongOpt.REQUIRED_ARGUMENT, null, 'r'),
       };
 
       Getopt getopt = new Getopt(PROGRAM_NAME, args, sopts, lopts);
@@ -106,10 +123,12 @@
       String arg;
 
       String serverURL = null;
-      String adapterName = "jmx/rmi/RMIAdaptor";
       String username = null;
       String password = null;
       ObjectName serverJMXName = new ObjectName("jboss.system:type=Server");
+      String hostname=null;
+      String port=null;
+      boolean verbose = false;
 
       while ((code = getopt.getopt()) != -1)
       {
@@ -160,7 +179,8 @@
                // nothing...
                break;
             case 'a':
-               adapterName = getopt.getOptarg();
+               String adapterName = getopt.getOptarg();
+               System.out.println("adapter name is ignored " + adapterName);
                break;
             case 'u':
                username = getopt.getOptarg();
@@ -170,9 +190,22 @@
                password = getopt.getOptarg();
                SecurityAssociation.setCredential(password);
                break;
+            // host name
+            case 'o':
+               hostname = getopt.getOptarg();
+               break;
+
+            // host port
+            case 'r':
+               port = getopt.getOptarg();
+               break;
+            // be noisy
+            case 'v':
+               verbose = true;
+               break;
          }
       }
-      
+
       InitialContext ctx;
 
       // If there was a username specified, but no password prompt for it
@@ -184,35 +217,30 @@
          SecurityAssociation.setCredential(password);
       }
 
-      if (serverURL == null)
+      if( serverURL == null)
       {
-         ctx = new InitialContext();
+         serverURL = DEFAULT_BASEURL +
+            (hostname != null ? hostname : DEFAULT_HOSTNAME) +
+            ":" +
+            (port != null ? port : DEFAULT_PORT) +
+         DEFAULT_RMIOBJECTNAME;
       }
-      else
-      {
-         Hashtable env = new Hashtable();
-         env.put(Context.PROVIDER_URL, serverURL);
-         env.put(NamingContext.JNP_DISABLE_DISCOVERY, "true");
-         // This is a hack
-         if (serverURL.startsWith("http:") || serverURL.startsWith("https:"))
-            env.put(Context.INITIAL_CONTEXT_FACTORY, HttpNamingContextFactory.class.getName());
-         ctx  = new InitialContext(env);
-      }
 
-      Object obj = ctx.lookup(adapterName);
-      if (!(obj instanceof MBeanServerConnection))
+      if( verbose )
       {
-         throw new RuntimeException("Object not of type: MBeanServerConnection, but: " +
-            (obj == null ? "not found" : obj.getClass().getName()));
+         System.out.println("JMX server url=" + serverURL);
       }
+      HashMap env = new HashMap();
+      JMXServiceURL url = new JMXServiceURL(serverURL);
+      JMXConnector jmxc = JMXConnectorFactory.connect(url, env);
+      MBeanServerConnection adaptor = jmxc.getMBeanServerConnection();
 
-      MBeanServerConnection adaptor = (MBeanServerConnection) obj;
       ServerProxyHandler handler = new ServerProxyHandler(adaptor, serverJMXName);
       Class<?>[] ifaces = {JBossASServer.class};
       ClassLoader tcl = Thread.currentThread().getContextClassLoader();
       JBossASServer server = (JBossASServer) Proxy.newProxyInstance(tcl, ifaces, handler);
       server.shutdown();
-      
+
       System.out.println("Shutdown message has been posted to the server.");
       System.out.println("Server shutdown may take a while - check logfiles for completion");
    }




More information about the jboss-cvs-commits mailing list