1 23 24 29 30 package com.sun.cli.jmx.cmd; 31 32 import java.util.Map ; 33 import java.util.HashMap ; 34 import java.util.Set ; 35 import java.util.Iterator ; 36 37 import javax.management.MBeanServerConnection ; 38 39 import com.sun.cli.util.stringifier.ArrayStringifier; 40 import com.sun.cli.util.StringValuePersister; 41 import com.sun.cli.jmx.support.CLISupportMBeanProxy; 42 import com.sun.cli.util.stringifier.IteratorStringifier; 43 import com.sun.cli.util.ClassUtil; 44 45 import com.sun.cli.jmx.spi.JMXConnectorProvider; 46 47 import com.sun.cli.jmx.spi.JMXConnectorProviderInfo; 48 49 50 53 public class ConnectCmd extends JMXCmd 54 { 55 public 56 ConnectCmd( final CmdEnv env ) 57 { 58 super( env ); 59 } 60 61 int 62 getNumRequiredOperands() 63 { 64 return( 0 ); 66 } 67 68 static JMXConnectorProviderInfo 69 getProviderInfo( final Class theClass ) 70 throws Exception 71 { 72 return( JMXConnectorProviderInfo.InfoGetter.getInfo( theClass ) ); 73 } 74 75 public String 76 getUsage() 77 { 78 final String usage = CmdStrings.CONNECT_HELP.toString(); 79 80 String extra = null; 81 82 try 83 { 84 extra = "\n\nConnector usage:\n"; 85 86 final JMXConnectorProvider [] providers = getConnectionMgr().getProviders(); 87 88 89 for ( int i = 0; i < providers.length; ++i ) 90 { 91 extra = extra + providers[ i ].getClass().getName() + ":\n"; 92 93 final JMXConnectorProviderInfo info = getProviderInfo( providers[ i ].getClass() ); 94 95 if ( info != null ) 96 { 97 extra = extra + info.getUsage() + "\n"; 98 } 99 else 100 { 101 extra = extra + "<none available>"; 102 } 103 104 extra = extra + "\n"; 105 } 106 } 107 catch( Exception e ) 108 { 109 } 110 111 return( usage + extra ); 112 } 113 114 115 static private final String OPTIONS_INFO = 116 "list host,1 port,1 user,1 password-file,1 protocol,1 options,1"; 117 118 ArgHelper.OptionsInfo 119 getOptionInfo() 120 throws ArgHelper.IllegalOptionException 121 { 122 return( new ArgHelperOptionsInfo( OPTIONS_INFO ) ); 123 } 124 125 126 void 127 establishProxy() 128 throws Exception 129 { 130 } 132 133 ConnectInfo 134 getDefaultConnectInfo() 135 throws com.sun.cli.jmx.support.ArgParserException 136 { 137 final String envName = connectionNameToEnvName( DEFAULT_CONNECTION_NAME ); 138 139 final String defaultString = (String )envGet( envName ); 140 141 final ConnectInfo connectInfo = defaultString == null ? 142 null : new ConnectInfo( defaultString ); 143 144 return( connectInfo ); 145 } 146 147 final static String NAME = "connect"; 148 final static String NAME_ABBREV = "c"; 149 150 public static String [] 151 getNames( ) 152 { 153 return( new String [] { NAME, NAME_ABBREV } ); 154 } 155 156 157 boolean 158 isValidConnectionName( String name ) 159 { 160 return( name.indexOf( ':' ) < 0 && name.indexOf( '@' ) < 0 ); 161 } 162 163 164 165 boolean 166 isNamedConnection( String name ) 167 { 168 final String key = connectionNameToEnvName( name ); 169 170 final String value = (String )envGet( key ); 171 172 return( value != null ); 173 } 174 175 void 176 handleNamedConnect( String name ) 177 throws Exception 178 { 179 final String connectString = (String )envGet( connectionNameToEnvName( name ) ); 181 if ( connectString != null ) 182 { 183 final ConnectInfo connectInfo = new ConnectInfo( connectString ); 184 185 if ( connectInfo.equals( getConnectionMgr().getConnectInfo( name ) ) ) 186 { 187 println( "Connection already active: " + connectInfo.toString() ); 188 setProxy( name, connectInfo ); 189 } 190 else 191 { 192 setProxy( name, connectInfo ); 193 194 println( "Connection " + name + 195 " (" + connectInfo.toString() + ") is now the active connection" ); 196 } 197 envPut( connectionNameToEnvName( DEFAULT_CONNECTION_NAME ), connectInfo.toString(), true); 198 } 199 else 200 { 201 printError( "ERROR: No such named connection: " + name ); 202 } 203 } 204 205 void 206 handleConnect( final String name, final ConnectInfo connectInfo ) 207 throws Exception 208 { 209 envRemove( connectionNameToEnvName( name ) ); 210 envPut( connectionNameToEnvName( name ), connectInfo.toString(), true); 211 handleNamedConnect( name ); 212 } 213 214 static void 215 maybePut( Map m, String key, Object value ) 216 { 217 if ( value != null ) 218 { 219 m.put( key, value ); 220 } 221 } 222 223 void 224 listNamedConnections() 225 throws Exception 226 { 227 println( "Named connections:" ); 228 229 final Iterator iter = getEnvKeys( ENV_CONNECT_NAME_BASE + ".+" ).iterator(); 230 231 while ( iter.hasNext() ) 232 { 233 final String envName = (String )iter.next(); 234 final String value = (String )envGet( envName ); 235 236 println( envNameToConnectionName( envName ) + ": " + new ConnectInfo( value ) ); 237 } 238 } 239 240 241 void 242 listActiveConnections() 243 throws Exception 244 { 245 println( "Active connections:" ); 246 247 final ConnectionMgr mgr = getConnectionMgr(); 248 final Iterator iter = mgr.getNames().iterator(); 249 250 while ( iter.hasNext() ) 251 { 252 final String name = (String )iter.next(); 253 254 println( name + ": " + mgr.getConnectInfo( name ) ); 255 } 256 } 257 258 259 void 260 executeInternal() 261 throws Exception 262 { 263 final String [] operands = getOperands(); 264 265 if ( operands.length > 1 ) 267 { 268 throw new IllegalArgumentException ( "requires 0 or 1 operands" ); 269 } 270 271 if ( getBoolean( "list", null ) != null ) 272 { 273 listNamedConnections(); 274 println( "" ); 275 listActiveConnections(); 276 } 277 else if ( countOptions() == 0 ) 278 { 279 if ( operands.length == 0 ) 280 { 281 final ConnectInfo connectInfo = getDefaultConnectInfo(); 283 if ( connectInfo != null ) 284 { 285 handleNamedConnect( DEFAULT_CONNECTION_NAME ); 286 } 287 else 288 { 289 printError( "No default connection available. Please specify a connect string.\n" ); 290 printUsage(); 291 } 292 } 293 else 294 { 295 handleNamedConnect( operands[ 0 ] ); 297 } 298 } 299 else 300 { 301 final String host = getString( "host", "localhost" ); 302 final String port = getString( "port", null ); 303 final String protocol = getString( "protocol", "jmxmp" ); 304 final String user = getString( "user", null ); 305 final String passwordFile = getString( "password-file", null ); 306 final String options = getString( "options", null ); 307 308 final HashMap params = new HashMap (); 309 maybePut( params, JMXConnectorProvider.HOST, host ); 310 maybePut( params, JMXConnectorProvider.PORT, port ); 311 maybePut( params, JMXConnectorProvider.PROTOCOL, protocol ); 312 maybePut( params, JMXConnectorProvider.USER, user ); 313 maybePut( params, JMXConnectorProvider.PASSWORD_FILE, passwordFile ); 314 315 316 final String connectionName = (operands.length > 0) ? 317 operands[ 0 ] : DEFAULT_CONNECTION_NAME; 318 319 handleConnect( connectionName, new ConnectInfo( params ) ); 320 } 321 } 322 323 } 324 325 326 327 328 329 330 | Popular Tags |