[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