Class RemoteAdminCommand

java.lang.Object
com.sun.enterprise.admin.remote.RemoteAdminCommand
Direct Known Subclasses:
ServerRemoteAdminCommand

public class RemoteAdminCommand extends Object
Utility class for executing remote admin commands. Each instance of RemoteAdminCommand represents a particular remote command on a particular remote server accessed using particular credentials. The instance can be reused to execute the same command multiple times with different arguments.

Arguments to the command are supplied using a ParameterMap passed to the executeCommand method. ParameterMap is a MultiMap where each key can have multiple values, although this class only supports a single value for each option. Operands for the command are stored as the option named "DEFAULT" and can have multiple values.

Before a command can be executed, the metadata for the command (in the form of a CommandModel) is required. The getCommandModel method will fetch the metadata from the server, save it, and return it. If the CommandModel for a command is known independently (e.g., stored in a local cache, or known a priori), it can be set using the setCommandModel method. If the metadata isn't known when the exectureCommand method is called, it will fetch the metadata from the server before executing the command.

Any files returned by the command will be stored in the current directory. The setFileOutputDirectory method can be used to control where returned files are saved.

This implementation is now in retention period. All content was migrated to RemoteRestAdminCommand. This implementation will be removed just after all necessary changes and tests will be done.

  • Field Details

    • COMMAND_MODEL_MATCH_HEADER

      public static final String COMMAND_MODEL_MATCH_HEADER
      See Also:
    • output

      protected String output
    • name

      protected String name
    • host

      protected String host
    • port

      protected int port
    • secure

      protected boolean secure
    • user

      protected String user
    • password

      protected char[] password
    • logger

      protected Logger logger
    • scope

      protected String scope
    • authToken

      protected String authToken
    • prohibitDirectoryUploads

      protected boolean prohibitDirectoryUploads
    • options

      protected org.glassfish.api.admin.ParameterMap options
    • operands

      protected List<String> operands
  • Constructor Details

    • RemoteAdminCommand

      public RemoteAdminCommand(String name, String host, int port) throws org.glassfish.api.admin.CommandException
      Throws:
      org.glassfish.api.admin.CommandException
    • RemoteAdminCommand

      public RemoteAdminCommand(String name, String host, int port, boolean secure, String user, char[] password, Logger logger) throws org.glassfish.api.admin.CommandException
      Throws:
      org.glassfish.api.admin.CommandException
    • RemoteAdminCommand

      public RemoteAdminCommand(String name, String host, int port, boolean secure, String user, char[] password, Logger logger, String scope, String authToken, boolean prohibitDirectoryUploads) throws org.glassfish.api.admin.CommandException
      Construct a new remote command object. The command and arguments are supplied later using the execute method in the superclass.
      Throws:
      org.glassfish.api.admin.CommandException
  • Method Details

    • setResponseFormatType

      public void setResponseFormatType(String responseFormatType)
      Set the response type used in requests to the server. The response type is sent in the User-Agent HTTP header and tells the server what format of response to produce.
    • setUserOut

      public void setUserOut(OutputStream userOut)
      If set, the raw response from the command is written to the specified stream.
    • setCommandModel

      public void setCommandModel(org.glassfish.api.admin.CommandModel commandModel)
      Set the CommandModel used by this command. Normally the CommandModel will be fetched from the server using the getCommandModel method, which will also save the CommandModel for further use. If the CommandModel is known in advance, it can be set with this method and avoid the call to the server.
    • setReadTimeout

      public void setReadTimeout(int readTimeout)
      Set the read timeout for the URLConnection.
    • getReadTimeout

      public static int getReadTimeout()
    • setConnectTimeout

      public void setConnectTimeout(int connectTimeout)
      Set the connect timeout for the URLConnection.
    • setInteractive

      public void setInteractive(boolean state)
      Set the interactive mode for the command. By default, the command is interactive.
    • setOmitCache

      public void setOmitCache(boolean omitCache)
      Omit local AdminCache to process command metadata. If true it will download the metadata from remote server.
      Default value is false
    • getCommandModel

      public org.glassfish.api.admin.CommandModel getCommandModel() throws org.glassfish.api.admin.CommandException
      Get the CommandModel for the command from the server. If the CommandModel hasn't been set, it's fetched from the server.
      Returns:
      the model for the command
      Throws:
      org.glassfish.api.admin.CommandException - if the server can't be contacted
    • isCommandModelFromCache

      public boolean isCommandModelFromCache()
      If command model was load from local cache.
    • setFileOutputDirectory

      public void setFileOutputDirectory(File dir)
      Set the directory in which any returned files will be stored. The default is the user's home directory.
    • headers

      public List<Header> headers()
      Return a modifiable list of headers to be added to the request.
    • executeCommand

      public String executeCommand(org.glassfish.api.admin.ParameterMap opts) throws org.glassfish.api.admin.CommandException
      Run the command using the specified arguments. Return the output of the command.
      Throws:
      org.glassfish.api.admin.CommandException
    • getAttributes

      public Map<String,String> getAttributes()
      After a successful command execution, the attributes returned by the command are saved. This method returns those saved attributes.
    • updateAuthentication

      protected boolean updateAuthentication()
      Return true if we're successful in collecting new information (and thus the caller should try the request again). Subclasses can override to (e.g.) collect updated authentication information by prompting the user. The implementation in this class returns false, indicating that the authentication information was not updated.
    • getFromEnvironment

      protected String getFromEnvironment(String name)
      Subclasses can override to supply parameter values from environment. The implementation in this class returns null, indicating that the name is not available in the environment.
    • retryUsingSecureConnection

      protected boolean retryUsingSecureConnection(String host, int port)
      Called when a non-secure connection attempt fails and it appears that the server requires a secure connection. Subclasses can override to indicate that the connection should The implementation in this class returns false, indicating that the connection should not be retried.
    • reportAuthenticationException

      protected String reportAuthenticationException()
      Return the error message to be used in the AuthenticationException. Subclasses can override to provide a more detailed message, for example, indicating the source of the password that failed. The implementation in this class returns a default error message.
    • getCommandURI

      protected StringBuilder getCommandURI()
      Get the URI for executing the command.
    • getHttpConnectorAddress

      protected HttpConnectorAddress getHttpConnectorAddress(String host, int port, boolean shouldUseSecure)
      Provides an HttpConnectorAddress for use in connecting to the desired admin listener.

      This implementation works for true admin clients and will not work correctly for commands submitted to instances from inside the DAS. (That is done from the implementation in ServerRemoteAdminCommand which extends this class.)

      This code constructs the HttpConnectorAddress in a way that uses either no SSLSocketFactory (if security is off) or uses an SSLSocketFactory linked to the asadmin truststore.

      Parameters:
      host - the host name to which the connection should be made
      port - the admin port on that host
      shouldUseSecure - whether SSL should be used to connect or not
      Returns:
    • addAdditionalHeaders

      protected void addAdditionalHeaders(URLConnection urlConnection)
      Adds any headers needed for the current environment to the admin request.
      Parameters:
      urlConnection -
    • processHeaders

      protected void processHeaders(URLConnection urlConnection)
      Process any headers needed from the reply to the admin request. Subclasses can override this method to handle processing headers in the command's reply.
      Parameters:
      urlConnection -
    • authenticationInfo

      protected AuthenticationInfo authenticationInfo()
      Returns the username/password authenticaiton information to use in building the outbound HTTP connection.
      Returns:
      the username/password auth. information to send with the request
    • getUsage

      public String getUsage()
      Get the usage text. If we got usage information from the server, use it.
      Returns:
      usage text
    • fetchCommandModel

      protected void fetchCommandModel() throws org.glassfish.api.admin.CommandException
      Fetch the command metadata from the remote server.
      Throws:
      org.glassfish.api.admin.CommandException
    • getCanonicalHost

      protected String getCanonicalHost()