You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2006/07/06 00:30:26 UTC

svn commit: r419366 [3/7] - in /incubator/activemq/trunk: activeio/activeio-core/src/main/java/org/apache/activeio/journal/active/ activemq-core/src/main/java/org/apache/activemq/broker/ activemq-core/src/main/java/org/apache/activemq/command/ activemq...

Modified: incubator/activemq/trunk/tooling/maven-activemq-memtest-plugin/src/main/java/org/apache/activemq/tool/ReportGenerator.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-memtest-plugin/src/main/java/org/apache/activemq/tool/ReportGenerator.java?rev=419366&r1=419365&r2=419366&view=diff
==============================================================================
--- incubator/activemq/trunk/tooling/maven-activemq-memtest-plugin/src/main/java/org/apache/activemq/tool/ReportGenerator.java (original)
+++ incubator/activemq/trunk/tooling/maven-activemq-memtest-plugin/src/main/java/org/apache/activemq/tool/ReportGenerator.java Wed Jul  5 15:30:19 2006
@@ -1,159 +1,159 @@
-/**
- *
- * Copyright 2005-2006 The Apache Software Foundation
- *
- * Licensed 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.
- */
-
-package org.apache.activemq.tool;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Enumeration;
-import java.util.Properties;
-
-public class ReportGenerator {
-    private static final Log log = LogFactory.getLog(ReportGenerator.class);
-    private String reportDirectory = null;
-    private String reportName = null;
-    private PrintWriter writer = null;
-    private File reportFile = null;
-    private Properties testSettings;
-
-    public ReportGenerator() {
-    }
-
-    public ReportGenerator(String reportDirectory, String reportName) {
-        this.setReportDirectory(reportDirectory);
-        this.setReportName(reportName);
-    }
-
-    public void startGenerateReport() {
-
-
-        File reportDir = new File(getReportDirectory());
-
-        // Create output directory if it doesn't exist.
-        if (!reportDir.exists()) {
-            reportDir.mkdirs();
-        }
-
-
-        if (reportDir != null) {
-            reportFile = new File(this.getReportDirectory() + File.separator + this.getReportName() + ".xml");
-        }
-
-        try {
-            this.writer = new PrintWriter(new FileOutputStream(reportFile));
-        } catch (IOException e1) {
-            e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-        }
-    }
-
-    public void stopGenerateReport() {
-        writeWithIndent(0, "</test-report>");
-        this.getWriter().flush();
-        this.getWriter().close();
-        log.info(" TEST REPORT OUTPUT : " + reportFile.getAbsolutePath());
-
-
-    }
-
-    protected void addTestInformation() {
-
-        writeWithIndent(0, "<test-report>");
-        writeWithIndent(2, "<test-information>");
-
-        writeWithIndent(4, "<os-name>" + System.getProperty("os.name") + "</os-name>");
-        writeWithIndent(4, "<java-version>" + System.getProperty("java.version") + "</java-version>");
-
-    }
-
-
-    protected void addClientSettings() {
-        if (this.getTestSettings() != null) {
-            Enumeration keys = getTestSettings().propertyNames();
-
-            writeWithIndent(4, "<test-settings>");
-
-            String key;
-            while (keys.hasMoreElements()) {
-                key = (String) keys.nextElement();
-                writeWithIndent(6, "<" + key + ">" + getTestSettings().get(key) + "</" + key + ">");
-            }
-
-            writeWithIndent(4, "</test-settings>");
-        }
-    }
-
-    protected void endTestInformation() {
-        writeWithIndent(2, "</test-information>");
-
-    }
-
-    protected void startTestResult(long checkpointInterval) {
-        long intervalInSec = checkpointInterval / 1000;
-        writeWithIndent(2, "<test-result checkpoint_interval_in_sec=" + intervalInSec + " >");
-    }
-
-    protected void endTestResult() {
-        writeWithIndent(2, "</test-result>");
-    }
-
-
-    protected void writeWithIndent(int indent, String result) {
-        StringBuffer buffer = new StringBuffer();
-
-        for (int i = 0; i < indent; ++i) {
-            buffer.append(" ");
-        }
-
-        buffer.append(result);
-        writer.println(buffer.toString());
-    }
-
-    public PrintWriter getWriter() {
-        return this.writer;
-    }
-
-
-    public String getReportDirectory() {
-        return reportDirectory;
-    }
-
-    public void setReportDirectory(String reportDirectory) {
-        this.reportDirectory = reportDirectory;
-    }
-
-    public String getReportName() {
-        return reportName;
-    }
-
-
-    public void setReportName(String reportName) {
-        this.reportName = reportName;
-    }
-
-    public Properties getTestSettings() {
-        return testSettings;
-    }
-
-    public void setTestSettings(Properties testSettings) {
-        this.testSettings = testSettings;
-    }
-}
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+
+package org.apache.activemq.tool;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.util.Properties;
+
+public class ReportGenerator {
+    private static final Log log = LogFactory.getLog(ReportGenerator.class);
+    private String reportDirectory = null;
+    private String reportName = null;
+    private PrintWriter writer = null;
+    private File reportFile = null;
+    private Properties testSettings;
+
+    public ReportGenerator() {
+    }
+
+    public ReportGenerator(String reportDirectory, String reportName) {
+        this.setReportDirectory(reportDirectory);
+        this.setReportName(reportName);
+    }
+
+    public void startGenerateReport() {
+
+
+        File reportDir = new File(getReportDirectory());
+
+        // Create output directory if it doesn't exist.
+        if (!reportDir.exists()) {
+            reportDir.mkdirs();
+        }
+
+
+        if (reportDir != null) {
+            reportFile = new File(this.getReportDirectory() + File.separator + this.getReportName() + ".xml");
+        }
+
+        try {
+            this.writer = new PrintWriter(new FileOutputStream(reportFile));
+        } catch (IOException e1) {
+            e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+    }
+
+    public void stopGenerateReport() {
+        writeWithIndent(0, "</test-report>");
+        this.getWriter().flush();
+        this.getWriter().close();
+        log.info(" TEST REPORT OUTPUT : " + reportFile.getAbsolutePath());
+
+
+    }
+
+    protected void addTestInformation() {
+
+        writeWithIndent(0, "<test-report>");
+        writeWithIndent(2, "<test-information>");
+
+        writeWithIndent(4, "<os-name>" + System.getProperty("os.name") + "</os-name>");
+        writeWithIndent(4, "<java-version>" + System.getProperty("java.version") + "</java-version>");
+
+    }
+
+
+    protected void addClientSettings() {
+        if (this.getTestSettings() != null) {
+            Enumeration keys = getTestSettings().propertyNames();
+
+            writeWithIndent(4, "<test-settings>");
+
+            String key;
+            while (keys.hasMoreElements()) {
+                key = (String) keys.nextElement();
+                writeWithIndent(6, "<" + key + ">" + getTestSettings().get(key) + "</" + key + ">");
+            }
+
+            writeWithIndent(4, "</test-settings>");
+        }
+    }
+
+    protected void endTestInformation() {
+        writeWithIndent(2, "</test-information>");
+
+    }
+
+    protected void startTestResult(long checkpointInterval) {
+        long intervalInSec = checkpointInterval / 1000;
+        writeWithIndent(2, "<test-result checkpoint_interval_in_sec=" + intervalInSec + " >");
+    }
+
+    protected void endTestResult() {
+        writeWithIndent(2, "</test-result>");
+    }
+
+
+    protected void writeWithIndent(int indent, String result) {
+        StringBuffer buffer = new StringBuffer();
+
+        for (int i = 0; i < indent; ++i) {
+            buffer.append(" ");
+        }
+
+        buffer.append(result);
+        writer.println(buffer.toString());
+    }
+
+    public PrintWriter getWriter() {
+        return this.writer;
+    }
+
+
+    public String getReportDirectory() {
+        return reportDirectory;
+    }
+
+    public void setReportDirectory(String reportDirectory) {
+        this.reportDirectory = reportDirectory;
+    }
+
+    public String getReportName() {
+        return reportName;
+    }
+
+
+    public void setReportName(String reportName) {
+        this.reportName = reportName;
+    }
+
+    public Properties getTestSettings() {
+        return testSettings;
+    }
+
+    public void setTestSettings(Properties testSettings) {
+        this.testSettings = testSettings;
+    }
+}

Propchange: incubator/activemq/trunk/tooling/maven-activemq-memtest-plugin/src/main/java/org/apache/activemq/tool/ReportGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ConsumerMojo.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ConsumerMojo.java?rev=419366&r1=419365&r2=419366&view=diff
==============================================================================
--- incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ConsumerMojo.java (original)
+++ incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ConsumerMojo.java Wed Jul  5 15:30:19 2006
@@ -1,72 +1,72 @@
-/**
- *
- * Copyright 2005-2006 The Apache Software Foundation
- *
- * Licensed 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.
- */
-package org.apache.activemq.maven;
-
-import org.apache.activemq.tool.JmsConsumerSystem;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-
-import java.util.Properties;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Set;
-import java.util.HashSet;
-
-/**
- * Goal which touches a timestamp file.
- *
- * @goal consumer
- * @phase process-sources
- */
-public class ConsumerMojo extends AbstractMojo {
-
-    private String[] validPrefix = {
-        "sysTest.",
-        "factory.",
-        "consumer.",
-        "tpSampler.",
-        "cpuSampler."
-    };
-
-    public void execute() throws MojoExecutionException {
-        JmsConsumerSystem.main(createArgument());
-    }
-
-    protected String[] createArgument() {
-        List args = new ArrayList();
-        Properties sysProps = System.getProperties();
-        Set keys = new HashSet(sysProps.keySet());
-
-        for (Iterator i=keys.iterator(); i.hasNext();) {
-            String key = (String)i.next();
-            if (isRecognizedProperty(key)) {
-                args.add(key + "=" + sysProps.remove(key));
-            }
-        }
-        return (String[])args.toArray(new String[0]);
-    }
-
-    protected boolean isRecognizedProperty(String key) {
-        for (int j=0; j<validPrefix.length; j++) {
-            if (key.startsWith(validPrefix[j])) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+package org.apache.activemq.maven;
+
+import org.apache.activemq.tool.JmsConsumerSystem;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import java.util.Properties;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.HashSet;
+
+/**
+ * Goal which touches a timestamp file.
+ *
+ * @goal consumer
+ * @phase process-sources
+ */
+public class ConsumerMojo extends AbstractMojo {
+
+    private String[] validPrefix = {
+        "sysTest.",
+        "factory.",
+        "consumer.",
+        "tpSampler.",
+        "cpuSampler."
+    };
+
+    public void execute() throws MojoExecutionException {
+        JmsConsumerSystem.main(createArgument());
+    }
+
+    protected String[] createArgument() {
+        List args = new ArrayList();
+        Properties sysProps = System.getProperties();
+        Set keys = new HashSet(sysProps.keySet());
+
+        for (Iterator i=keys.iterator(); i.hasNext();) {
+            String key = (String)i.next();
+            if (isRecognizedProperty(key)) {
+                args.add(key + "=" + sysProps.remove(key));
+            }
+        }
+        return (String[])args.toArray(new String[0]);
+    }
+
+    protected boolean isRecognizedProperty(String key) {
+        for (int j=0; j<validPrefix.length; j++) {
+            if (key.startsWith(validPrefix[j])) {
+                return true;
+            }
+        }
+        return false;
+    }
+}

Propchange: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ConsumerMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ProducerMojo.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ProducerMojo.java?rev=419366&r1=419365&r2=419366&view=diff
==============================================================================
--- incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ProducerMojo.java (original)
+++ incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ProducerMojo.java Wed Jul  5 15:30:19 2006
@@ -1,72 +1,72 @@
-/**
- *
- * Copyright 2005-2006 The Apache Software Foundation
- *
- * Licensed 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.
- */
-package org.apache.activemq.maven;
-
-import org.apache.activemq.tool.JmsProducerSystem;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Properties;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.HashSet;
-
-/**
- * Goal which touches a timestamp file.
- *
- * @goal producer
- * @phase process
- */
-public class ProducerMojo extends AbstractMojo {
-
-    private String[] validPrefix = {
-        "sysTest.",
-        "factory.",
-        "producer.",
-        "tpSampler.",
-        "cpuSampler."
-    };
-
-    public void execute() throws MojoExecutionException {
-        JmsProducerSystem.main(createArgument());
-    }
-
-    protected String[] createArgument() {
-        List args = new ArrayList();
-        Properties sysProps = System.getProperties();
-        Set keys = new HashSet(sysProps.keySet());
-
-        for (Iterator i=keys.iterator(); i.hasNext();) {
-            String key = (String)i.next();
-            if (isRecognizedProperty(key)) {
-                args.add(key + "=" + sysProps.remove(key));
-            }
-        }
-        return (String[])args.toArray(new String[0]);
-    }
-
-    protected boolean isRecognizedProperty(String key) {
-        for (int j=0; j<validPrefix.length; j++) {
-            if (key.startsWith(validPrefix[j])) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+package org.apache.activemq.maven;
+
+import org.apache.activemq.tool.JmsProducerSystem;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Properties;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.HashSet;
+
+/**
+ * Goal which touches a timestamp file.
+ *
+ * @goal producer
+ * @phase process
+ */
+public class ProducerMojo extends AbstractMojo {
+
+    private String[] validPrefix = {
+        "sysTest.",
+        "factory.",
+        "producer.",
+        "tpSampler.",
+        "cpuSampler."
+    };
+
+    public void execute() throws MojoExecutionException {
+        JmsProducerSystem.main(createArgument());
+    }
+
+    protected String[] createArgument() {
+        List args = new ArrayList();
+        Properties sysProps = System.getProperties();
+        Set keys = new HashSet(sysProps.keySet());
+
+        for (Iterator i=keys.iterator(); i.hasNext();) {
+            String key = (String)i.next();
+            if (isRecognizedProperty(key)) {
+                args.add(key + "=" + sysProps.remove(key));
+            }
+        }
+        return (String[])args.toArray(new String[0]);
+    }
+
+    protected boolean isRecognizedProperty(String key) {
+        for (int j=0; j<validPrefix.length; j++) {
+            if (key.startsWith(validPrefix[j])) {
+                return true;
+            }
+        }
+        return false;
+    }
+}

Propchange: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ProducerMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ServerMojo.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ServerMojo.java?rev=419366&r1=419365&r2=419366&view=diff
==============================================================================
--- incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ServerMojo.java (original)
+++ incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ServerMojo.java Wed Jul  5 15:30:19 2006
@@ -1,139 +1,139 @@
-/**
- *
- * Copyright 2005-2006 The Apache Software Foundation
- *
- * Licensed 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.
- */
-package org.apache.activemq.maven;
-
-import org.apache.activemq.console.Main;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-
-/**
- * Goal which starts activemq broker.
- *
- * @goal broker
- * @phase process-sources
- */
-public class ServerMojo extends AbstractMojo {
-    /**
-     * Location of the output directory. Defaults to target.
-     *
-     * @parameter expression="${project.build.directory}"
-     * @required
-     */
-    private File outputDirectory;
-
-    /**
-     * Location of the predefined config files.
-     *
-     * @parameter expression="${configDirectory}" default-value="${basedir}/src/main/resources/broker-conf"
-     * @required
-     */
-    private String configDirectory;
-
-    /**
-     * Type of activemq configuration to use. This is also the filename used.
-     *
-     * @parameter expression="${configType}" default-value="activemq"
-     * @required
-     */
-    private String configType;
-
-    /**
-     * Location of activemq config file other those found in resources/config.
-     *
-     * @parameter expression="${configFile}"
-     */
-    private File configFile;
-
-    /**
-     * Broker URL.
-     *
-     * @parameter expression="${url}"
-     */
-    private String url;
-
-    public void execute()
-            throws MojoExecutionException {
-
-        File out = outputDirectory;
-
-        // Create output directory if it doesn't exist.
-        if (!out.exists()) {
-            out.mkdirs();
-        }
-
-        String[] args = new String[2];
-        if (url != null) {
-           args[0] = "start";
-           args[1] = url;
-        } else {
-            File config;
-            if (configFile != null) {
-                config = configFile;
-            } else {
-
-                config = new File(configDirectory + File.separator + configType + ".xml");
-            }
-
-            try {
-                config = copy(config);
-            } catch (IOException e) {
-                throw new MojoExecutionException(e.getMessage());
-            }
-           args[0] = "start";
-           args[1] =  "xbean:" + (config.toURI()).toString();
-        }
-
-
-        Main.main(args);
-    }
-
-    /**
-     * Copy activemq configuration file to output directory.
-     *
-     * @param source
-     * @return
-     * @throws IOException
-     */
-    public File copy(File source) throws IOException {
-        FileChannel in = null, out = null;
-
-        File dest = new File(outputDirectory.getAbsolutePath() + File.separator + "activemq.xml");
-
-        try {
-            in = new FileInputStream(source).getChannel();
-            out = new FileOutputStream(dest).getChannel();
-
-            long size = in.size();
-            MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
-
-            out.write(buf);
-
-        } finally {
-            if (in != null) in.close();
-            if (out != null) out.close();
-        }
-
-        return dest;
-    }
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+package org.apache.activemq.maven;
+
+import org.apache.activemq.console.Main;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+
+/**
+ * Goal which starts activemq broker.
+ *
+ * @goal broker
+ * @phase process-sources
+ */
+public class ServerMojo extends AbstractMojo {
+    /**
+     * Location of the output directory. Defaults to target.
+     *
+     * @parameter expression="${project.build.directory}"
+     * @required
+     */
+    private File outputDirectory;
+
+    /**
+     * Location of the predefined config files.
+     *
+     * @parameter expression="${configDirectory}" default-value="${basedir}/src/main/resources/broker-conf"
+     * @required
+     */
+    private String configDirectory;
+
+    /**
+     * Type of activemq configuration to use. This is also the filename used.
+     *
+     * @parameter expression="${configType}" default-value="activemq"
+     * @required
+     */
+    private String configType;
+
+    /**
+     * Location of activemq config file other those found in resources/config.
+     *
+     * @parameter expression="${configFile}"
+     */
+    private File configFile;
+
+    /**
+     * Broker URL.
+     *
+     * @parameter expression="${url}"
+     */
+    private String url;
+
+    public void execute()
+            throws MojoExecutionException {
+
+        File out = outputDirectory;
+
+        // Create output directory if it doesn't exist.
+        if (!out.exists()) {
+            out.mkdirs();
+        }
+
+        String[] args = new String[2];
+        if (url != null) {
+           args[0] = "start";
+           args[1] = url;
+        } else {
+            File config;
+            if (configFile != null) {
+                config = configFile;
+            } else {
+
+                config = new File(configDirectory + File.separator + configType + ".xml");
+            }
+
+            try {
+                config = copy(config);
+            } catch (IOException e) {
+                throw new MojoExecutionException(e.getMessage());
+            }
+           args[0] = "start";
+           args[1] =  "xbean:" + (config.toURI()).toString();
+        }
+
+
+        Main.main(args);
+    }
+
+    /**
+     * Copy activemq configuration file to output directory.
+     *
+     * @param source
+     * @return
+     * @throws IOException
+     */
+    public File copy(File source) throws IOException {
+        FileChannel in = null, out = null;
+
+        File dest = new File(outputDirectory.getAbsolutePath() + File.separator + "activemq.xml");
+
+        try {
+            in = new FileInputStream(source).getChannel();
+            out = new FileOutputStream(dest).getChannel();
+
+            long size = in.size();
+            MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
+
+            out.write(buf);
+
+        } finally {
+            if (in != null) in.close();
+            if (out != null) out.close();
+        }
+
+        return dest;
+    }
 }

Propchange: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/maven/ServerMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsClient.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsClient.java?rev=419366&r1=419365&r2=419366&view=diff
==============================================================================
--- incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsClient.java (original)
+++ incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsClient.java Wed Jul  5 15:30:19 2006
@@ -1,157 +1,157 @@
-/**
- *
- * Copyright 2005-2006 The Apache Software Foundation
- *
- * Licensed 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.
- */
-package org.apache.activemq.tool;
-
-import org.apache.activemq.tool.properties.JmsClientProperties;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import javax.jms.ConnectionFactory;
-import javax.jms.Connection;
-import javax.jms.Session;
-import javax.jms.JMSException;
-import javax.jms.Destination;
-import java.util.Enumeration;
-
-public abstract class AbstractJmsClient {
-    private static final Log log = LogFactory.getLog(AbstractJmsClient.class);
-
-    protected ConnectionFactory factory;
-    protected Connection jmsConnection;
-    protected Session jmsSession;
-
-    protected int destCount = 1, destIndex = 0;
-    protected String clientName = "";
-
-    public AbstractJmsClient(ConnectionFactory factory) {
-        this.factory = factory;
-    }
-
-    abstract public JmsClientProperties getClient();
-    abstract public void setClient(JmsClientProperties client);
-
-    public ConnectionFactory getFactory() {
-        return factory;
-    }
-
-    public void setFactory(ConnectionFactory factory) {
-        this.factory = factory;
-    }
-
-    public int getDestCount() {
-        return destCount;
-    }
-
-    public void setDestCount(int destCount) {
-        this.destCount = destCount;
-    }
-
-    public int getDestIndex() {
-        return destIndex;
-    }
-
-    public void setDestIndex(int destIndex) {
-        this.destIndex = destIndex;
-    }
-
-    public String getClientName() {
-        return clientName;
-    }
-
-    public void setClientName(String clientName) {
-        this.clientName = clientName;
-    }
-
-    public Connection getConnection() throws JMSException {
-        if (jmsConnection == null) {
-            jmsConnection = factory.createConnection();
-            jmsConnection.setClientID(getClientName());
-            log.info("Creating JMS Connection: Provider=" + getClient().getJmsProvider() + ", JMS Spec=" + getClient().getJmsVersion());
-        }
-        return jmsConnection;
-    }
-
-    public Session getSession() throws JMSException {
-        if (jmsSession == null) {
-            int ackMode;
-            if (getClient().getSessAckMode().equalsIgnoreCase(JmsClientProperties.SESSION_AUTO_ACKNOWLEDGE)) {
-                ackMode = Session.AUTO_ACKNOWLEDGE;
-            } else if (getClient().getSessAckMode().equalsIgnoreCase(JmsClientProperties.SESSION_CLIENT_ACKNOWLEDGE)) {
-                ackMode = Session.CLIENT_ACKNOWLEDGE;
-            } else if (getClient().getSessAckMode().equalsIgnoreCase(JmsClientProperties.SESSION_DUPS_OK_ACKNOWLEDGE)) {
-                ackMode = Session.DUPS_OK_ACKNOWLEDGE;
-            } else if (getClient().getSessAckMode().equalsIgnoreCase(JmsClientProperties.SESSION_TRANSACTED)) {
-                ackMode = Session.SESSION_TRANSACTED;
-            } else {
-                ackMode = Session.AUTO_ACKNOWLEDGE;
-            }
-            jmsSession = getConnection().createSession(getClient().isSessTransacted(), ackMode);
-        }
-        return jmsSession;
-    }
-
-    public Destination[] createDestination(int destIndex, int destCount) throws JMSException {
-
-        if (getClient().isDestComposite()) {
-            return new Destination[] {createCompositeDestination(getClient().getDestName(), destIndex, destCount)};
-        } else {
-            Destination[] dest = new Destination[destCount];
-            for (int i=0; i<destCount; i++) {
-                dest[i] = createDestination(getClient().getDestName() + "." + (destIndex + i));
-            }
-
-            return dest;
-        }
-    }
-
-    public Destination createCompositeDestination(int destIndex, int destCount) throws JMSException {
-        return createCompositeDestination(getClient().getDestName(), destIndex, destCount);
-    }
-
-    protected Destination createCompositeDestination(String name, int destIndex, int destCount) throws JMSException {
-        String compDestName;
-        String simpleName;
-
-        if (name.startsWith("queue://")) {
-            simpleName = name.substring("queue://".length());
-        } else if (name.startsWith("topic://")) {
-            simpleName = name.substring("topic://".length());
-        } else {
-            simpleName = name;
-        }
-
-        int i;
-        compDestName = name + "." + destIndex + ","; // First destination
-        for (i=1; i<destCount-1; i++) {
-            compDestName += (simpleName + "." + (destIndex + i) +",");
-        }
-        compDestName += (simpleName + "." + (destIndex + i)); // Last destination (minus the comma)
-
-        return createDestination(compDestName);
-    }
-
-    protected Destination createDestination(String name) throws JMSException {
-        if (name.startsWith("queue://")) {
-            return getSession().createQueue(name.substring("queue://".length()));
-        } else if (name.startsWith("topic://")) {
-            return getSession().createTopic(name.substring("topic://".length()));
-        } else {
-            return getSession().createTopic(name);
-        }
-    }
-
-}
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+package org.apache.activemq.tool;
+
+import org.apache.activemq.tool.properties.JmsClientProperties;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.jms.ConnectionFactory;
+import javax.jms.Connection;
+import javax.jms.Session;
+import javax.jms.JMSException;
+import javax.jms.Destination;
+import java.util.Enumeration;
+
+public abstract class AbstractJmsClient {
+    private static final Log log = LogFactory.getLog(AbstractJmsClient.class);
+
+    protected ConnectionFactory factory;
+    protected Connection jmsConnection;
+    protected Session jmsSession;
+
+    protected int destCount = 1, destIndex = 0;
+    protected String clientName = "";
+
+    public AbstractJmsClient(ConnectionFactory factory) {
+        this.factory = factory;
+    }
+
+    abstract public JmsClientProperties getClient();
+    abstract public void setClient(JmsClientProperties client);
+
+    public ConnectionFactory getFactory() {
+        return factory;
+    }
+
+    public void setFactory(ConnectionFactory factory) {
+        this.factory = factory;
+    }
+
+    public int getDestCount() {
+        return destCount;
+    }
+
+    public void setDestCount(int destCount) {
+        this.destCount = destCount;
+    }
+
+    public int getDestIndex() {
+        return destIndex;
+    }
+
+    public void setDestIndex(int destIndex) {
+        this.destIndex = destIndex;
+    }
+
+    public String getClientName() {
+        return clientName;
+    }
+
+    public void setClientName(String clientName) {
+        this.clientName = clientName;
+    }
+
+    public Connection getConnection() throws JMSException {
+        if (jmsConnection == null) {
+            jmsConnection = factory.createConnection();
+            jmsConnection.setClientID(getClientName());
+            log.info("Creating JMS Connection: Provider=" + getClient().getJmsProvider() + ", JMS Spec=" + getClient().getJmsVersion());
+        }
+        return jmsConnection;
+    }
+
+    public Session getSession() throws JMSException {
+        if (jmsSession == null) {
+            int ackMode;
+            if (getClient().getSessAckMode().equalsIgnoreCase(JmsClientProperties.SESSION_AUTO_ACKNOWLEDGE)) {
+                ackMode = Session.AUTO_ACKNOWLEDGE;
+            } else if (getClient().getSessAckMode().equalsIgnoreCase(JmsClientProperties.SESSION_CLIENT_ACKNOWLEDGE)) {
+                ackMode = Session.CLIENT_ACKNOWLEDGE;
+            } else if (getClient().getSessAckMode().equalsIgnoreCase(JmsClientProperties.SESSION_DUPS_OK_ACKNOWLEDGE)) {
+                ackMode = Session.DUPS_OK_ACKNOWLEDGE;
+            } else if (getClient().getSessAckMode().equalsIgnoreCase(JmsClientProperties.SESSION_TRANSACTED)) {
+                ackMode = Session.SESSION_TRANSACTED;
+            } else {
+                ackMode = Session.AUTO_ACKNOWLEDGE;
+            }
+            jmsSession = getConnection().createSession(getClient().isSessTransacted(), ackMode);
+        }
+        return jmsSession;
+    }
+
+    public Destination[] createDestination(int destIndex, int destCount) throws JMSException {
+
+        if (getClient().isDestComposite()) {
+            return new Destination[] {createCompositeDestination(getClient().getDestName(), destIndex, destCount)};
+        } else {
+            Destination[] dest = new Destination[destCount];
+            for (int i=0; i<destCount; i++) {
+                dest[i] = createDestination(getClient().getDestName() + "." + (destIndex + i));
+            }
+
+            return dest;
+        }
+    }
+
+    public Destination createCompositeDestination(int destIndex, int destCount) throws JMSException {
+        return createCompositeDestination(getClient().getDestName(), destIndex, destCount);
+    }
+
+    protected Destination createCompositeDestination(String name, int destIndex, int destCount) throws JMSException {
+        String compDestName;
+        String simpleName;
+
+        if (name.startsWith("queue://")) {
+            simpleName = name.substring("queue://".length());
+        } else if (name.startsWith("topic://")) {
+            simpleName = name.substring("topic://".length());
+        } else {
+            simpleName = name;
+        }
+
+        int i;
+        compDestName = name + "." + destIndex + ","; // First destination
+        for (i=1; i<destCount-1; i++) {
+            compDestName += (simpleName + "." + (destIndex + i) +",");
+        }
+        compDestName += (simpleName + "." + (destIndex + i)); // Last destination (minus the comma)
+
+        return createDestination(compDestName);
+    }
+
+    protected Destination createDestination(String name) throws JMSException {
+        if (name.startsWith("queue://")) {
+            return getSession().createQueue(name.substring("queue://".length()));
+        } else if (name.startsWith("topic://")) {
+            return getSession().createTopic(name.substring("topic://".length()));
+        } else {
+            return getSession().createTopic(name);
+        }
+    }
+
+}

Propchange: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsClient.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsClientSystem.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsClientSystem.java?rev=419366&r1=419365&r2=419366&view=diff
==============================================================================
--- incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsClientSystem.java (original)
+++ incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsClientSystem.java Wed Jul  5 15:30:19 2006
@@ -1,272 +1,272 @@
-/**
- *
- * Copyright 2005-2006 The Apache Software Foundation
- *
- * Licensed 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.
- */
-package org.apache.activemq.tool;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.activemq.tool.sampler.ThroughputSamplerTask;
-import org.apache.activemq.tool.sampler.CpuSamplerTask;
-import org.apache.activemq.tool.reports.PerformanceReportWriter;
-import org.apache.activemq.tool.reports.XmlFilePerfReportWriter;
-import org.apache.activemq.tool.reports.VerbosePerfReportWriter;
-import org.apache.activemq.tool.properties.JmsClientSystemProperties;
-import org.apache.activemq.tool.properties.AbstractObjectProperties;
-import org.apache.activemq.tool.properties.JmsFactoryProperties;
-import org.apache.activemq.tool.properties.ReflectionUtil;
-import org.apache.activemq.tool.properties.JmsClientProperties;
-import org.apache.activemq.tool.spi.SPIConnectionFactory;
-
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSException;
-import javax.jms.ConnectionMetaData;
-import java.util.Properties;
-import java.util.Enumeration;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-public abstract class AbstractJmsClientSystem extends AbstractObjectProperties {
-    private static final Log log = LogFactory.getLog(AbstractJmsClientSystem.class);
-
-    private int clientDestIndex, clientDestCount;
-
-    protected ThreadGroup clientThreadGroup;
-    protected ConnectionFactory jmsConnFactory;
-
-    // Properties
-    protected JmsFactoryProperties factory  = new JmsFactoryProperties();
-    protected ThroughputSamplerTask tpSampler = new ThroughputSamplerTask();
-    protected CpuSamplerTask cpuSampler = new CpuSamplerTask();
-
-    public void runSystemTest() throws JMSException {
-        // Create connection factory
-        jmsConnFactory = loadJmsFactory(getSysTest().getSpiClass(), factory.getFactorySettings());
-
-        setProviderMetaData(jmsConnFactory.createConnection().getMetaData(), getJmsClientProperties());
-
-        // Create performance sampler
-        PerformanceReportWriter writer = createPerfWriter();
-        tpSampler.setPerfReportWriter(writer);
-        cpuSampler.setPerfReportWriter(writer);
-
-        writer.openReportWriter();
-        writer.writeProperties("jvmSettings", System.getProperties());
-        writer.writeProperties("testSystemSettings", ReflectionUtil.retrieveObjectProperties(getSysTest()));
-        writer.writeProperties("jmsFactorySettings", ReflectionUtil.retrieveObjectProperties(jmsConnFactory));
-        writer.writeProperties("jmsClientSettings", ReflectionUtil.retrieveObjectProperties(getJmsClientProperties()));
-        writer.writeProperties("tpSamplerSettings", ReflectionUtil.retrieveObjectProperties(tpSampler));
-        writer.writeProperties("cpuSamplerSettings", ReflectionUtil.retrieveObjectProperties(cpuSampler));
-
-        clientThreadGroup = new ThreadGroup(getSysTest().getClientPrefix() + " Thread Group");
-        for (int i=0; i<getSysTest().getNumClients(); i++) {
-            distributeDestinations(getSysTest().getDestDistro(), i, getSysTest().getNumClients(), getSysTest().getTotalDests());
-
-            final String clientName = getSysTest().getClientPrefix() + i;
-            final int clientDestIndex = this.clientDestIndex;
-            final int clientDestCount = this.clientDestCount;
-            Thread t = new Thread(clientThreadGroup, new Runnable() {
-                public void run() {
-                    runJmsClient(clientName, clientDestIndex, clientDestCount);
-                }
-            });
-            t.setName(getSysTest().getClientPrefix() + i + " Thread");
-            t.start();
-        }
-
-        // Run samplers
-        if (getSysTest().getSamplers().indexOf(JmsClientSystemProperties.SAMPLER_TP) > -1) {
-            tpSampler.startSampler();
-        }
-
-        if (getSysTest().getSamplers().indexOf(JmsClientSystemProperties.SAMPLER_CPU) > -1) {
-            try {
-                cpuSampler.createPlugin();
-                cpuSampler.startSampler();
-            } catch (IOException e) {
-                log.warn("Unable to start CPU sampler plugin. Reason: " + e.getMessage());
-            }
-        }
-
-        tpSampler.waitUntilDone();
-        cpuSampler.waitUntilDone();
-
-        writer.closeReportWriter();
-    }
-
-    public ThroughputSamplerTask getTpSampler() {
-        return tpSampler;
-    }
-
-    public void setTpSampler(ThroughputSamplerTask tpSampler) {
-        this.tpSampler = tpSampler;
-    }
-
-    public CpuSamplerTask getCpuSampler() {
-        return cpuSampler;
-    }
-
-    public void setCpuSampler(CpuSamplerTask cpuSampler) {
-        this.cpuSampler = cpuSampler;
-    }
-
-    public JmsFactoryProperties getFactory() {
-        return factory;
-    }
-
-    public void setFactory(JmsFactoryProperties factory) {
-        this.factory = factory;
-    }
-
-    public abstract JmsClientSystemProperties getSysTest();
-    public abstract void setSysTest(JmsClientSystemProperties sysTestProps);
-    public abstract JmsClientProperties getJmsClientProperties();
-
-    protected PerformanceReportWriter createPerfWriter() {
-        if (getSysTest().getReportType().equalsIgnoreCase(JmsClientSystemProperties.REPORT_XML_FILE)) {
-            String reportName;
-
-            if ((reportName = getSysTest().getReportName()) == null) {
-                reportName = getSysTest().getClientPrefix() + "_" +
-                             "numClients" + getSysTest().getNumClients() + "_" +
-                             "numDests" + getSysTest().getTotalDests() + "_" +
-                             getSysTest().getDestDistro();
-            }
-            return new XmlFilePerfReportWriter(getSysTest().getReportDir(), reportName);
-        } else if (getSysTest().getReportType().equalsIgnoreCase(JmsClientSystemProperties.REPORT_VERBOSE)) {
-            return new VerbosePerfReportWriter();
-        } else {
-            // Use verbose if unknown report type
-            return new VerbosePerfReportWriter();
-        }
-    }
-
-    protected void distributeDestinations(String distroType, int clientIndex, int numClients, int numDests) {
-        if (distroType.equalsIgnoreCase(JmsClientSystemProperties.DEST_DISTRO_ALL)) {
-            clientDestCount = numDests;
-            clientDestIndex = 0;
-        } else if (distroType.equalsIgnoreCase(JmsClientSystemProperties.DEST_DISTRO_EQUAL)) {
-            int destPerClient = (numDests / numClients);
-            // There are equal or more destinations per client
-            if (destPerClient > 0) {
-                clientDestCount = destPerClient;
-                clientDestIndex = destPerClient * clientIndex;
-            // If there are more clients than destinations, share destinations per client
-            } else {
-                clientDestCount = 1; // At most one destination per client
-                clientDestIndex = clientIndex % numDests;
-            }
-        } else if (distroType.equalsIgnoreCase(JmsClientSystemProperties.DEST_DISTRO_DIVIDE)) {
-            int destPerClient = (numDests / numClients);
-            // There are equal or more destinations per client
-            if (destPerClient > 0) {
-                int remain = numDests % numClients;
-                int nextIndex;
-                if (clientIndex < remain) {
-                    destPerClient++;
-                    nextIndex = clientIndex * destPerClient;
-                } else {
-                    nextIndex = (clientIndex * destPerClient) + remain;
-                }
-
-                clientDestCount = destPerClient;
-                clientDestIndex = nextIndex;
-
-            // If there are more clients than destinations, share destinations per client
-            } else {
-                clientDestCount = 1; // At most one destination per client
-                clientDestIndex = clientIndex % numDests;
-            }
-
-        // Send to all for unknown behavior
-        } else {
-            log.warn("Unknown destination distribution type: " + distroType);
-            clientDestCount = numDests;
-            clientDestIndex = 0;
-        }
-    }
-
-    protected ConnectionFactory loadJmsFactory(String spiClass, Properties factorySettings) throws JMSException {
-        try {
-            Class spi = Class.forName(spiClass);
-            SPIConnectionFactory spiFactory = (SPIConnectionFactory)spi.newInstance();
-            ConnectionFactory jmsFactory = spiFactory.createConnectionFactory(factorySettings);
-            log.info("Created: " + jmsFactory.getClass().getName() + " using SPIConnectionFactory: " + spiFactory.getClass().getName());
-            return jmsFactory;
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new JMSException(e.getMessage());
-        }
-    }
-
-    protected void setProviderMetaData(ConnectionMetaData metaData, JmsClientProperties props) throws JMSException {
-        props.setJmsProvider(metaData.getJMSProviderName() + "-" + metaData.getProviderVersion());
-        props.setJmsVersion(metaData.getJMSVersion());
-
-        String jmsProperties = "";
-        Enumeration jmsProps = metaData.getJMSXPropertyNames();
-        while (jmsProps.hasMoreElements()) {
-            jmsProperties += (jmsProps.nextElement().toString() + ",");
-        }
-        if (jmsProperties.length() > 0) {
-            // Remove the last comma
-            jmsProperties = jmsProperties.substring(0, jmsProperties.length()-1);
-        }
-        props.setJmsProperties(jmsProperties);
-    }
-
-    protected abstract void runJmsClient(String clientName, int clientDestIndex, int clientDestCount);
-
-    protected static Properties parseStringArgs(String[] args) {
-        File configFile = null;
-        Properties props = new Properties();
-
-        if (args == null || args.length == 0) {
-            return props; // Empty properties
-        }
-
-        for (int i=0; i<args.length; i++) {
-            String arg = args[i];
-            if (arg.startsWith("-D") || arg.startsWith("-d")) {
-                arg = arg.substring(2);
-            }
-            int index  = arg.indexOf("=");
-            String key = arg.substring(0, index);
-            String val = arg.substring(index + 1);
-
-            if (key.equalsIgnoreCase("sysTest.propsConfigFile")) {
-                if (!val.endsWith(".properties")) {
-                    val += ".properties";
-                }
-                configFile = new File(val);
-            }
-            props.setProperty(key, val);
-        }
-
-        Properties fileProps = new Properties();
-        try {
-            if (configFile != null) {
-                log.info("Loading properties file: " + configFile.getAbsolutePath());
-                fileProps.load(new FileInputStream(configFile));
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        // Overwrite file settings with command line settings
-        fileProps.putAll(props);
-        return fileProps;
-    }
-}
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+package org.apache.activemq.tool;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.activemq.tool.sampler.ThroughputSamplerTask;
+import org.apache.activemq.tool.sampler.CpuSamplerTask;
+import org.apache.activemq.tool.reports.PerformanceReportWriter;
+import org.apache.activemq.tool.reports.XmlFilePerfReportWriter;
+import org.apache.activemq.tool.reports.VerbosePerfReportWriter;
+import org.apache.activemq.tool.properties.JmsClientSystemProperties;
+import org.apache.activemq.tool.properties.AbstractObjectProperties;
+import org.apache.activemq.tool.properties.JmsFactoryProperties;
+import org.apache.activemq.tool.properties.ReflectionUtil;
+import org.apache.activemq.tool.properties.JmsClientProperties;
+import org.apache.activemq.tool.spi.SPIConnectionFactory;
+
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.ConnectionMetaData;
+import java.util.Properties;
+import java.util.Enumeration;
+import java.io.IOException;
+import java.io.File;
+import java.io.FileInputStream;
+
+public abstract class AbstractJmsClientSystem extends AbstractObjectProperties {
+    private static final Log log = LogFactory.getLog(AbstractJmsClientSystem.class);
+
+    private int clientDestIndex, clientDestCount;
+
+    protected ThreadGroup clientThreadGroup;
+    protected ConnectionFactory jmsConnFactory;
+
+    // Properties
+    protected JmsFactoryProperties factory  = new JmsFactoryProperties();
+    protected ThroughputSamplerTask tpSampler = new ThroughputSamplerTask();
+    protected CpuSamplerTask cpuSampler = new CpuSamplerTask();
+
+    public void runSystemTest() throws JMSException {
+        // Create connection factory
+        jmsConnFactory = loadJmsFactory(getSysTest().getSpiClass(), factory.getFactorySettings());
+
+        setProviderMetaData(jmsConnFactory.createConnection().getMetaData(), getJmsClientProperties());
+
+        // Create performance sampler
+        PerformanceReportWriter writer = createPerfWriter();
+        tpSampler.setPerfReportWriter(writer);
+        cpuSampler.setPerfReportWriter(writer);
+
+        writer.openReportWriter();
+        writer.writeProperties("jvmSettings", System.getProperties());
+        writer.writeProperties("testSystemSettings", ReflectionUtil.retrieveObjectProperties(getSysTest()));
+        writer.writeProperties("jmsFactorySettings", ReflectionUtil.retrieveObjectProperties(jmsConnFactory));
+        writer.writeProperties("jmsClientSettings", ReflectionUtil.retrieveObjectProperties(getJmsClientProperties()));
+        writer.writeProperties("tpSamplerSettings", ReflectionUtil.retrieveObjectProperties(tpSampler));
+        writer.writeProperties("cpuSamplerSettings", ReflectionUtil.retrieveObjectProperties(cpuSampler));
+
+        clientThreadGroup = new ThreadGroup(getSysTest().getClientPrefix() + " Thread Group");
+        for (int i=0; i<getSysTest().getNumClients(); i++) {
+            distributeDestinations(getSysTest().getDestDistro(), i, getSysTest().getNumClients(), getSysTest().getTotalDests());
+
+            final String clientName = getSysTest().getClientPrefix() + i;
+            final int clientDestIndex = this.clientDestIndex;
+            final int clientDestCount = this.clientDestCount;
+            Thread t = new Thread(clientThreadGroup, new Runnable() {
+                public void run() {
+                    runJmsClient(clientName, clientDestIndex, clientDestCount);
+                }
+            });
+            t.setName(getSysTest().getClientPrefix() + i + " Thread");
+            t.start();
+        }
+
+        // Run samplers
+        if (getSysTest().getSamplers().indexOf(JmsClientSystemProperties.SAMPLER_TP) > -1) {
+            tpSampler.startSampler();
+        }
+
+        if (getSysTest().getSamplers().indexOf(JmsClientSystemProperties.SAMPLER_CPU) > -1) {
+            try {
+                cpuSampler.createPlugin();
+                cpuSampler.startSampler();
+            } catch (IOException e) {
+                log.warn("Unable to start CPU sampler plugin. Reason: " + e.getMessage());
+            }
+        }
+
+        tpSampler.waitUntilDone();
+        cpuSampler.waitUntilDone();
+
+        writer.closeReportWriter();
+    }
+
+    public ThroughputSamplerTask getTpSampler() {
+        return tpSampler;
+    }
+
+    public void setTpSampler(ThroughputSamplerTask tpSampler) {
+        this.tpSampler = tpSampler;
+    }
+
+    public CpuSamplerTask getCpuSampler() {
+        return cpuSampler;
+    }
+
+    public void setCpuSampler(CpuSamplerTask cpuSampler) {
+        this.cpuSampler = cpuSampler;
+    }
+
+    public JmsFactoryProperties getFactory() {
+        return factory;
+    }
+
+    public void setFactory(JmsFactoryProperties factory) {
+        this.factory = factory;
+    }
+
+    public abstract JmsClientSystemProperties getSysTest();
+    public abstract void setSysTest(JmsClientSystemProperties sysTestProps);
+    public abstract JmsClientProperties getJmsClientProperties();
+
+    protected PerformanceReportWriter createPerfWriter() {
+        if (getSysTest().getReportType().equalsIgnoreCase(JmsClientSystemProperties.REPORT_XML_FILE)) {
+            String reportName;
+
+            if ((reportName = getSysTest().getReportName()) == null) {
+                reportName = getSysTest().getClientPrefix() + "_" +
+                             "numClients" + getSysTest().getNumClients() + "_" +
+                             "numDests" + getSysTest().getTotalDests() + "_" +
+                             getSysTest().getDestDistro();
+            }
+            return new XmlFilePerfReportWriter(getSysTest().getReportDir(), reportName);
+        } else if (getSysTest().getReportType().equalsIgnoreCase(JmsClientSystemProperties.REPORT_VERBOSE)) {
+            return new VerbosePerfReportWriter();
+        } else {
+            // Use verbose if unknown report type
+            return new VerbosePerfReportWriter();
+        }
+    }
+
+    protected void distributeDestinations(String distroType, int clientIndex, int numClients, int numDests) {
+        if (distroType.equalsIgnoreCase(JmsClientSystemProperties.DEST_DISTRO_ALL)) {
+            clientDestCount = numDests;
+            clientDestIndex = 0;
+        } else if (distroType.equalsIgnoreCase(JmsClientSystemProperties.DEST_DISTRO_EQUAL)) {
+            int destPerClient = (numDests / numClients);
+            // There are equal or more destinations per client
+            if (destPerClient > 0) {
+                clientDestCount = destPerClient;
+                clientDestIndex = destPerClient * clientIndex;
+            // If there are more clients than destinations, share destinations per client
+            } else {
+                clientDestCount = 1; // At most one destination per client
+                clientDestIndex = clientIndex % numDests;
+            }
+        } else if (distroType.equalsIgnoreCase(JmsClientSystemProperties.DEST_DISTRO_DIVIDE)) {
+            int destPerClient = (numDests / numClients);
+            // There are equal or more destinations per client
+            if (destPerClient > 0) {
+                int remain = numDests % numClients;
+                int nextIndex;
+                if (clientIndex < remain) {
+                    destPerClient++;
+                    nextIndex = clientIndex * destPerClient;
+                } else {
+                    nextIndex = (clientIndex * destPerClient) + remain;
+                }
+
+                clientDestCount = destPerClient;
+                clientDestIndex = nextIndex;
+
+            // If there are more clients than destinations, share destinations per client
+            } else {
+                clientDestCount = 1; // At most one destination per client
+                clientDestIndex = clientIndex % numDests;
+            }
+
+        // Send to all for unknown behavior
+        } else {
+            log.warn("Unknown destination distribution type: " + distroType);
+            clientDestCount = numDests;
+            clientDestIndex = 0;
+        }
+    }
+
+    protected ConnectionFactory loadJmsFactory(String spiClass, Properties factorySettings) throws JMSException {
+        try {
+            Class spi = Class.forName(spiClass);
+            SPIConnectionFactory spiFactory = (SPIConnectionFactory)spi.newInstance();
+            ConnectionFactory jmsFactory = spiFactory.createConnectionFactory(factorySettings);
+            log.info("Created: " + jmsFactory.getClass().getName() + " using SPIConnectionFactory: " + spiFactory.getClass().getName());
+            return jmsFactory;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new JMSException(e.getMessage());
+        }
+    }
+
+    protected void setProviderMetaData(ConnectionMetaData metaData, JmsClientProperties props) throws JMSException {
+        props.setJmsProvider(metaData.getJMSProviderName() + "-" + metaData.getProviderVersion());
+        props.setJmsVersion(metaData.getJMSVersion());
+
+        String jmsProperties = "";
+        Enumeration jmsProps = metaData.getJMSXPropertyNames();
+        while (jmsProps.hasMoreElements()) {
+            jmsProperties += (jmsProps.nextElement().toString() + ",");
+        }
+        if (jmsProperties.length() > 0) {
+            // Remove the last comma
+            jmsProperties = jmsProperties.substring(0, jmsProperties.length()-1);
+        }
+        props.setJmsProperties(jmsProperties);
+    }
+
+    protected abstract void runJmsClient(String clientName, int clientDestIndex, int clientDestCount);
+
+    protected static Properties parseStringArgs(String[] args) {
+        File configFile = null;
+        Properties props = new Properties();
+
+        if (args == null || args.length == 0) {
+            return props; // Empty properties
+        }
+
+        for (int i=0; i<args.length; i++) {
+            String arg = args[i];
+            if (arg.startsWith("-D") || arg.startsWith("-d")) {
+                arg = arg.substring(2);
+            }
+            int index  = arg.indexOf("=");
+            String key = arg.substring(0, index);
+            String val = arg.substring(index + 1);
+
+            if (key.equalsIgnoreCase("sysTest.propsConfigFile")) {
+                if (!val.endsWith(".properties")) {
+                    val += ".properties";
+                }
+                configFile = new File(val);
+            }
+            props.setProperty(key, val);
+        }
+
+        Properties fileProps = new Properties();
+        try {
+            if (configFile != null) {
+                log.info("Loading properties file: " + configFile.getAbsolutePath());
+                fileProps.load(new FileInputStream(configFile));
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        // Overwrite file settings with command line settings
+        fileProps.putAll(props);
+        return fileProps;
+    }
+}

Propchange: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsClientSystem.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsMeasurableClient.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsMeasurableClient.java?rev=419366&r1=419365&r2=419366&view=diff
==============================================================================
--- incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsMeasurableClient.java (original)
+++ incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsMeasurableClient.java Wed Jul  5 15:30:19 2006
@@ -1,51 +1,51 @@
-/**
- *
- * Copyright 2005-2006 The Apache Software Foundation
- *
- * Licensed 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.
- */
-package org.apache.activemq.tool;
-
-import org.apache.activemq.tool.sampler.MeasurableClient;
-
-import javax.jms.ConnectionFactory;
-
-import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicLong;
-
-public abstract class AbstractJmsMeasurableClient extends AbstractJmsClient implements MeasurableClient {
-    protected AtomicLong throughput = new AtomicLong(0);
-
-    public AbstractJmsMeasurableClient( ConnectionFactory factory) {
-        super( factory);
-    }
-
-    public void reset() {
-        setThroughput(0);
-    }
-
-    public long getThroughput() {
-        return throughput.get();
-    }
-
-    public void setThroughput(long val) {
-        throughput.set(val);
-    }
-
-    public void incThroughput() {
-        throughput.incrementAndGet();
-    }
-
-    public void incThroughput(long val) {
-        throughput.addAndGet(val);
-    }
-}
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+package org.apache.activemq.tool;
+
+import org.apache.activemq.tool.sampler.MeasurableClient;
+
+import javax.jms.ConnectionFactory;
+
+import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicLong;
+
+public abstract class AbstractJmsMeasurableClient extends AbstractJmsClient implements MeasurableClient {
+    protected AtomicLong throughput = new AtomicLong(0);
+
+    public AbstractJmsMeasurableClient( ConnectionFactory factory) {
+        super( factory);
+    }
+
+    public void reset() {
+        setThroughput(0);
+    }
+
+    public long getThroughput() {
+        return throughput.get();
+    }
+
+    public void setThroughput(long val) {
+        throughput.set(val);
+    }
+
+    public void incThroughput() {
+        throughput.incrementAndGet();
+    }
+
+    public void incThroughput(long val) {
+        throughput.addAndGet(val);
+    }
+}

Propchange: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/AbstractJmsMeasurableClient.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsConsumerClient.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsConsumerClient.java?rev=419366&r1=419365&r2=419366&view=diff
==============================================================================
--- incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsConsumerClient.java (original)
+++ incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsConsumerClient.java Wed Jul  5 15:30:19 2006
@@ -1,214 +1,214 @@
-/**
- *
- * Copyright 2005-2006 The Apache Software Foundation
- *
- * Licensed 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.
- */
-package org.apache.activemq.tool;
-
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.logging.Log;
-import org.apache.activemq.tool.properties.JmsConsumerProperties;
-import org.apache.activemq.tool.properties.JmsClientProperties;
-
-import javax.jms.MessageConsumer;
-import javax.jms.JMSException;
-import javax.jms.ConnectionFactory;
-import javax.jms.Connection;
-import javax.jms.Destination;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.Topic;
-
-import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicInteger;
-
-public class JmsConsumerClient extends AbstractJmsMeasurableClient {
-    private static final Log log = LogFactory.getLog(JmsConsumerClient.class);
-
-    protected MessageConsumer jmsConsumer;
-    protected JmsConsumerProperties client;
-
-    public JmsConsumerClient(ConnectionFactory factory) {
-        this(new JmsConsumerProperties(), factory);
-    }
-
-    public JmsConsumerClient(JmsConsumerProperties clientProps, ConnectionFactory factory) {
-        super(factory);
-        client = clientProps;
-    }
-
-    public void receiveMessages() throws JMSException {
-        if (client.isAsyncRecv()) {
-            if (client.getRecvType().equalsIgnoreCase(JmsConsumerProperties.TIME_BASED_RECEIVING)) {
-                receiveAsyncTimeBasedMessages(client.getRecvDuration());
-            } else {
-                receiveAsyncCountBasedMessages(client.getRecvCount());
-            }
-        } else {
-            if (client.getRecvType().equalsIgnoreCase(JmsConsumerProperties.TIME_BASED_RECEIVING)) {
-                receiveSyncTimeBasedMessages(client.getRecvDuration());
-            } else {
-                receiveSyncCountBasedMessages(client.getRecvCount());
-            }
-        }
-    }
-
-    public void receiveMessages(int destCount) throws JMSException {
-        this.destCount = destCount;
-        receiveMessages();
-    }
-
-    public void receiveMessages(int destIndex, int destCount) throws JMSException {
-        this.destIndex = destIndex;
-        receiveMessages(destCount);
-    }
-
-    public void receiveSyncTimeBasedMessages(long duration) throws JMSException {
-        if (getJmsConsumer() == null) {
-            createJmsConsumer();
-        }
-
-        try {
-            getConnection().start();
-
-            log.info("Starting to synchronously receive messages for " + duration + " ms...");
-            long endTime = System.currentTimeMillis() + duration;
-            while (System.currentTimeMillis() < endTime) {
-                getJmsConsumer().receive();
-                incThroughput();
-            }
-        } finally {
-            getConnection().close();
-        }
-    }
-
-    public void receiveSyncCountBasedMessages(long count) throws JMSException {
-        if (getJmsConsumer() == null) {
-            createJmsConsumer();
-        }
-
-        try {
-            getConnection().start();
-            log.info("Starting to synchronously receive " + count + " messages...");
-
-            int recvCount = 0;
-            while (recvCount < count) {
-                getJmsConsumer().receive();
-                incThroughput();
-                recvCount++;
-            }
-        } finally {
-            getConnection().close();
-        }
-    }
-
-    public void receiveAsyncTimeBasedMessages(long duration) throws JMSException {
-        if (getJmsConsumer() == null) {
-            createJmsConsumer();
-        }
-
-        getJmsConsumer().setMessageListener(new MessageListener() {
-            public void onMessage(Message msg) {
-                incThroughput();
-            }
-        });
-
-        try {
-            getConnection().start();
-            log.info("Starting to asynchronously receive messages for " + duration + " ms...");
-            try {
-                Thread.sleep(duration);
-            } catch (InterruptedException e) {
-                throw new JMSException("JMS consumer thread sleep has been interrupted. Message: " + e.getMessage());
-            }
-        } finally {
-            getConnection().close();
-        }
-    }
-
-    public void receiveAsyncCountBasedMessages(long count) throws JMSException {
-        if (getJmsConsumer() == null) {
-            createJmsConsumer();
-        }
-
-        final AtomicInteger recvCount = new AtomicInteger(0);
-        getJmsConsumer().setMessageListener(new MessageListener() {
-            public void onMessage(Message msg) {
-                incThroughput();
-                recvCount.incrementAndGet();
-                recvCount.notify();
-            }
-        });
-
-        try {
-            getConnection().start();
-            log.info("Starting to asynchronously receive " + client.getRecvCount() + " messages...");
-            try {
-                while (recvCount.get() < count) {
-                    recvCount.wait();
-                }
-            } catch (InterruptedException e) {
-                throw new JMSException("JMS consumer thread wait has been interrupted. Message: " + e.getMessage());
-            }
-        } finally {
-            getConnection().close();
-        }
-    }
-
-    public MessageConsumer createJmsConsumer() throws JMSException {
-        Destination[] dest = createDestination(destIndex, destCount);
-        return createJmsConsumer(dest[0]);
-    }
-
-    public MessageConsumer createJmsConsumer(Destination dest) throws JMSException {
-        if (client.isDurable()) {
-            String clientName = getClientName();
-            if (clientName == null) {
-                clientName = "JmsConsumer";
-            }
-            log.info("Creating durable subscriber (" + getConnection().getClientID() + ") to: " + dest.toString());
-            jmsConsumer = getSession().createDurableSubscriber((Topic) dest, clientName);
-        } else {
-            log.info("Creating non-durable consumer to: " + dest.toString());
-            jmsConsumer = getSession().createConsumer(dest);
-        }
-        return jmsConsumer;
-    }
-
-    public MessageConsumer createJmsConsumer(Destination dest, String selector, boolean noLocal) throws JMSException {
-        if (client.isDurable()) {
-            String clientName = getClientName();
-            if (clientName == null) {
-                clientName = "JmsConsumer";
-            }
-            log.info("Creating durable subscriber (" + getConnection().getClientID() + ") to: " + dest.toString());
-            jmsConsumer = getSession().createDurableSubscriber((Topic) dest, clientName, selector, noLocal);
-        } else {
-            log.info("Creating non-durable consumer to: " + dest.toString());
-            jmsConsumer = getSession().createConsumer(dest, selector, noLocal);
-        }
-        return jmsConsumer;
-    }
-
-    public MessageConsumer getJmsConsumer() {
-        return jmsConsumer;
-    }
-
-    public JmsClientProperties getClient() {
-        return client;
-    }
-
-    public void setClient(JmsClientProperties clientProps) {
-        client = (JmsConsumerProperties)clientProps;
-    }
-}
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+package org.apache.activemq.tool;
+
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
+import org.apache.activemq.tool.properties.JmsConsumerProperties;
+import org.apache.activemq.tool.properties.JmsClientProperties;
+
+import javax.jms.MessageConsumer;
+import javax.jms.JMSException;
+import javax.jms.ConnectionFactory;
+import javax.jms.Connection;
+import javax.jms.Destination;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.Topic;
+
+import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicInteger;
+
+public class JmsConsumerClient extends AbstractJmsMeasurableClient {
+    private static final Log log = LogFactory.getLog(JmsConsumerClient.class);
+
+    protected MessageConsumer jmsConsumer;
+    protected JmsConsumerProperties client;
+
+    public JmsConsumerClient(ConnectionFactory factory) {
+        this(new JmsConsumerProperties(), factory);
+    }
+
+    public JmsConsumerClient(JmsConsumerProperties clientProps, ConnectionFactory factory) {
+        super(factory);
+        client = clientProps;
+    }
+
+    public void receiveMessages() throws JMSException {
+        if (client.isAsyncRecv()) {
+            if (client.getRecvType().equalsIgnoreCase(JmsConsumerProperties.TIME_BASED_RECEIVING)) {
+                receiveAsyncTimeBasedMessages(client.getRecvDuration());
+            } else {
+                receiveAsyncCountBasedMessages(client.getRecvCount());
+            }
+        } else {
+            if (client.getRecvType().equalsIgnoreCase(JmsConsumerProperties.TIME_BASED_RECEIVING)) {
+                receiveSyncTimeBasedMessages(client.getRecvDuration());
+            } else {
+                receiveSyncCountBasedMessages(client.getRecvCount());
+            }
+        }
+    }
+
+    public void receiveMessages(int destCount) throws JMSException {
+        this.destCount = destCount;
+        receiveMessages();
+    }
+
+    public void receiveMessages(int destIndex, int destCount) throws JMSException {
+        this.destIndex = destIndex;
+        receiveMessages(destCount);
+    }
+
+    public void receiveSyncTimeBasedMessages(long duration) throws JMSException {
+        if (getJmsConsumer() == null) {
+            createJmsConsumer();
+        }
+
+        try {
+            getConnection().start();
+
+            log.info("Starting to synchronously receive messages for " + duration + " ms...");
+            long endTime = System.currentTimeMillis() + duration;
+            while (System.currentTimeMillis() < endTime) {
+                getJmsConsumer().receive();
+                incThroughput();
+            }
+        } finally {
+            getConnection().close();
+        }
+    }
+
+    public void receiveSyncCountBasedMessages(long count) throws JMSException {
+        if (getJmsConsumer() == null) {
+            createJmsConsumer();
+        }
+
+        try {
+            getConnection().start();
+            log.info("Starting to synchronously receive " + count + " messages...");
+
+            int recvCount = 0;
+            while (recvCount < count) {
+                getJmsConsumer().receive();
+                incThroughput();
+                recvCount++;
+            }
+        } finally {
+            getConnection().close();
+        }
+    }
+
+    public void receiveAsyncTimeBasedMessages(long duration) throws JMSException {
+        if (getJmsConsumer() == null) {
+            createJmsConsumer();
+        }
+
+        getJmsConsumer().setMessageListener(new MessageListener() {
+            public void onMessage(Message msg) {
+                incThroughput();
+            }
+        });
+
+        try {
+            getConnection().start();
+            log.info("Starting to asynchronously receive messages for " + duration + " ms...");
+            try {
+                Thread.sleep(duration);
+            } catch (InterruptedException e) {
+                throw new JMSException("JMS consumer thread sleep has been interrupted. Message: " + e.getMessage());
+            }
+        } finally {
+            getConnection().close();
+        }
+    }
+
+    public void receiveAsyncCountBasedMessages(long count) throws JMSException {
+        if (getJmsConsumer() == null) {
+            createJmsConsumer();
+        }
+
+        final AtomicInteger recvCount = new AtomicInteger(0);
+        getJmsConsumer().setMessageListener(new MessageListener() {
+            public void onMessage(Message msg) {
+                incThroughput();
+                recvCount.incrementAndGet();
+                recvCount.notify();
+            }
+        });
+
+        try {
+            getConnection().start();
+            log.info("Starting to asynchronously receive " + client.getRecvCount() + " messages...");
+            try {
+                while (recvCount.get() < count) {
+                    recvCount.wait();
+                }
+            } catch (InterruptedException e) {
+                throw new JMSException("JMS consumer thread wait has been interrupted. Message: " + e.getMessage());
+            }
+        } finally {
+            getConnection().close();
+        }
+    }
+
+    public MessageConsumer createJmsConsumer() throws JMSException {
+        Destination[] dest = createDestination(destIndex, destCount);
+        return createJmsConsumer(dest[0]);
+    }
+
+    public MessageConsumer createJmsConsumer(Destination dest) throws JMSException {
+        if (client.isDurable()) {
+            String clientName = getClientName();
+            if (clientName == null) {
+                clientName = "JmsConsumer";
+            }
+            log.info("Creating durable subscriber (" + getConnection().getClientID() + ") to: " + dest.toString());
+            jmsConsumer = getSession().createDurableSubscriber((Topic) dest, clientName);
+        } else {
+            log.info("Creating non-durable consumer to: " + dest.toString());
+            jmsConsumer = getSession().createConsumer(dest);
+        }
+        return jmsConsumer;
+    }
+
+    public MessageConsumer createJmsConsumer(Destination dest, String selector, boolean noLocal) throws JMSException {
+        if (client.isDurable()) {
+            String clientName = getClientName();
+            if (clientName == null) {
+                clientName = "JmsConsumer";
+            }
+            log.info("Creating durable subscriber (" + getConnection().getClientID() + ") to: " + dest.toString());
+            jmsConsumer = getSession().createDurableSubscriber((Topic) dest, clientName, selector, noLocal);
+        } else {
+            log.info("Creating non-durable consumer to: " + dest.toString());
+            jmsConsumer = getSession().createConsumer(dest, selector, noLocal);
+        }
+        return jmsConsumer;
+    }
+
+    public MessageConsumer getJmsConsumer() {
+        return jmsConsumer;
+    }
+
+    public JmsClientProperties getClient() {
+        return client;
+    }
+
+    public void setClient(JmsClientProperties clientProps) {
+        client = (JmsConsumerProperties)clientProps;
+    }
+}

Propchange: incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsConsumerClient.java
------------------------------------------------------------------------------
    svn:eol-style = native