diff --git a/.gitignore b/.gitignore index 015033e264..e8f4b13f1d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ dependency-reduced-pom.xml # compilation from native */*/bin *~ +.DS_Store target tests/integration-tests/data/ diff --git a/activemq-bootstrap/src/main/java/org/apache/activemq/cli/ActiveMQ.java b/activemq-bootstrap/src/main/java/org/apache/activemq/cli/ActiveMQ.java index 11a4028f76..321ea98428 100644 --- a/activemq-bootstrap/src/main/java/org/apache/activemq/cli/ActiveMQ.java +++ b/activemq-bootstrap/src/main/java/org/apache/activemq/cli/ActiveMQ.java @@ -20,6 +20,7 @@ import io.airlift.command.Cli; import io.airlift.command.ParseArgumentsUnexpectedException; import org.apache.activemq.cli.commands.Action; import org.apache.activemq.cli.commands.ActionContext; +import org.apache.activemq.cli.commands.Create; import org.apache.activemq.cli.commands.HelpAction; import org.apache.activemq.cli.commands.Run; import org.apache.activemq.cli.commands.Stop; @@ -32,15 +33,27 @@ public class ActiveMQ public static void main(String[] args) throws Exception { + String instance = System.getProperty("activemq.instance"); Cli.CliBuilder builder = Cli.builder("activemq") - .withDefaultCommand(HelpAction.class) - .withCommand(Run.class) - .withCommand(Stop.class) - .withCommand(HelpAction.class) - .withDescription("ActiveMQ Command Line"); + .withDescription("ActiveMQ Command Line") + .withCommand(HelpAction.class) + .withCommand(Create.class) + .withDefaultCommand(HelpAction.class); + + if (instance != null) + { + builder = builder + .withCommand(Run.class) + .withCommand(Stop.class); + } + else + { + builder = builder + .withCommand(Create.class); + } + Cli parser = builder.build(); - try { parser.parse(args).execute(ActionContext.system()); @@ -55,7 +68,7 @@ public class ActiveMQ { System.err.println(configException.getMessage()); System.out.println(); - System.out.println("Configuration should be specified as 'scheme:location'. Default configuration is 'xml:${ACTIVEMQ_HOME}/config/non-clustered/bootstrap.xml'"); + System.out.println("Configuration should be specified as 'scheme:location'. Default configuration is 'xml:${ACTIVEMQ_INSTANCE}/etc/bootstrap.xml'"); } } diff --git a/activemq-bootstrap/src/main/java/org/apache/activemq/cli/commands/Create.java b/activemq-bootstrap/src/main/java/org/apache/activemq/cli/commands/Create.java new file mode 100644 index 0000000000..cc9b19ce48 --- /dev/null +++ b/activemq-bootstrap/src/main/java/org/apache/activemq/cli/commands/Create.java @@ -0,0 +1,362 @@ +package org.apache.activemq.cli.commands; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.attribute.PosixFilePermission; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import io.airlift.command.Arguments; +import io.airlift.command.Command; +import io.airlift.command.Option; + +import static java.nio.file.attribute.PosixFilePermission.GROUP_EXECUTE; +import static java.nio.file.attribute.PosixFilePermission.GROUP_READ; +import static java.nio.file.attribute.PosixFilePermission.GROUP_WRITE; +import static java.nio.file.attribute.PosixFilePermission.OTHERS_EXECUTE; +import static java.nio.file.attribute.PosixFilePermission.OTHERS_READ; +import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE; +import static java.nio.file.attribute.PosixFilePermission.OWNER_READ; +import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE; + +/** + * CLI action that creates a broker instance directory. + */ +@Command(name = "create", description = "creates a new broker instance") +public class Create implements Action +{ + @Arguments(description = "The instance directory to hold the broker's configuration and data", required = true) + File directory; + + @Option(name = "--host", description = "The host name of the broker") + String host; + + @Option(name = "--force", description = "Overwrite configuration at destination directory") + boolean force; + + @Option(name = "--home", description = "Directory where ActiveMQ is installed") + File home; + + @Option(name = "--with-ssl", description = "Generate an SSL enabled configuration") + boolean with_ssl = true; + + @Option(name = "--clustered", description = "Enable clustering") + boolean clustered = false; + + @Option(name = "--replicated", description = "Enable broker replication") + boolean replicated = false; + + @Option(name = "--shared-store", description = "Enable broker shared store") + boolean sharedStore = false; + + @Option(name = "--encoding", description = "The encoding that text files should use") + String encoding = "UTF-8"; + + ActionContext context; + boolean IS_WINDOWS; + boolean IS_CYGWIN; + + @Override + public Object execute(ActionContext context) throws Exception + { + try + { + return run(context); + } + catch (Throwable e) + { + e.printStackTrace(context.err); + return e; + } + } + + public Object run(ActionContext context) throws Exception + { + this.context = context; + IS_WINDOWS = System.getProperty("os.name").toLowerCase().trim().startsWith("win"); + IS_CYGWIN = IS_WINDOWS && System.getenv("OSTYPE") == "cygwin"; + + if (clustered & sharedStore) + { + + } + + context.out.println(String.format("Creating ActiveMQ instance at: %s", directory.getCanonicalPath())); + if (host == null) + { + host = directory.getName(); + } + + new File(directory, "bin").mkdirs(); + new File(directory, "etc").mkdirs(); + new File(directory, "log").mkdirs(); + new File(directory, "tmp").mkdirs(); + new File(directory, "data").mkdirs(); + + write("bin/activemq", null, true); + makeExec("bin/activemq"); + + write("bin/activemq.cmd", null, false); + write("bin/activemq-service", null, true); + makeExec("bin/activemq-service"); + + write("bin/run.bat", null, false); + write("bin/run.sh", null, true); + makeExec("bin/run.sh"); + + write("bin/stop.bat", null, false); + write("bin/stop.sh", null, true); + makeExec("bin/stop.sh"); + + write("etc/logging.properties", null, false); + write("etc/bootstrap.xml", null, false); + + HashMap filters = new HashMap(); + + String replicatedSettings = ""; + if (replicated) + { + clustered = true; + replicatedSettings = readTextFile("etc/replicated-settings.txt"); + } + filters.put("${replicated.settings}", replicatedSettings); + + String sharedStoreSettings = ""; + if (sharedStore) + { + clustered = true; + sharedStoreSettings = readTextFile("etc/shared-store-settings.txt"); + } + filters.put("${hared-store.settings}", sharedStoreSettings); + + String clusterSettings = ""; + if (clustered) + { + clusterSettings = readTextFile("etc/cluster-settings.txt"); + } + filters.put("${cluster.settings}", clusterSettings); + + + filters.put("${user}", System.getProperty("user.name", "")); + filters.put("${host}", host); + if (home != null) + { + filters.put("${home}", path(home, false)); + } + filters.put("${activemq.home}", path(System.getProperty("activemq.home"), false)); + filters.put("${activemq.instance}", path(directory, false)); + filters.put("${java.home}", path(System.getProperty("java.home"), false)); + + write("etc/activemq.profile", filters, true); + makeExec("etc/activemq.profile"); + + write("etc/activemq.profile.cmd", filters, false); + write("etc/activemq-configuration.xml", filters, false); + write("etc/activemq-roles.properties", null, false); + write("etc/activemq-users.properties", null, false); + + + context.out.println(""); + context.out.println("You can now start the broker by executing: "); + context.out.println(""); + context.out.println(String.format(" \"%s\" run", path(new File(directory, "bin/activemq"), true))); + + File service = new File(directory, "bin/activemq-service"); + context.out.println(""); + + if (!IS_WINDOWS || IS_CYGWIN) + { + + // Does it look like we are on a System V init system? + if (new File("/etc/init.d/").isDirectory()) + { + context.out.println("Or you can setup the broker as system service and run it in the background:"); + context.out.println(""); + context.out.println(" sudo ln -s \"%s\" /etc/init.d/".format(service.getCanonicalPath())); + context.out.println(" /etc/init.d/activemq-service start"); + context.out.println(""); + + } + else + { + + context.out.println("Or you can run the broker in the background using:"); + context.out.println(""); + context.out.println(String.format(" \"%s\" start", path(service, true))); + context.out.println(""); + } + + } +// if ( IS_WINDOWS ) { +// +// context.out.println("Or you can setup the broker as Windows service and run it in the background:"); +// context.out.println(""); +// context.out.println(String.format(" \"%s\" install", path(service,true))); +// context.out.println(String.format(" \"%s\" start", path(service, true))); +// context.out.println(""); +// +// } + + return null; + } + + private void makeExec(String path) throws IOException + { + File file = new File(directory, path); + Files.setPosixFilePermissions(file.toPath(), new HashSet(Arrays.asList( + OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, + GROUP_READ, GROUP_WRITE, GROUP_EXECUTE, + OTHERS_READ, OTHERS_EXECUTE + ))); + } + + String path(String value, boolean unixPaths) throws IOException + { + return path(new File(value), unixPaths); + } + + private String path(File value, boolean unixPaths) throws IOException + { + if (unixPaths && IS_CYGWIN) + { +// import scala.sys.process._ +// Seq("cygpath", value.getCanonicalPath).!!.trim + return value.getCanonicalPath(); + } + else + { + return value.getCanonicalPath(); + } + } + + private void write(String source, HashMap filters, boolean unixTarget) throws IOException + { + write(source, new File(directory, source), filters, unixTarget); + } + + private void write(String source, File target, HashMap filters, boolean unixTarget) throws IOException + { + if (target.exists() && !force) + { + throw new RuntimeException(String.format("The file '%s' already exists. Use --force to overwrite.", target)); + } + + String content = readTextFile(source); + + if (filters != null) + { + for (Map.Entry entry : filters.entrySet()) + { + content = replace(content, entry.getKey(), entry.getValue()); + } + } + + // and then writing out in the new target encoding.. Let's also replace \n with the values + // that is correct for the current platform. + String separator = unixTarget && IS_CYGWIN ? "\n" : System.getProperty("line.separator"); + content = content.replaceAll("\\r?\\n", Matcher.quoteReplacement(separator)); + ByteArrayInputStream in = new ByteArrayInputStream(content.getBytes(encoding)); + + try (FileOutputStream fout = new FileOutputStream(target)) + { + copy(in, fout); + } + } + + private String readTextFile(String source) throws IOException + { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + try (InputStream in = this.getClass().getResourceAsStream(source)) + { + copy(in, out); + } + return new String(out.toByteArray(), "UTF-8"); + } + + private void write(String source, File target) throws IOException + { + if (target.exists() && !force) + { + throw new RuntimeException(String.format("The file '%s' already exists. Use --force to overwrite.", target)); + } + try (FileOutputStream fout = new FileOutputStream(target)) + { + try (InputStream in = this.getClass().getResourceAsStream(source)) + { + copy(in, fout); + } + } + } + + private boolean canLoad(String name) + { + try + { + this.getClass().getClassLoader().loadClass(name); + return true; + } + catch (Throwable e) + { + return false; + } + } + + private String replace(String content, String key, String value) + { + return content.replaceAll(Pattern.quote(key), Matcher.quoteReplacement(value)); + } + + private int system(File wd, String... command) throws IOException, InterruptedException + { + Process process = Runtime.getRuntime().exec(command, null, wd); + process.getOutputStream().close(); + drain(command[0], process.getInputStream(), context.out); + drain(command[0], process.getErrorStream(), context.err); + process.waitFor(); + return process.exitValue(); + } + + private void drain(String threadName, final InputStream is, final OutputStream os) + { + new Thread(threadName) + { + { + setDaemon(true); + } + + @Override + public void run() + { + try + { + copy(is, os); + } + catch (Throwable e) + { + } + } + }.start(); + } + + private void copy(InputStream is, OutputStream os) throws IOException + { + byte[] buffer = new byte[1024 * 4]; + int c = is.read(buffer); + while (c >= 0) + { + os.write(buffer, 0, c); + c = is.read(buffer); + } + } + +} diff --git a/activemq-bootstrap/src/main/java/org/apache/activemq/cli/commands/Run.java b/activemq-bootstrap/src/main/java/org/apache/activemq/cli/commands/Run.java index e48a5a5928..3c75a8fdc3 100644 --- a/activemq-bootstrap/src/main/java/org/apache/activemq/cli/commands/Run.java +++ b/activemq-bootstrap/src/main/java/org/apache/activemq/cli/commands/Run.java @@ -40,7 +40,7 @@ import java.util.TimerTask; public class Run implements Action { - @Arguments(description = "Broker Configuration URI, default 'xml:${ACTIVEMQ_HOME}/config/non-clustered/bootstrap.xml'") + @Arguments(description = "Broker Configuration URI, default 'xml:${ACTIVEMQ_INSTANCE}/etc/bootstrap.xml'") String configuration; private ArrayList components = new ArrayList<>(); @@ -55,12 +55,12 @@ public class Run implements Action /* We use File URI for locating files. The ACTIVEMQ_HOME variable is used to determine file paths. For Windows the ACTIVEMQ_HOME variable will include back slashes (An invalid file URI character path separator). For this reason we overwrite the ACTIVEMQ_HOME variable with backslashes replaced with forward slashes. */ - String activemqHome = System.getProperty("activemq.home").replace("\\", "/"); - System.setProperty("activemq.home", activemqHome); + String activemqInstance = System.getProperty("activemq.instance").replace("\\", "/"); + System.setProperty("activemq.instance", activemqInstance); if (configuration == null) { - configuration = "xml:" + activemqHome + "/config/non-clustered/bootstrap.xml"; + configuration = "xml:" + activemqInstance + "/etc/bootstrap.xml"; } // To support Windows paths as explained above. @@ -89,7 +89,7 @@ public class Run implements Action { Class clazz = this.getClass().getClassLoader().loadClass(componentDTO.componentClassName); ExternalComponent component = (ExternalComponent)clazz.newInstance(); - component.configure(componentDTO, activemqHome); + component.configure(componentDTO, activemqInstance); component.start(); components.add(component); } diff --git a/activemq-bootstrap/src/main/java/org/apache/activemq/cli/commands/Stop.java b/activemq-bootstrap/src/main/java/org/apache/activemq/cli/commands/Stop.java index 26b2c34b89..225f4bf7c7 100644 --- a/activemq-bootstrap/src/main/java/org/apache/activemq/cli/commands/Stop.java +++ b/activemq-bootstrap/src/main/java/org/apache/activemq/cli/commands/Stop.java @@ -27,7 +27,7 @@ import java.net.URI; @Command(name = "stop", description = "stops the broker instance") public class Stop implements Action { - @Arguments(description = "Broker Configuration URI, default 'xml:${ACTIVEMQ_HOME}/config/non-clustered/bootstrap.xml'") + @Arguments(description = "Broker Configuration URI, default 'xml:${ACTIVEMQ_INSTANCE}/etc/bootstrap.xml'") String configuration; @Override @@ -36,12 +36,12 @@ public class Stop implements Action /* We use File URI for locating files. The ACTIVEMQ_HOME variable is used to determine file paths. For Windows the ACTIVEMQ_HOME variable will include back slashes (An invalid file URI character path separator). For this reason we overwrite the ACTIVEMQ_HOME variable with backslashes replaced with forward slashes. */ - String activemqHome = System.getProperty("activemq.home").replace("\\", "/"); - System.setProperty("activemq.home", activemqHome); + String activemqHome = System.getProperty("activemq.instance").replace("\\", "/"); + System.setProperty("activemq.instance", activemqHome); if (configuration == null) { - configuration = "xml:" + activemqHome + "/config/non-clustered/bootstrap.xml"; + configuration = "xml:" + activemqHome + "/etc/bootstrap.xml"; } // To support Windows paths as explained above. diff --git a/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/activemq b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/activemq new file mode 100755 index 0000000000..ba87e094fb --- /dev/null +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/activemq @@ -0,0 +1,125 @@ +#!/bin/sh +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +if [ -z "$ACTIVEMQ_INSTANCE" ] ; then + + ## resolve links - $0 may be a link to ActiveMQ's home + PRG="$0" + progname=`basename "$0"` + saveddir=`pwd` + + # need this for relative symlinks + dirname_prg=`dirname "$PRG"` + cd "$dirname_prg" + + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '.*/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi + done + + ACTIVEMQ_INSTANCE=`dirname "$PRG"` + cd "$saveddir" + + # make it fully qualified + ACTIVEMQ_INSTANCE=`cd "$ACTIVEMQ_INSTANCE/.." && pwd` +fi + +# Set Defaults Properties +ACTIVEMQ_LOGGING_CONF="file:$ACTIVEMQ_INSTANCE/etc/logging.properties" +ACTIVEMQ_DATA_DIR=$ACTIVEMQ_INSTANCE/data +ACTIVEMQ_LOG_MANAGER=org.jboss.logmanager.LogManager +JAVA_ARGS="-XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms512M -Xmx1024M" +CLASSPATH="" + +# Load Profile Data +. "$ACTIVEMQ_INSTANCE/etc/activemq.profile" + +# Optionally load jars installed in the instance directory. +if [ -d $ACTIVEMQ_INSTANCE/lib ] ; then + for i in `ls $ACTIVEMQ_INSTANCE/lib/*.jar`; do + CLASSPATH=$CLASSPATH:$i + done +fi + +for i in `ls $ACTIVEMQ_HOME/lib/*.jar`; do + CLASSPATH=$CLASSPATH:$i +done + +# OS specific support. +cygwin=false; +darwin=false; +case "`uname`" in + CYGWIN*) cygwin=true + OSTYPE=cygwin + export OSTYPE + ;; + Darwin*) darwin=true + if [ -z "$JAVA_HOME" ] ; then + JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home + fi + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$ACTIVEMQ_INSTANCE" ] && + ACTIVEMQ_INSTANCE=`cygpath --unix "$ACTIVEMQ_INSTANCE"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD=`which java 2> /dev/null ` + if [ -z "$JAVACMD" ] ; then + JAVACMD=java + fi + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." + echo " We cannot execute $JAVACMD" + exit 1 +fi + +JAVA_ARGS="$JAVA_ARGS $ACTIVEMQ_CLUSTER_PROPS + -Dactivemq.home="$ACTIVEMQ_HOME" + -Dactivemq.instance="$ACTIVEMQ_INSTANCE" + -Djava.library.path="$ACTIVEMQ_HOME/bin/lib/linux-i686:$ACTIVEMQ_INSTANCE/bin/lib/linux-x86_64" + -Djava.io.tmpdir="$ACTIVEMQ_INSTANCE/tmp" + -Ddata.dir="$ACTIVEMQ_DATA_DIR" + -Djava.util.logging.manager="$ACTIVEMQ_LOG_MANAGER" + -Dlogging.configuration="$ACTIVEMQ_LOGGING_CONF" + $DEBUG_ARGS" + +exec "$JAVACMD" $JAVA_ARGS -classpath $CLASSPATH org.apache.activemq.cli.ActiveMQ $@ diff --git a/distribution/activemq/src/main/resources/bin/activemq-service b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/activemq-service similarity index 86% rename from distribution/activemq/src/main/resources/bin/activemq-service rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/activemq-service index 026944b917..84235c95c0 100755 --- a/distribution/activemq/src/main/resources/bin/activemq-service +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/activemq-service @@ -19,9 +19,9 @@ service=`basename "$0"` # -# Discover the ACTIVEMQ_BASE from the location of this script. +# Discover the ACTIVEMQ_INSTANCE from the location of this script. # -if [ -z "$ACTIVEMQ_BASE" ] ; then +if [ -z "$ACTIVEMQ_INSTANCE" ] ; then ## resolve links - $0 may be a link to ActiveMQ's home PRG="$0" @@ -41,19 +41,19 @@ if [ -z "$ACTIVEMQ_BASE" ] ; then fi done - ACTIVEMQ_BASE=`dirname "$PRG"` + ACTIVEMQ_INSTANCE=`dirname "$PRG"` cd "$saveddir" # make it fully qualified - ACTIVEMQ_BASE=`cd "$ACTIVEMQ_BASE/.." && pwd` - export ACTIVEMQ_BASE + ACTIVEMQ_INSTANCE=`cd "$ACTIVEMQ_INSTANCE/.." && pwd` + export ACTIVEMQ_INSTANCE fi -PID_FILE="${ACTIVEMQ_BASE}/data/activemq.pid" +PID_FILE="${ACTIVEMQ_INSTANCE}/data/activemq.pid" -if [ ! -d "${ACTIVEMQ_BASE}/data/" ]; then - mkdir "${ACTIVEMQ_BASE}/data/" +if [ ! -d "${ACTIVEMQ_INSTANCE}/data/" ]; then + mkdir "${ACTIVEMQ_INSTANCE}/data/" fi status() { @@ -95,7 +95,7 @@ start() { return 1 fi - nohup ${ACTIVEMQ_BASE}/bin/activemq run > /dev/null 2> /dev/null & + nohup ${ACTIVEMQ_INSTANCE}/bin/activemq run > /dev/null 2> /dev/null & echo $! > "${PID_FILE}" diff --git a/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/activemq.cmd b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/activemq.cmd new file mode 100755 index 0000000000..d88ba0c802 --- /dev/null +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/activemq.cmd @@ -0,0 +1,72 @@ +@echo off +rem Licensed to the Apache Software Foundation (ASF) under one +rem or more contributor license agreements. See the NOTICE file +rem distributed with this work for additional information +rem regarding copyright ownership. The ASF licenses this file +rem to you under the Apache License, Version 2.0 (the +rem "License"); you may not use this file except in compliance +rem with the License. You may obtain a copy of the License at +rem +rem http://www.apache.org/licenses/LICENSE-2.0 +rem +rem Unless required by applicable law or agreed to in writing, +rem software distributed under the License is distributed on an +rem "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +rem KIND, either express or implied. See the License for the +rem specific language governing permissions and limitations +rem under the License. + +setlocal + +if NOT "%ACTIVEMQ_INSTANCE%"=="" goto CHECK_ACTIVEMQ_INSTANCE +PUSHD . +CD %~dp0.. +set ACTIVEMQ_INSTANCE=%CD% +POPD + +:CHECK_ACTIVEMQ_INSTANCE +if exist "%ACTIVEMQ_INSTANCE%\bin\activemq.cmd" goto CHECK_JAVA + +:NO_HOME +echo ACTIVEMQ_INSTANCE environment variable is set incorrectly. Please set ACTIVEMQ_INSTANCE. +goto END + +:CHECK_JAVA +set _JAVACMD=%JAVACMD% + +if "%JAVA_HOME%" == "" goto NO_JAVA_HOME +if not exist "%JAVA_HOME%\bin\java.exe" goto NO_JAVA_HOME +if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe +goto RUN_JAVA + +:NO_JAVA_HOME +if "%_JAVACMD%" == "" set _JAVACMD=java.exe +echo. +echo Warning: JAVA_HOME environment variable is not set. +echo. + +:RUN_JAVA + +rem "Set Defaults." +set JAVA_ARGS=-Xmx1024M +set ACTIVEMQ_LOGGING_CONF="file:%ACTIVEMQ_INSTANCE%\config\logging.properties" +set ACTIVEMQ_DATA_DIR="%ACTIVEMQ_INSTANCE%\data" +set ACTIVEMQ_LOG_MANAGER=org.jboss.logmanager.LogManager + +rem "Load Profile Config" +call "%ACTIVEMQ_INSTANCE%\etc\activemq.profile.cmd" %* + +rem "Create full JVM Args" +set JVM_ARGS=%JAVA_ARGS% -classpath %ACTIVEMQ_INSTANCE%\lib\* -Dactivemq.home=%ACTIVEMQ_HOME% -Dactivemq.instance=%ACTIVEMQ_INSTANCE% -Djava.io.tmpdir=%ACTIVEMQ_INSTANCE%/tmp -Ddata.dir=%ACTIVEMQ_DATA_DIR% -Djava.util.logging.manager=%ACTIVEMQ_LOG_MANAGER% -Dlogging.configuration=%ACTIVEMQ_LOGGING_CONF% -Djava.library.path=%ACTIVEMQ_INSTANCE%\lib\ + +rem "Set Debug & Cluster props" +if not "%DEBUG_ARGS%"=="" set JVM_ARGS=%JVM_ARGS% %DEBUG_ARGS% +if not "%ACTIVEMQ_CLUSTER_PROPS%"=="" set JVM_ARGS=%JVM_ARGS% %ACTIVEMQ_CLUSTER_PROPS% + +"%_JAVACMD%" %JVM_ARGS% org.apache.activemq.cli.ActiveMQ %* + +:END +endlocal +GOTO :EOF + +:EOF diff --git a/distribution/activemq/src/main/resources/bin/run.bat b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/run.bat similarity index 100% rename from distribution/activemq/src/main/resources/bin/run.bat rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/run.bat diff --git a/distribution/activemq/src/main/resources/bin/run.sh b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/run.sh similarity index 96% rename from distribution/activemq/src/main/resources/bin/run.sh rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/run.sh index 1010524f5c..7235fd9cee 100755 --- a/distribution/activemq/src/main/resources/bin/run.sh +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/run.sh @@ -16,4 +16,4 @@ # specific language governing permissions and limitations # under the License. -./activemq run $@ +`dirname "$0"`/activemq run $@ diff --git a/distribution/activemq/src/main/resources/bin/stop.bat b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/stop.bat similarity index 100% rename from distribution/activemq/src/main/resources/bin/stop.bat rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/stop.bat diff --git a/distribution/activemq/src/main/resources/bin/stop.sh b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/stop.sh similarity index 96% rename from distribution/activemq/src/main/resources/bin/stop.sh rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/stop.sh index 4d56530a81..fd4ead0056 100755 --- a/distribution/activemq/src/main/resources/bin/stop.sh +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/bin/stop.sh @@ -16,4 +16,4 @@ # specific language governing permissions and limitations # under the License. -./activemq stop $@ +`dirname "$0"`/activemq stop $@ diff --git a/distribution/activemq/src/main/resources/config/non-clustered/activemq-configuration.xml b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq-configuration.xml similarity index 93% rename from distribution/activemq/src/main/resources/config/non-clustered/activemq-configuration.xml rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq-configuration.xml index 219c0b2752..9f9489a552 100644 --- a/distribution/activemq/src/main/resources/config/non-clustered/activemq-configuration.xml +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq-configuration.xml @@ -18,7 +18,9 @@ specific language governing permissions and limitations under the License. --> - + @@ -53,6 +55,8 @@ under the License. tcp://${activemq.remoting.hornetq.host:localhost}:${activemq.remoting.hornetq.port:5445}?protocols=CORE,STOMP + ${cluster.settings}${replicated.settings}${shared-store.settings} + diff --git a/distribution/activemq/src/main/resources/config/clustered/activemq-roles.properties b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq-roles.properties similarity index 100% rename from distribution/activemq/src/main/resources/config/clustered/activemq-roles.properties rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq-roles.properties diff --git a/distribution/activemq/src/main/resources/config/clustered/activemq-users.properties b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq-users.properties similarity index 100% rename from distribution/activemq/src/main/resources/config/clustered/activemq-users.properties rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq-users.properties diff --git a/distribution/activemq/src/main/resources/bin/activemq.conf b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq.profile similarity index 77% rename from distribution/activemq/src/main/resources/bin/activemq.conf rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq.profile index fbfa24322b..652ad115f1 100644 --- a/distribution/activemq/src/main/resources/bin/activemq.conf +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq.profile @@ -15,20 +15,13 @@ # specific language governing permissions and limitations # under the License. -# Path to logging configuration file -ACTIVEMQ_LOGGING_CONF="file:$ACTIVEMQ_HOME/config/logging.properties" - -# Path to data directory -ACTIVEMQ_DATA_DIR=$ACTIVEMQ_HOME/data - -# Log manager class -ACTIVEMQ_LOG_MANAGER=org.jboss.logmanager.LogManager +ACTIVEMQ_HOME='${activemq.home}' # Cluster Properties: Used to pass arguments to ActiveMQ which can be referenced in activemq-configuration.xml #ACTIVEMQ_CLUSTER_PROPS="-Dactivemq.remoting.default.port=61617 -Dactivemq.remoting.amqp.port=5673 -Dactivemq.remoting.stomp.port=61614 -Dactivemq.remoting.hornetq.port=5446" # Java Opts -JAVA_ARGS="-XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms512M -Xmx1024M" +#JAVA_ARGS="-XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms512M -Xmx1024M" # Debug args: Uncomment to enable debug #DEBUG_ARGS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" diff --git a/distribution/activemq/src/main/resources/bin/activemq.conf.bat b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq.profile.cmd similarity index 88% rename from distribution/activemq/src/main/resources/bin/activemq.conf.bat rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq.profile.cmd index c97ce3faad..37144e71aa 100644 --- a/distribution/activemq/src/main/resources/bin/activemq.conf.bat +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/activemq.profile.cmd @@ -15,11 +15,14 @@ rem KIND, either express or implied. See the License for the rem specific language governing permissions and limitations rem under the License. +set ACTIVEMQ_HOME='${activemq.home}' +set ACTIVEMQ_BASE='${activemq.base}' + rem Path to logging configuration file -set ACTIVEMQ_LOGGING_CONF=file:%ACTIVEMQ_HOME%\config\logging.properties +set ACTIVEMQ_LOGGING_CONF=file:%ACTIVEMQ_BASE%\etc\logging.properties rem Path to data directory -set ACTIVEMQ_DATA_DIR=%ACTIVEMQ_HOME%\data +set ACTIVEMQ_DATA_DIR=%ACTIVEMQ_BASE%\data rem Log manager class set ACTIVEMQ_LOG_MANAGER=org.jboss.logmanager.LogManager diff --git a/distribution/activemq/src/main/resources/config/clustered/bootstrap.xml b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/bootstrap.xml similarity index 74% rename from distribution/activemq/src/main/resources/config/clustered/bootstrap.xml rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/bootstrap.xml index fd5ed549e5..1025f05dd6 100644 --- a/distribution/activemq/src/main/resources/config/clustered/bootstrap.xml +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/bootstrap.xml @@ -18,13 +18,13 @@ - - file:${activemq.home}/config/non-clustered/activemq-users.properties - file:${activemq.home}/config/non-clustered/activemq-roles.properties - guest - + - + diff --git a/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/cluster-settings.txt b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/cluster-settings.txt new file mode 100644 index 0000000000..7d9229cbc1 --- /dev/null +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/cluster-settings.txt @@ -0,0 +1,25 @@ + + + + 231.7.7.7 + 9876 + 5000 + activemq + + + + + + 231.7.7.7 + 9876 + 10000 + + + + + +
jms
+ activemq + +
+
diff --git a/distribution/activemq/src/main/resources/config/logging.properties b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/logging.properties similarity index 97% rename from distribution/activemq/src/main/resources/config/logging.properties rename to activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/logging.properties index f566d3611b..066ac9c7a5 100644 --- a/distribution/activemq/src/main/resources/config/logging.properties +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/logging.properties @@ -42,7 +42,7 @@ handler.FILE=org.jboss.logmanager.handlers.FileHandler handler.FILE.level=DEBUG handler.FILE.properties=autoFlush,fileName handler.FILE.autoFlush=true -handler.FILE.fileName=${activemq.home}/logs/activemq.log +handler.FILE.fileName=${activemq.instance}/log/activemq.log handler.FILE.formatter=PATTERN # Formatter pattern configuration diff --git a/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/replicated-settings.txt b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/replicated-settings.txt new file mode 100644 index 0000000000..db9faa09af --- /dev/null +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/replicated-settings.txt @@ -0,0 +1,6 @@ + + + + + + diff --git a/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/shared-store-settings.txt b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/shared-store-settings.txt new file mode 100644 index 0000000000..5901938b90 --- /dev/null +++ b/activemq-bootstrap/src/main/resources/org/apache/activemq/cli/commands/etc/shared-store-settings.txt @@ -0,0 +1,6 @@ + + + + + + diff --git a/activemq-dto/src/main/java/org/apache/activemq/dto/BasicSecurityDTO.java b/activemq-dto/src/main/java/org/apache/activemq/dto/BasicSecurityDTO.java index 9b25d18cca..ee528ee5ab 100644 --- a/activemq-dto/src/main/java/org/apache/activemq/dto/BasicSecurityDTO.java +++ b/activemq-dto/src/main/java/org/apache/activemq/dto/BasicSecurityDTO.java @@ -18,25 +18,25 @@ package org.apache.activemq.dto; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "basic-security") @XmlAccessorType(XmlAccessType.FIELD) public class BasicSecurityDTO extends SecurityDTO { - @XmlElement(required = true) + @XmlAttribute(required = true) public String users; - @XmlElement(required = true) + @XmlAttribute(required = true) public String roles; - @XmlElement(name = "default-user") + @XmlAttribute(name = "default-user") public String defaultUser; - @XmlElement(name = "mask-password") + @XmlAttribute(name = "mask-password") public Boolean maskPassword = false; - @XmlElement + @XmlAttribute public String passwordCodec; } diff --git a/activemq-dto/src/main/java/org/apache/activemq/dto/XmlUtil.java b/activemq-dto/src/main/java/org/apache/activemq/dto/XmlUtil.java index 3a6b1f45c7..5f9db1fc61 100644 --- a/activemq-dto/src/main/java/org/apache/activemq/dto/XmlUtil.java +++ b/activemq-dto/src/main/java/org/apache/activemq/dto/XmlUtil.java @@ -50,6 +50,7 @@ public class XmlUtil this.props = props; } + @Override public String getAttributeValue(int index) { return filter(super.getAttributeValue(index)); diff --git a/distribution/activemq/src/main/resources/bin/activemq b/distribution/activemq/src/main/resources/bin/activemq index ac08980b2e..e15d094e5d 100755 --- a/distribution/activemq/src/main/resources/bin/activemq +++ b/distribution/activemq/src/main/resources/bin/activemq @@ -96,19 +96,7 @@ for i in `ls $ACTIVEMQ_HOME/lib/*.jar`; do done # Set Defaults Properties -ACTIVEMQ_LOGGING_CONF="file:$ACTIVEMQ_HOME/config/logging.properties" -ACTIVEMQ_DATA_DIR=$ACTIVEMQ_HOME/data -ACTIVEMQ_LOG_MANAGER=org.jboss.logmanager.LogManager JAVA_ARGS="-XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms512M -Xmx1024M" -# Load Runtime Config -if [ -z "$ACTIVEMQ_CONF" ] ; then - ACTIVEMQ_CONF=$ACTIVEMQ_HOME/bin/activemq.conf -else - ACTIVEMQ_CONF="$ACTIVEMQ_CONF" -fi -. $ACTIVEMQ_CONF - -JAVA_ARGS="$JAVA_ARGS $ACTIVEMQ_CLUSTER_PROPS -Dactivemq.home=$ACTIVEMQ_HOME -Djava.library.path=$ACTIVEMQ_HOME/bin/lib/linux-i686:$ACTIVEMQ_HOME/bin/lib/linux-x86_64 -Ddata.dir=$ACTIVEMQ_DATA_DIR -Djava.util.logging.manager=$ACTIVEMQ_LOG_MANAGER -Dlogging.configuration=$ACTIVEMQ_LOGGING_CONF $DEBUG_ARGS" - +JAVA_ARGS="$JAVA_ARGS -Dactivemq.home=$ACTIVEMQ_HOME" exec "$JAVACMD" $JAVA_ARGS -classpath $CLASSPATH org.apache.activemq.cli.ActiveMQ $@ diff --git a/distribution/activemq/src/main/resources/config/clustered/activemq-configuration.xml b/distribution/activemq/src/main/resources/config/clustered/activemq-configuration.xml deleted file mode 100644 index 82c25577ee..0000000000 --- a/distribution/activemq/src/main/resources/config/clustered/activemq-configuration.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - ${data.dir:../data}/paging - - ${data.dir:../data}/bindings - - ${data.dir:../data}/journal - - 10 - - ${data.dir:../data}/large-messages - - - - tcp://${activemq.remoting.default.host:localhost}:${activemq.remoting.default.port:61616} - - - - - tcp://${activemq.remoting.default.host:localhost}:${activemq.remoting.default.port:61616} - - - tcp://${activemq.remoting.amqp.host:localhost}:${activemq.remoting.amqp.port:5672}?protocols=AMQP - - - tcp://${activemq.remoting.stomp.host:localhost}:${activemq.remoting.stomp.port:61613}?protocols=STOMP - - - tcp://${activemq.remoting.hornetq.host:localhost}:${activemq.remoting.hornetq.port:5445}?protocols=CORE,STOMP - - - - - 231.7.7.7 - 9876 - 5000 - activemq - - - - - - 231.7.7.7 - 9876 - 10000 - - - - - -
jms
- activemq - -
-
- - - - - - - - - - - - - - jms.queue.DLQ - jms.queue.ExpiryQueue - 0 - 10485760 - 10 - BLOCK - - -
-
diff --git a/distribution/activemq/src/main/resources/config/examples/bootstrap.xml b/distribution/activemq/src/main/resources/config/examples/bootstrap.xml deleted file mode 100644 index a8762d189d..0000000000 --- a/distribution/activemq/src/main/resources/config/examples/bootstrap.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - file:${activemq.home}/examples/jms/queue/src/main/resources/activemq/server0/activemq-users.properties - file:${activemq.home}/examples/jms/queue/src/main/resources/activemq/server0/activemq-roles.properties - guest - - - - - - - - - diff --git a/distribution/activemq/src/main/resources/config/non-clustered/activemq-roles.properties b/distribution/activemq/src/main/resources/config/non-clustered/activemq-roles.properties deleted file mode 100644 index 4e2d44cec4..0000000000 --- a/distribution/activemq/src/main/resources/config/non-clustered/activemq-roles.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file diff --git a/distribution/activemq/src/main/resources/config/non-clustered/activemq-users.properties b/distribution/activemq/src/main/resources/config/non-clustered/activemq-users.properties deleted file mode 100644 index 4e2d44cec4..0000000000 --- a/distribution/activemq/src/main/resources/config/non-clustered/activemq-users.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file diff --git a/distribution/activemq/src/main/resources/config/non-clustered/bootstrap.xml b/distribution/activemq/src/main/resources/config/non-clustered/bootstrap.xml deleted file mode 100644 index 26bc04e3f0..0000000000 --- a/distribution/activemq/src/main/resources/config/non-clustered/bootstrap.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - file:${activemq.home}/config/non-clustered/activemq-users.properties - file:${activemq.home}/config/non-clustered/activemq-roles.properties - guest - - - - - - - - - - diff --git a/distribution/activemq/src/main/resources/config/replicated/activemq-configuration.xml b/distribution/activemq/src/main/resources/config/replicated/activemq-configuration.xml deleted file mode 100644 index a8d330ddc0..0000000000 --- a/distribution/activemq/src/main/resources/config/replicated/activemq-configuration.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - ${data.dir:../data}/paging - - ${data.dir:../data}/bindings - - ${data.dir:../data}/journal - - 10 - - ${data.dir:../data}/large-messages - - - - tcp://${activemq.remoting.default.host:localhost}:${activemq.remoting.default.port:61616} - - - - - tcp://${activemq.remoting.default.host:localhost}:${activemq.remoting.default.port:61616} - - - tcp://${activemq.remoting.amqp.host:localhost}:${activemq.remoting.amqp.port:5672}?protocols=AMQP - - - tcp://${activemq.remoting.stomp.host:localhost}:${activemq.remoting.stomp.port:61613}?protocols=STOMP - - - tcp://${activemq.remoting.hornetq.host:localhost}:${activemq.remoting.hornetq.port:5445}?protocols=CORE,STOMP - - - - - 231.7.7.7 - 9876 - 5000 - activemq - - - - - - 231.7.7.7 - 9876 - 10000 - - - - - -
jms
- activemq - -
-
- - - - - - - - - - - - - - - - - - - - jms.queue.DLQ - jms.queue.ExpiryQueue - 0 - 10485760 - 10 - BLOCK - - -
-
diff --git a/distribution/activemq/src/main/resources/config/replicated/activemq-roles.properties b/distribution/activemq/src/main/resources/config/replicated/activemq-roles.properties deleted file mode 100644 index 4e2d44cec4..0000000000 --- a/distribution/activemq/src/main/resources/config/replicated/activemq-roles.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file diff --git a/distribution/activemq/src/main/resources/config/replicated/activemq-users.properties b/distribution/activemq/src/main/resources/config/replicated/activemq-users.properties deleted file mode 100644 index 4e2d44cec4..0000000000 --- a/distribution/activemq/src/main/resources/config/replicated/activemq-users.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file diff --git a/distribution/activemq/src/main/resources/config/replicated/bootstrap.xml b/distribution/activemq/src/main/resources/config/replicated/bootstrap.xml deleted file mode 100644 index e296de0ec2..0000000000 --- a/distribution/activemq/src/main/resources/config/replicated/bootstrap.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - file:${activemq.home}/config/non-clustered/activemq-users.properties - file:${activemq.home}/config/non-clustered/activemq-roles.properties - guest - - - - - - - - - - diff --git a/distribution/activemq/src/main/resources/config/shared-store/activemq-configuration.xml b/distribution/activemq/src/main/resources/config/shared-store/activemq-configuration.xml deleted file mode 100644 index 00cafb00e0..0000000000 --- a/distribution/activemq/src/main/resources/config/shared-store/activemq-configuration.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - ${data.dir:../data}/paging - - ${data.dir:../data}/bindings - - ${data.dir:../data}/journal - - 10 - - ${data.dir:../data}/large-messages - - - - tcp://${activemq.remoting.default.host:localhost}:${activemq.remoting.default.port:61616} - - - - - tcp://${activemq.remoting.default.host:localhost}:${activemq.remoting.default.port:61616} - - - tcp://${activemq.remoting.amqp.host:localhost}:${activemq.remoting.amqp.port:5672}?protocols=AMQP - - - tcp://${activemq.remoting.stomp.host:localhost}:${activemq.remoting.stomp.port:61613}?protocols=STOMP - - - tcp://${activemq.remoting.hornetq.host:localhost}:${activemq.remoting.hornetq.port:5445}?protocols=CORE,STOMP - - - - - 231.7.7.7 - 9876 - 5000 - activemq - - - - - - 231.7.7.7 - 9876 - 10000 - - - - - -
jms
- activemq - -
-
- - - - - - - - - - - - - - - - - - - - jms.queue.DLQ - jms.queue.ExpiryQueue - 0 - 10485760 - 10 - BLOCK - - -
-
diff --git a/distribution/activemq/src/main/resources/config/shared-store/activemq-roles.properties b/distribution/activemq/src/main/resources/config/shared-store/activemq-roles.properties deleted file mode 100644 index 4e2d44cec4..0000000000 --- a/distribution/activemq/src/main/resources/config/shared-store/activemq-roles.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file diff --git a/distribution/activemq/src/main/resources/config/shared-store/activemq-users.properties b/distribution/activemq/src/main/resources/config/shared-store/activemq-users.properties deleted file mode 100644 index 4e2d44cec4..0000000000 --- a/distribution/activemq/src/main/resources/config/shared-store/activemq-users.properties +++ /dev/null @@ -1,17 +0,0 @@ -## --------------------------------------------------------------------------- -## Licensed to the Apache Software Foundation (ASF) under one or more -## contributor license agreements. See the NOTICE file distributed with -## this work for additional information regarding copyright ownership. -## The ASF licenses this file to You under the Apache License, Version 2.0 -## (the "License"); you may not use this file except in compliance with -## the License. You may obtain a copy of the License at -## -## http://www.apache.org/licenses/LICENSE-2.0 -## -## Unless required by applicable law or agreed to in writing, software -## distributed under the License is distributed on an "AS IS" BASIS, -## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -## See the License for the specific language governing permissions and -## limitations under the License. -## --------------------------------------------------------------------------- -guest=guest \ No newline at end of file diff --git a/distribution/activemq/src/main/resources/config/shared-store/bootstrap.xml b/distribution/activemq/src/main/resources/config/shared-store/bootstrap.xml deleted file mode 100644 index 0157e8a8e7..0000000000 --- a/distribution/activemq/src/main/resources/config/shared-store/bootstrap.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - file:${activemq.home}/config/non-clustered/activemq-users.properties - file:${activemq.home}/config/non-clustered/activemq-roles.properties - guest - - - - - - - - - - diff --git a/docs/quickstart-guide/en/installation.md b/docs/quickstart-guide/en/installation.md index 192f118e4a..7b3d8d5258 100644 --- a/docs/quickstart-guide/en/installation.md +++ b/docs/quickstart-guide/en/installation.md @@ -31,8 +31,8 @@ Using aptitude, (e.g. on Ubuntu or Debian system): apt-get install libaio -Stand-alone ActiveMQ Server -=========================== +Installing the Standalone Distribution +====================================== After downloading the distribution, unzip it into your chosen directory. At this point it should be possible to [run straight out of the @@ -41,11 +41,6 @@ structure: |___ bin | - |___ config - | |___ jboss-as-4 - | |___ jboss-as-5 - | |___ stand-alone - | |___ docs | |___ api | |___ quickstart-guide @@ -65,11 +60,6 @@ structure: - `bin` -- binaries and scripts needed to run ActiveMQ. -- `config` -- configuration files needed to configure ActiveMQ. This - contains configurations to run ActiveMQ either in stand-alone or - inside JBoss AS 4 and 5. Please refer to the reference guide for - details on configuration. - - `docs` -- guides and javadocs for ActiveMQ - `examples` -- JMS and Java EE examples. Please refer to the 'running @@ -81,5 +71,3 @@ structure: - `schemas` -- XML Schemas used to validate ActiveMQ configuration files - - diff --git a/docs/quickstart-guide/en/running.md b/docs/quickstart-guide/en/running.md index 715ea927b4..a3b2ce5d3b 100644 --- a/docs/quickstart-guide/en/running.md +++ b/docs/quickstart-guide/en/running.md @@ -1,106 +1,53 @@ -Starting The Server -=================== +Creating a Broker Instance +========================== -Standalone ActiveMQ -=================== -To run a stand-alone server, open up a shell or command prompt and -navigate into the `bin` directory. Then execute `./activemq run` (or -`./activemq.cmd run` on Windows) and you should see the following output +A broker instance is the directory containing all the configuration and runtime +data, such as logs and data files, associated with a broker process. It is recommended that +you do *not* create the instance directory under `${ACTIVEMQ_HOME}`. This separation is +encouraged so that you can more easily upgrade when the next version of ActiveMQ is released. - bin$ ./activemq run +On Unix systems, it is a common convention to store this kind of runtime data under +the `/var/lib` directory. For example, to create an instance at '/var/lib/mybroker', run +the following commands in your command line shell: - 11:05:06,589 INFO [org.apache.activemq.integration.bootstrap] HQ101000: Starting ActiveMQ Server - ... - 11:05:10,848 INFO [org.apache.activemq.core.server] HQ221001: ActiveMQ Server version 2.5.0.SNAPSHOT (Wild Hornet, 125) [e32ae252-52ee-11e4-a716-7785dc3013a3] - + cd /var/lib + ${ACTIVEMQ_HOME}/bin/activemq create mybroker -ActiveMQ is now running. +A broker instance directory will contain the following sub directories: -Both the run and the stop scripts use the config under -`config/non-clustered` by default. The configuration can be changed by -running `./activemq run xml:../config/non-clustered/bootstrap.xml` or -another config of your choosing. + * `bin`: holds execution scripts associated with this instance. + * `etc`: hold the instance configuration files + * `data`: holds the data files used for storing persistent messages + * `log`: holds rotating log files + * `tmp`: holds temporary files that are safe to delete between broker runs -The server can be stopped by running `./activemq stop` +At this point you may want to adjust the default configuration located in +the `etc` directory. -ActiveMQ In Wildfly -=================== +Environment variables are used to provide ease of changing ports, hosts and +data directories used and can be found in `etc/activemq.profile` on linux and +`etc\activemq.profile.cmd` on Windows. -ActiveMQ is the Default Messaging Provider in the [Wildfly Application -Server](http://www.wildfly.org/) To run the server you need to run the -standalone-full.xml configuration by running the command -'./standalone.sh -c standalone-full.xml'. You will see something like:/ +Starting and Stopping a Broker Instance +======================================= - bin$ ./standalone.sh -c standalone-full.xml - ========================================================================= +Assuming you created the broker instance under `/var/lib/mybroker` all you need +to do start running the broker instance is execute: - JBoss Bootstrap Environment + /var/lib/mybroker/bin/activemq run - JBOSS_HOME: /home/andy/projects/wildfly/build/target/wildfly-8.0.0.Beta1-SNAPSHOT +Now that the broker is running, you can optionally run some of the included +examples to verify the the broker is running properly. - JAVA: java +To stop the Apache ActiveMQ instance you will use the same `activemq` script, but with +the `stop argument`. Example: - JAVA_OPTS: -server -XX:+UseCompressedOops -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true + /var/lib/mybroker/bin/activemq stop - ========================================================================= +By default the `etc/bootstrap.xml` configuration is +used. The configuration can be changed e.g. by running +`./activemq run -- xml:path/to/bootstrap.xml` or another +config of your choosing. - 14:47:33,642 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.0.Final - 14:47:34,780 INFO [org.jboss.msc] (main) JBoss MSC version 1.2.0.Beta2 - 14:47:34,875 INFO [org.jboss.as] (MSC service thread 1-6) JBAS015899: WildFly 8.0.0.Beta1-SNAPSHOT "WildFly" starting - 14:47:40,382 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http) - 14:47:40,383 INFO [org.xnio] (MSC service thread 1-15) XNIO version 3.1.0.CR7 - 14:47:40,402 INFO [org.xnio.nio] (MSC service thread 1-15) XNIO NIO Implementation Version 3.1.0.CR7 - 14:47:40,488 INFO [org.jboss.remoting] (MSC service thread 1-15) JBoss Remoting version 4.0.0.Beta1 - 14:47:40,547 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 36) JBAS010280: Activating Infinispan subsystem. - 14:47:40,560 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 47) JBAS011800: Activating Naming Subsystem - 14:47:40,560 INFO [org.jboss.as.security] (ServerService Thread Pool -- 52) JBAS013171: Activating Security Subsystem - 14:47:40,567 INFO [org.jboss.as.jacorb] (ServerService Thread Pool -- 37) JBAS016300: Activating JacORB Subsystem - 14:47:40,571 INFO [org.jboss.as.jsf] (ServerService Thread Pool -- 43) JBAS012605: Activated the following JSF Implementations: [main] - 14:47:40,574 INFO [org.jboss.as.webservices] (ServerService Thread Pool -- 56) JBAS015537: Activating WebServices Extension - 14:47:40,721 INFO [org.jboss.as.connector.logging] (MSC service thread 1-6) JBAS010408: Starting JCA Subsystem (IronJacamar 1.1.0.Final) - 14:47:41,321 INFO [org.jboss.as.naming] (MSC service thread 1-4) JBAS011802: Starting Naming Service - 14:47:41,323 INFO [org.jboss.as.mail.extension] (MSC service thread 1-11) JBAS015400: Bound mail session [java:jboss/mail/Default] - 14:47:41,552 INFO [org.wildfly.extension.undertow] (MSC service thread 1-10) JBAS017502: Undertow 1.0.0.Beta16 starting - 14:47:41,552 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 55) JBAS017502: Undertow 1.0.0.Beta16 starting - 14:47:41,573 INFO [org.jboss.as.security] (MSC service thread 1-6) JBAS013170: Current PicketBox version=4.0.17.SP1 - 14:47:41,775 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 31) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3) - 14:47:41,777 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-16) JBAS010417: Started Driver service with driver-name = h2 - 14:47:42,085 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 55) JBAS017527: Creating file handler for path /home/andy/projects/wildfly/build/target/wildfly-8.0.0.Beta1-SNAPSHOT/welcome-content - 14:47:42,086 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) JBAS017525: Started server default-server. - 14:47:42,088 INFO [org.wildfly.extension.undertow] (MSC service thread 1-13) JBAS017531: Host default-host starting - 14:47:42,471 INFO [org.wildfly.extension.undertow] (MSC service thread 1-7) JBAS017519: Undertow HTTP listener default listening on /127.0.0.1:8080 - 14:47:42,823 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-10) JBAS015012: Started FileSystemDeploymentService for directory /home/andy/projects/wildfly/build/target/wildfly-8.0.0.Beta1-SNAPSHOT/standalone/deployments - 14:47:42,882 INFO [org.jboss.as.remoting] (MSC service thread 1-16) JBAS017100: Listening on 127.0.0.1:9999 - 14:47:43,037 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ221000: live server is starting with configuration ActiveMQ Configuration (clustered=false,backup=false,sharedStore=true,journalDirectory=/home/andy/projects/wildfly/build/target/wildfly-8.0.0.Beta1-SNAPSHOT/standalone/data/messagingjournal,bindingsDirectory=/home/andy/projects/wildfly/build/target/wildfly-8.0.0.Beta1-SNAPSHOT/standalone/data/messagingbindings,largeMessagesDirectory=/home/andy/projects/wildfly/build/target/wildfly-8.0.0.Beta1-SNAPSHOT/standalone/data/messaginglargemessages,pagingDirectory=/home/andy/projects/wildfly/build/target/wildfly-8.0.0.Beta1-SNAPSHOT/standalone/data/messagingpaging) - 14:47:43,062 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ221006: Waiting to obtain live lock - 14:47:43,103 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ221012: Using AIO Journal - 14:47:43,313 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ224067: Adding protocol support CORE - 14:47:43,426 INFO [org.jboss.ws.common.management] (MSC service thread 1-3) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2.1.Final - 14:47:43,448 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ224067: Adding protocol support AMQP - 14:47:43,451 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ224067: Adding protocol support STOMP - 14:47:43,453 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ224067: Adding protocol support STOMP_WS - 14:47:43,567 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ221034: Waiting to obtain live lock - 14:47:43,567 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ221035: Live Server Obtained live lock - 14:47:43,777 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-8) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS] - 14:47:43,781 INFO [org.jboss.as.jacorb] (MSC service thread 1-1) JBAS016330: CORBA ORB Service started - 14:47:44,115 INFO [org.jboss.as.jacorb] (MSC service thread 1-13) JBAS016328: CORBA Naming Service started - 14:47:44,345 INFO [org.wildfly.extension.undertow] (MSC service thread 1-3) JBAS018210: Register web context: /activemq-server - 14:47:44,361 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ221020: Started Netty Acceptor version 3.6.6.Final-90e1eb2 127.0.0.1:5455 for CORE protocol - 14:47:44,362 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ221020: Started Netty Acceptor version 3.6.6.Final-90e1eb2 127.0.0.1:61616 for CORE protocol - 14:47:44,364 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ221020: Started Netty Acceptor version 3.6.6.Final-90e1eb2 org.apache.activemq.default.servlet:61616 for CORE protocol - 14:47:44,366 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ221007: Server is now live - 14:47:44,366 INFO [org.apache.activemq.core.server] (ServerService Thread Pool -- 58) HQ221001: ActiveMQ Server version 2.4.0.Beta2 (Andromedian Flyer, 123) [bcc1cd10-2bfb-11e3-ad5f-9f88840f9e1a] - 14:47:44,435 INFO [org.jboss.as.messaging] (ServerService Thread Pool -- 58) JBAS011601: Bound messaging object to jndi name java:/ConnectionFactory - 14:47:44,437 INFO [org.jboss.as.messaging] (ServerService Thread Pool -- 59) JBAS011601: Bound messaging object to jndi name java:jboss/exported/jms/ServletConnectionFactory - 14:47:44,439 INFO [org.jboss.as.messaging] (ServerService Thread Pool -- 60) JBAS011601: Bound messaging object to jndi name java:jboss/exported/jms/RemoteConnectionFactory - 14:47:44,462 INFO [org.jboss.as.connector.deployment] (MSC service thread 1-3) JBAS010406: Registered connection factory java:/JmsXA - 14:47:44,531 INFO [org.apache.activemq.ra] (MSC service thread 1-3) ActiveMQ resource adaptor started - 14:47:44,532 INFO [org.jboss.as.connector.services.resourceadapters.ResourceAdapterActivatorService$ResourceAdapterActivator] (MSC service thread 1-3) IJ020002: Deployed: file://RaActivatoractivemq-ra - 14:47:44,535 INFO [org.jboss.as.connector.deployment] (MSC service thread 1-12) JBAS010401: Bound JCA ConnectionFactory [java:/JmsXA] - 14:47:44,536 INFO [org.jboss.as.messaging] (MSC service thread 1-15) JBAS011601: Bound messaging object to jndi name java:jboss/DefaultJMSConnectionFactory - 14:47:44,719 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management - 14:47:44,720 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990 - 14:47:44,721 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.0.0.Beta1-SNAPSHOT "WildFly" started in 12184ms - Started 213 of 249 services (73 services are lazy, passive or on-demand) - diff --git a/docs/user-manual/en/using-server.md b/docs/user-manual/en/using-server.md index 01fb0cc931..8a22f8f054 100644 --- a/docs/user-manual/en/using-server.md +++ b/docs/user-manual/en/using-server.md @@ -9,45 +9,59 @@ For the remainder of this chapter when we talk about the Apache ActiveMQ server we mean the Apache ActiveMQ standalone server, in its default configuration with a JMS Service enabled. -## Starting and Stopping the standalone server +This document will refer to the full path of the directory where the ActiveMQ +distribution has been extracted to as `${ACTIVEMQ_HOME}` directory. -In the distribution you will find a directory called `bin`. +## Creating a Broker Instance -`cd` into that directory and you will find a Unix/Linux script called -`activemq` and a Windows script called `activemq.cmd`. +A broker instance is the directory containing all the configuration and runtime +data, such as logs and data files, associated with a broker process. It is recommended that +you do *not* create the instance directory under `${ACTIVEMQ_HOME}`. This separation is +encouraged so that you can more easily upgrade when the next version of ActiveMQ is released. -To start the Apache ActiveMQ instance on Unix/Linux type `./activemq run` +On Unix systems, it is a common convention to store this kind of runtime data under +the `/var/lib` directory. For example, to create an instance at '/var/lib/mybroker', run +the following commands in your command line shell: -To start the Apache ActiveMQ instance on Windows type `activemq.cmd run` + cd /var/lib + ${ACTIVEMQ_HOME}/bin/activemq create mybroker -These scripts are very simple and basically just set-up the classpath -and some JVM parameters and bootstrap the server using -[Airline](https://github.com/airlift/airline). +A broker instance directory will contain the following sub directories: -To stop the Apache ActiveMQ instance you will use the same `activemq` script. + * `bin`: holds execution scripts associated with this instance. + * `etc`: hold the instance configuration files + * `data`: holds the data files used for storing persistent messages + * `log`: holds rotating log files + * `tmp`: holds temporary files that are safe to delete between broker runs -To run on Unix/Linux type `./activemq stop` +At this point you may want to adjust the default configuration located in +the `etc` directory. -To run on Windows type `activemq.cmd stop` +### Starting and Stopping a Broker Instance -Please note that Apache ActiveMQ requires a Java 6 or later runtime to run. +Assuming you created the broker instance under `/var/lib/mybroker` all you need +to do start running the broker instance is execute: -By default the `config/non-clustered/bootstrap.xml` configuration is + /var/lib/mybroker/bin/activemq run + +Now that the broker is running, you can optionally run some of the included +examples to verify the the broker is running properly. + +To stop the Apache ActiveMQ instance you will use the same `activemq` script, but with +the `stop argument`. Example: + + /var/lib/mybroker/bin/activemq stop + +Please note that Apache ActiveMQ requires a Java 7 or later runtime to run. + +By default the `etc/bootstrap.xml` configuration is used. The configuration can be changed e.g. by running -`./activemq run -- xml:../config/clustered/bootstrap.xml` or another +`./activemq run -- xml:path/to/bootstrap.xml` or another config of your choosing. Environment variables are used to provide ease of changing ports, hosts and -data directories used and can be found in `activemq.conf` on linux and -`activemq.conf.bat` on Windows. A different properties file can be used by -setting the property `ACTIVEMQ_CONF`, on linux this would be: - - export ACTIVEMQ_CONF=myenv.env - -or on Windows - - set ACTIVEMQ_CONF=myenv.env - +data directories used and can be found in `etc/activemq.profile` on linux and +`etc\activemq.profile.cmd` on Windows. ## Server JVM settings