Class StandaloneCommandBuilder

  • All Implemented Interfaces:
    CommandBuilder

    public class StandaloneCommandBuilder
    extends Object
    implements CommandBuilder
    Builds a list of commands used to launch a standalone instance of WildFly.

    This builder is not thread safe and the same instance should not be used in multiple threads.

    Author:
    James R. Perkins
    • Field Detail

      • environment

        protected final org.wildfly.core.launcher.Environment environment
    • Method Detail

      • of

        public static StandaloneCommandBuilder of​(Path wildflyHome)
        Creates a command builder for a standalone instance of WildFly.
        Parameters:
        wildflyHome - the path to the WildFly home directory
        Returns:
        a new builder
      • of

        public static StandaloneCommandBuilder of​(String wildflyHome)
        Creates a command builder for a standalone instance of WildFly.
        Parameters:
        wildflyHome - the path to the WildFly home directory
        Returns:
        a new builder
      • addJavaOption

        public StandaloneCommandBuilder addJavaOption​(String jvmArg)
        Adds a JVM argument to the command ignoring null arguments.
        Parameters:
        jvmArg - the JVM argument to add
        Returns:
        the builder
      • addJavaOptions

        public StandaloneCommandBuilder addJavaOptions​(String... javaOpts)
        Adds the array of JVM arguments to the command.
        Parameters:
        javaOpts - the array of JVM arguments to add, null arguments are ignored
        Returns:
        the builder
      • addJavaOptions

        public StandaloneCommandBuilder addJavaOptions​(Iterable<String> javaOpts)
        Adds the collection of JVM arguments to the command.
        Parameters:
        javaOpts - the collection of JVM arguments to add, null arguments are ignored
        Returns:
        the builder
      • setJavaOptions

        public StandaloneCommandBuilder setJavaOptions​(Iterable<String> javaOpts)
        Sets the JVM arguments to use. This overrides any default JVM arguments that would normally be added and ignores null values in the collection.

        If the collection is null the JVM arguments will be cleared and no new arguments will be added.

        Parameters:
        javaOpts - the JVM arguments to use
        Returns:
        the builder
      • setJavaOptions

        public StandaloneCommandBuilder setJavaOptions​(String... javaOpts)
        Sets the JVM arguments to use. This overrides any default JVM arguments that would normally be added and ignores null values in the array.

        If the array is null the JVM arguments will be cleared and no new arguments will be added.

        Parameters:
        javaOpts - the JVM arguments to use
        Returns:
        the builder
      • getJavaOptions

        public List<String> getJavaOptions()
        Returns the JVM arguments.
        Returns:
        the JVM arguments
      • addModuleOption

        public StandaloneCommandBuilder addModuleOption​(String arg)
        Adds an option which will be passed to JBoss Modules.

        Note that -mp or --modulepath is not supported. Use addModuleDir(String) to add a module directory.

        Parameters:
        arg - the argument to add
        Returns:
        the builder
      • addModuleOptions

        public StandaloneCommandBuilder addModuleOptions​(String... args)
        Adds the options which will be passed to JBoss Modules.

        Note that -mp or --modulepath is not supported. Use addModuleDirs(String...) to add a module directory.

        Parameters:
        args - the argument to add
        Returns:
        the builder
      • addModuleOptions

        public StandaloneCommandBuilder addModuleOptions​(Iterable<String> args)
        Adds the options which will be passed to JBoss Modules.

        Note that -mp or --modulepath is not supported. Use addModuleDirs(Iterable) to add a module directory.

        Parameters:
        args - the argument to add
        Returns:
        the builder
      • setModuleOptions

        public StandaloneCommandBuilder setModuleOptions​(String... args)
        Clears the current module options and adds the options which will be passed to JBoss Modules.

        Note that -mp or --modulepath is not supported. Use addModuleDirs(String...) to add a module directory.

        Parameters:
        args - the argument to use
        Returns:
        the builder
      • setModuleOptions

        public StandaloneCommandBuilder setModuleOptions​(Iterable<String> args)
        Clears the current module options and adds the options which will be passed to JBoss Modules.

        Note that -mp or --modulepath is not supported. Use addModuleDirs(Iterable) to add a module directory.

        Parameters:
        args - the argument to use
        Returns:
        the builder
      • setDebug

        public StandaloneCommandBuilder setDebug()
        Sets the debug argument for the JVM with a default port of 8787.
        Returns:
        the builder
      • setDebug

        public StandaloneCommandBuilder setDebug​(int port)
        Sets the debug argument for the JVM.
        Parameters:
        port - the port to listen on
        Returns:
        the builder
      • setDebug

        public StandaloneCommandBuilder setDebug​(boolean suspend,
                                                 int port)
        Sets the debug JPDA remote socket debugging argument.
        Parameters:
        suspend - true to suspend otherwise false
        port - the port to listen on
        Returns:
        the builder
      • setBaseDirectory

        public StandaloneCommandBuilder setBaseDirectory​(String baseDir)
        Sets the base directory to use.

        The default is $JBOSS_HOME/standalone.

        Parameters:
        baseDir - the base directory or null to resolve the base directory
        Returns:
        the builder
      • setBaseDirectory

        public StandaloneCommandBuilder setBaseDirectory​(Path baseDir)
        Sets the base directory to use.

        The default is $JBOSS_HOME/standalone.

        Parameters:
        baseDir - the base directory or null to resolve the base directory
        Returns:
        the builder
      • setJavaHome

        public StandaloneCommandBuilder setJavaHome​(String javaHome)
        Sets the Java home where the Java executable can be found.
        Parameters:
        javaHome - the Java home or null to use te system property java.home
        Returns:
        the builder
      • setJavaHome

        public StandaloneCommandBuilder setJavaHome​(Path javaHome)
        Sets the Java home where the Java executable can be found.
        Parameters:
        javaHome - the Java home or null to use te system property java.home
        Returns:
        the builder
      • setModulesLockless

        public StandaloneCommandBuilder setModulesLockless​(boolean b)
        Set to true to use JBoss Modules lockless mode.
        Parameters:
        b - true to use lockless mode
        Returns:
        the builder
      • setModulesMetrics

        public StandaloneCommandBuilder setModulesMetrics​(boolean b)
        Set to true to gather metrics for JBoss Modules.
        Parameters:
        b - true to gather metrics for JBoss Modules.
        Returns:
        this builder
      • setServerConfiguration

        public StandaloneCommandBuilder setServerConfiguration​(String configFile)
        Sets the configuration file for the server. The file must be in the configuration directory. A value of null will remove the configuration file.

        This will override any previous value set via addServerArgument(String).

        Parameters:
        configFile - the configuration file name or null to remove the configuration file
        Returns:
        the builder
      • getServerConfiguration

        public String getServerConfiguration()
        Returns the configuration file set or null if one was not set.
        Returns:
        the configuration file set or null if not set
      • setServerReadOnlyConfiguration

        public StandaloneCommandBuilder setServerReadOnlyConfiguration​(String configFile)
        Sets the configuration file for the server. The file must be in the configuration directory. A value of null will remove the configuration file.

        This will override any previous value set via addServerArgument(String).

        Parameters:
        configFile - the configuration file name or null to remove the configuration file
        Returns:
        the builder
      • getReadOnlyServerConfiguration

        public String getReadOnlyServerConfiguration()
        Returns the configuration file set or null if one was not set.
        Returns:
        the configuration file set or null if not set
      • addSecurityProperty

        public StandaloneCommandBuilder addSecurityProperty​(String key)
        Adds a security property to be passed to the server with a null value.
        Parameters:
        key - the property key
        Returns:
        the builder
      • addSecurityProperty

        public StandaloneCommandBuilder addSecurityProperty​(String key,
                                                            String value)
        Adds a security property to be passed to the server.
        Parameters:
        key - the property key
        value - the property value
        Returns:
        the builder
      • addSecurityProperties

        public StandaloneCommandBuilder addSecurityProperties​(Map<String,​String> properties)
        Adds all the security properties to be passed to the server.
        Parameters:
        properties - a map of the properties to add, null values are allowed in the map
        Returns:
        the builder
      • buildArguments

        public List<String> buildArguments()
        Description copied from interface: CommandBuilder
        A list of command arguments required to launch WildFly instance.

        These are the arguments the follow a java executable command.

        Specified by:
        buildArguments in interface CommandBuilder
        Returns:
        the list of arguments required to launch WildFly
      • build

        public List<String> build()
        Description copied from interface: CommandBuilder
        A list of commands, including a java executable, required to launch WildFly instance.
        Specified by:
        build in interface CommandBuilder
        Returns:
        the list of arguments required to launch WildFly
      • getJavaHome

        public Path getJavaHome()
        Returns the Java home directory where the java executable command can be found.

        If the directory was not set the system property value, java.home, should be used.

        Returns:
        the path to the Java home directory
      • getBaseDirectory

        public Path getBaseDirectory()
        Returns the base directory for the server.

        Example: For standalone the base directory would be $JBOSS_HOME/standalone.

        Returns:
        the base directory
      • setUseSecurityManager

        public T setUseSecurityManager​(boolean useSecMgr)
        Sets whether or not the security manager option, -secmgr, should be used.
        Parameters:
        useSecMgr - true to use the a security manager, otherwise false
        Returns:
        the builder
      • useSecurityManager

        public boolean useSecurityManager()
        Indicates whether or no a security manager should be used for the server launched.
        Returns:
        true if a security manager should be used, otherwise false
      • addModuleDir

        public T addModuleDir​(String moduleDir)
        Adds a directory to the collection of module paths.
        Parameters:
        moduleDir - the module directory to add
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if the path is null
      • addModuleDirs

        public T addModuleDirs​(String... moduleDirs)
        Adds all the module directories to the collection of module paths.
        Parameters:
        moduleDirs - an array of module paths to add
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if any of the module paths are invalid or null
      • addModuleDirs

        public T addModuleDirs​(Iterable<String> moduleDirs)
        Adds all the module directories to the collection of module paths.
        Parameters:
        moduleDirs - a collection of module paths to add
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if any of the module paths are invalid or null
      • setModuleDirs

        public T setModuleDirs​(Iterable<String> moduleDirs)
        Replaces any previously set module directories with the collection of module directories.

        The default module directory will NOT be used if this method is invoked.

        Parameters:
        moduleDirs - the collection of module directories to use
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if any of the module paths are invalid or null
      • setModuleDirs

        public T setModuleDirs​(String... moduleDirs)
        Replaces any previously set module directories with the array of module directories.

        The default module directory will NOT be used if this method is invoked.

        Parameters:
        moduleDirs - the array of module directories to use
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if any of the module paths are invalid or null
      • getModulePaths

        public String getModulePaths()
        Returns the modules paths used on the command line.
        Returns:
        the paths separated by the path separator
      • getLogDirectory

        public Path getLogDirectory()
        Returns the log directory for the server.
        Returns:
        the log directory
      • setLogDirectory

        public T setLogDirectory​(String path)
        Sets the log directory to be used for log files.

        If set to null, the default, the log directory will be resolved.

        Parameters:
        path - the path to the log directory or null to have the log directory resolved
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if the directory is not a valid directory
      • setLogDirectory

        public T setLogDirectory​(Path path)
        Sets the log directory to be used for log files.

        If set to null, the default, the log directory will be resolved.

        Parameters:
        path - the path to the log directory or null to have the log directory resolved
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if the directory is not a valid directory
      • getConfigurationDirectory

        public Path getConfigurationDirectory()
        Returns the configuration directory for the server.
        Returns:
        the configuration directory
      • setConfigurationDirectory

        public T setConfigurationDirectory​(String path)
        Sets the configuration directory to be used for configuration files.

        If set to null, the default, the configuration directory will be resolved.

        Parameters:
        path - the path to the configuration directory or null to have the configuration directory resolved
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if the directory is not a valid directory
      • setConfigurationDirectory

        public T setConfigurationDirectory​(Path path)
        Sets the configuration directory to be used for configuration files.

        If set to null, the default, the configuration directory will be resolved.

        Parameters:
        path - the path to the configuration directory or null to have the configuration directory resolved
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if the directory is not a valid directory
      • addServerArgument

        public T addServerArgument​(String arg)
        Adds an argument to be passed to the server ignore the argument if null.
        Parameters:
        arg - the argument to pass
        Returns:
        the builder
      • addServerArguments

        public T addServerArguments​(String... args)
        Adds the arguments to the collection of arguments that will be passed to the server ignoring any null arguments.
        Parameters:
        args - the arguments to add
        Returns:
        the builder
      • addServerArguments

        public T addServerArguments​(Iterable<String> args)
        Adds the arguments to the collection of arguments that will be passed to the server ignoring any null arguments.
        Parameters:
        args - the arguments to add
        Returns:
        the builder
      • setAdminOnly

        public T setAdminOnly()
        Sets the server argument --admin-only.
        Returns:
        the builder
      • setStartSuspended

        public T setStartSuspended()
        Sets the server argument --start-mode=suspend.
        Returns:
        the builder
      • setBindAddressHint

        public T setBindAddressHint​(String address)
        Sets the system property jboss.bind.address to the address given.

        This will override any previous value set via addServerArgument(String).

        Note: This option only works if the standard system property has not been removed from the interface. If the system property was removed the address provided has no effect.

        Parameters:
        address - the address to set the bind address to
        Returns:
        the builder
      • setBindAddressHint

        public T setBindAddressHint​(String interfaceName,
                                    String address)
        Sets the system property jboss.bind.address.$INTERFACE to the address given where $INTERFACE is the interfaceName parameter. For example in the default configuration passing management for the interfaceName parameter would result in the system property jboss.bind.address.management being set to the address provided.

        This will override any previous value set via addServerArgument(String).

        Note: This option only works if the standard system property has not been removed from the interface. If the system property was removed the address provided has no effect.

        Parameters:
        interfaceName - the name of the interface of the binding address
        address - the address to bind the management interface to
        Returns:
        the builder
      • setMulticastAddressHint

        public T setMulticastAddressHint​(String address)
        Sets the system property jboss.default.multicast.address to the address given.

        This will override any previous value set via addServerArgument(String).

        Note: This option only works if the standard system property has not been removed from the interface. If the system property was removed the address provided has no effect.

        Parameters:
        address - the address to set the multicast system property to
        Returns:
        the builder
      • addPropertiesFile

        public T addPropertiesFile​(String file)
        Adds a properties file to be passed to the server. Note that the file must exist.
        Parameters:
        file - the file to add
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if the file does not exist or is not a regular file
      • addPropertiesFile

        public T addPropertiesFile​(Path file)
        Adds a properties file to be passed to the server. Note that the file must exist.
        Parameters:
        file - the file to add
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if the file does not exist or is not a regular file
      • setPropertiesFile

        public T setPropertiesFile​(String file)
        Sets the properties file to use for the server or null to remove the file. Note that the file must exist.

        This will override any previous values set.

        Parameters:
        file - the properties file to use or null
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if the file does not exist or is not a regular file
      • setPropertiesFile

        public T setPropertiesFile​(Path file)
        Sets the properties file to use for the server or null to remove the file. Note that the file must exist.

        This will override any previous values set.

        Parameters:
        file - the properties file to use or null
        Returns:
        the builder
        Throws:
        IllegalArgumentException - if the file does not exist or is not a regular file
      • getWildFlyHome

        public Path getWildFlyHome()
        Returns the home directory used.
        Returns:
        the home directory
      • getLoggingPropertiesArgument

        protected String getLoggingPropertiesArgument​(String fileName)
        Returns the command line argument that specifies the logging configuration.
        Parameters:
        fileName - the name of the configuration file
        Returns:
        the command line argument
      • getBootLogArgument

        protected String getBootLogArgument​(String fileName)
        Returns the command line argument that specifies the path the log file that should be used.

        This is generally only used on the initial boot of the server in standalone. The server will rewrite the configuration file with hard-coded values.

        Parameters:
        fileName - the name of the file
        Returns:
        the command line argument
      • getModulesJarName

        public String getModulesJarName()
        Returns the normalized path to the jboss-modules.jar for launching the server.
        Returns:
        the path to jboss-modules.jar
      • normalizePath

        protected Path normalizePath​(String path)
        Resolves the path to the path relative to the WildFly home directory.
        Parameters:
        path - the name of the relative path
        Returns:
        the normalized path
      • normalizePath

        protected Path normalizePath​(Path parent,
                                     String path)
        Resolves the path relative to the parent and normalizes it.
        Parameters:
        parent - the parent path
        path - the path
        Returns:
        the normalized path
      • getServerArguments

        public List<String> getServerArguments()
        A collection of server command line arguments.
        Returns:
        the server arguments
      • setSingleServerArg

        protected void setSingleServerArg​(String key,
                                          String value)
      • addServerArg

        protected void addServerArg​(String key,
                                    String value)
      • getServerArg

        protected String getServerArg​(String key)
        Returns the first argument from the server arguments.
        Parameters:
        key - the key to the argument
        Returns:
        the first argument or null
      • validateAndNormalizeDir

        protected static Path validateAndNormalizeDir​(String path,
                                                      boolean allowNull)
      • validateAndNormalizeDir

        protected static Path validateAndNormalizeDir​(Path path,
                                                      boolean allowNull)
      • addSystemPropertyArg

        protected static void addSystemPropertyArg​(List<String> cmd,
                                                   String key,
                                                   Object value)
      • isJavaSecurityManagerConfigured

        protected static boolean isJavaSecurityManagerConfigured​(org.wildfly.core.launcher.Arguments.Argument argument)