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 Summary
Fields Modifier and Type Field Description protected String
authToken
static String
COMMAND_MODEL_MATCH_HEADER
protected String
host
protected Logger
logger
protected String
name
protected List<String>
operands
protected ParameterMap
options
protected String
output
protected char[]
password
protected int
port
protected boolean
prohibitDirectoryUploads
protected String
scope
protected boolean
secure
protected String
user
-
Constructor Summary
Constructors Constructor Description RemoteAdminCommand(String name, String host, int port)
RemoteAdminCommand(String name, String host, int port, boolean secure, String user, char[] password, Logger logger)
RemoteAdminCommand(String name, String host, int port, boolean secure, String user, char[] password, Logger logger, String scope, String authToken, boolean prohibitDirectoryUploads)
Construct a new remote command object.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
addAdditionalHeaders(URLConnection urlConnection)
Adds any headers needed for the current environment to the admin request.protected AuthenticationInfo
authenticationInfo()
String
executeCommand(ParameterMap opts)
Run the command using the specified arguments.protected void
fetchCommandModel()
Fetch the command metadata from the remote server.Map<String,String>
getAttributes()
After a successful command execution, the attributes returned by the command are saved.protected String
getCanonicalHost()
CommandModel
getCommandModel()
Get the CommandModel for the command from the server.protected StringBuilder
getCommandURI()
Get the URI for executing the command.protected String
getFromEnvironment(String name)
Subclasses can override to supply parameter values from environment.protected HttpConnectorAddress
getHttpConnectorAddress(String host, int port, boolean shouldUseSecure)
Provides an HttpConnectorAddress for use in connecting to the desired admin listener.static int
getReadTimeout()
String
getUsage()
Get the usage text.List<Header>
headers()
Return a modifiable list of headers to be added to the request.boolean
isCommandModelFromCache()
If command model was load from local cache.protected void
processHeaders(URLConnection urlConnection)
Process any headers needed from the reply to the admin request.protected String
reportAuthenticationException()
Return the error message to be used in the AuthenticationException.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.void
setCommandModel(CommandModel commandModel)
Set the CommandModel used by this command.void
setConnectTimeout(int connectTimeout)
Set the connect timeout for the URLConnection.void
setFileOutputDirectory(File dir)
Set the directory in which any returned files will be stored.void
setInteractive(boolean state)
Set the interactive mode for the command.void
setOmitCache(boolean omitCache)
Omit localAdminCache
to process command metadata.void
setReadTimeout(int readTimeout)
Set the read timeout for the URLConnection.void
setResponseFormatType(String responseFormatType)
Set the response type used in requests to the server.void
setUserOut(OutputStream userOut)
If set, the raw response from the command is written to the specified stream.protected boolean
updateAuthentication()
Return true if we're successful in collecting new information (and thus the caller should try the request again).
-
-
-
Field Detail
-
COMMAND_MODEL_MATCH_HEADER
public static final String COMMAND_MODEL_MATCH_HEADER
- See Also:
- Constant Field Values
-
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 ParameterMap options
-
-
Constructor Detail
-
RemoteAdminCommand
public RemoteAdminCommand(String name, String host, int port) throws CommandException
- Throws:
CommandException
-
RemoteAdminCommand
public RemoteAdminCommand(String name, String host, int port, boolean secure, String user, char[] password, Logger logger) throws CommandException
- Throws:
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 CommandException
Construct a new remote command object. The command and arguments are supplied later using the execute method in the superclass.- Throws:
CommandException
-
-
Method Detail
-
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.- Parameters:
responseFormatType
- the user-agent to send. The default ishk2-agent
-
setUserOut
public void setUserOut(OutputStream userOut)
If set, the raw response from the command is written to the specified stream.- Parameters:
userOut
- theOutputStream
to write to
-
setCommandModel
public void setCommandModel(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.- Parameters:
readTimeout
- the timeout in millisedonds
-
getReadTimeout
public static int getReadTimeout()
-
setConnectTimeout
public void setConnectTimeout(int connectTimeout)
Set the connect timeout for the URLConnection.- Parameters:
connectTimeout
- the timeout in milliseconds
-
setInteractive
public void setInteractive(boolean state)
Set the interactive mode for the command. By default, the command is interactive.- Parameters:
state
- whether the command is interactive
-
setOmitCache
public void setOmitCache(boolean omitCache)
Omit localAdminCache
to process command metadata.- Parameters:
omitCache
- Iftrue
it will download the metadata from remote server.
Default value isfalse
-
getCommandModel
public CommandModel getCommandModel() throws 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:
CommandException
- if the server can't be contacted
-
isCommandModelFromCache
public boolean isCommandModelFromCache()
If command model was load from local cache.- Returns:
- true if it was from cache, false otherwise
-
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.- Parameters:
dir
-
-
headers
public List<Header> headers()
Return a modifiable list of headers to be added to the request.- Returns:
-
executeCommand
public String executeCommand(ParameterMap opts) throws CommandException
Run the command using the specified arguments. Return the output of the command.- Parameters:
opts
-- Returns:
- Throws:
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.- Returns:
- true if successful, false otherwise
-
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.- Parameters:
host
- Host to say we are retrying onport
- Port to say we are retrying on- Returns:
- true if the the connection should 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.- Returns:
- The URI. This will be in the form of
/__asadmin/name?
-
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 madeport
- the admin port on that hostshouldUseSecure
- 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()
-
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 CommandException
Fetch the command metadata from the remote server.- Throws:
CommandException
-
getCanonicalHost
protected String getCanonicalHost()
-
-