I ended up not using this because "restart" is not supported on Windows. But I decided to post this to provide an example of managing Glassfish internally using JMX.
import java.lang.management.ManagementFactory; import javax.management.JMException; import javax.management.MBeanServer; import javax.management.ObjectName; ... public void restart() { final String domain = "com.sun.appserv"; final String serversName = domain + ":type=servers,category=config"; MBeanServer mbeanSvr = ManagementFactory.getPlatformMBeanServer(); try { ObjectName serversObjName = new ObjectName( serversName ); String[] serverNames = (String[]) mbeanSvr.invoke( serversObjName, "getServerNamesList", null, null ); if( serverNames.length != 1 ) { logger.error( "Expected 1 Glassfish server name, found: " + String.valueOf( serverNames.length )); if( serverNames.length < 1 ) return; } final String svrInstName = domain + ":type=server-instance,name=" + serverNames[0]; ObjectName svrInstObjName = new ObjectName( svrInstName ); mbeanSvr.invoke( svrInstObjName, "restart", null, null ); } catch( JMException oe ) { logger.error( "Cannot restart server", oe ); } }