You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by db...@apache.org on 2008/09/29 22:19:08 UTC

svn commit: r700238 [1/4] - in /geronimo/sandbox/failover: ./ grinder-3.0.1/ grinder-3.0.1/bin/ grinder-3.0.1/contrib/ grinder-3.0.1/contrib/mq/ grinder-3.0.1/etc/ grinder-3.0.1/examples/ grinder-3.0.1/examples/.grinder/ grinder-3.0.1/lib/ grinder-3.0....

Author: dblevins
Date: Mon Sep 29 13:19:05 2008
New Revision: 700238

URL: http://svn.apache.org/viewvc?rev=700238&view=rev
Log:
First ref of the failover sample

Added:
    geronimo/sandbox/failover/README.txt
    geronimo/sandbox/failover/cycleservers.sh   (with props)
    geronimo/sandbox/failover/deploy.sh   (with props)
    geronimo/sandbox/failover/grinder-3.0.1/
    geronimo/sandbox/failover/grinder-3.0.1/AUTHORS
    geronimo/sandbox/failover/grinder-3.0.1/CHANGES
    geronimo/sandbox/failover/grinder-3.0.1/LICENSE
    geronimo/sandbox/failover/grinder-3.0.1/LICENSE-HTTPClient
    geronimo/sandbox/failover/grinder-3.0.1/LICENSE-Jython
    geronimo/sandbox/failover/grinder-3.0.1/LICENSE-PicoContainer
    geronimo/sandbox/failover/grinder-3.0.1/LICENSE-jEditSyntax
    geronimo/sandbox/failover/grinder-3.0.1/README
    geronimo/sandbox/failover/grinder-3.0.1/bin/
    geronimo/sandbox/failover/grinder-3.0.1/bin/agent   (with props)
    geronimo/sandbox/failover/grinder-3.0.1/bin/console   (with props)
    geronimo/sandbox/failover/grinder-3.0.1/contrib/
    geronimo/sandbox/failover/grinder-3.0.1/contrib/mq/
    geronimo/sandbox/failover/grinder-3.0.1/contrib/mq/AUTHORS
    geronimo/sandbox/failover/grinder-3.0.1/contrib/mq/LICENSE
    geronimo/sandbox/failover/grinder-3.0.1/contrib/mq/MQConnector.java
    geronimo/sandbox/failover/grinder-3.0.1/contrib/mq/MQMsg.java
    geronimo/sandbox/failover/grinder-3.0.1/contrib/mq/README
    geronimo/sandbox/failover/grinder-3.0.1/contrib/mq/mq.py
    geronimo/sandbox/failover/grinder-3.0.1/contrib/mq/org.rextency.mq.jar   (with props)
    geronimo/sandbox/failover/grinder-3.0.1/etc/
    geronimo/sandbox/failover/grinder-3.0.1/etc/httpToJythonScript.xsl
    geronimo/sandbox/failover/grinder-3.0.1/etc/httpToXML.xsl
    geronimo/sandbox/failover/grinder-3.0.1/examples/
    geronimo/sandbox/failover/grinder-3.0.1/examples/.grinder/
    geronimo/sandbox/failover/grinder-3.0.1/examples/amazon.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/console.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/cookies.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/ejb.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/email.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/fba.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/form.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/grinder.properties
    geronimo/sandbox/failover/grinder-3.0.1/examples/helloworld.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/helloworldfunctions.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/http.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/httpg2.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/httpunit.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/jaxrpc.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/jdbc.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/jmsreceiver.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/jmssender.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/parallel.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/proportion.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/scenario.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/scriptlifecycle.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/sequence.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/slowClient.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/statistics.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/sync.py
    geronimo/sandbox/failover/grinder-3.0.1/examples/xml-rpc.py
    geronimo/sandbox/failover/grinder-3.0.1/grinder.properties
    geronimo/sandbox/failover/grinder-3.0.1/grinder.py
    geronimo/sandbox/failover/grinder-3.0.1/lib/
    geronimo/sandbox/failover/grinder-3.0.1/lib/grinder-j2se5.jar   (with props)
    geronimo/sandbox/failover/grinder-3.0.1/lib/grinder-xmlbeans.jar   (with props)
    geronimo/sandbox/failover/grinder-3.0.1/lib/grinder.jar   (with props)
    geronimo/sandbox/failover/grinder-3.0.1/lib/jsr173_1.0_api.jar   (with props)
    geronimo/sandbox/failover/grinder-3.0.1/lib/jython.jar   (with props)
    geronimo/sandbox/failover/grinder-3.0.1/lib/picocontainer-1.3.jar   (with props)
    geronimo/sandbox/failover/grinder-3.0.1/lib/xbean.jar   (with props)
    geronimo/sandbox/failover/grinder-3.0.1/logs/
    geronimo/sandbox/failover/grinder-3.0.1/logs/error_mingus.local-0.log
    geronimo/sandbox/failover/grinder-3.0.1/logs/error_mingus.local-1.log
    geronimo/sandbox/failover/grinder-3.0.1/logs/out_mingus.local-0.log
    geronimo/sandbox/failover/grinder-3.0.1/logs/out_mingus.local-1.log
    geronimo/sandbox/failover/load-beans/
    geronimo/sandbox/failover/load-beans/load-beans.iml
    geronimo/sandbox/failover/load-beans/load-beans.ipr
    geronimo/sandbox/failover/load-beans/load-beans.iws
    geronimo/sandbox/failover/load-beans/pom.xml
    geronimo/sandbox/failover/load-beans/src/
    geronimo/sandbox/failover/load-beans/src/main/
    geronimo/sandbox/failover/load-beans/src/main/java/
    geronimo/sandbox/failover/load-beans/src/main/java/org/
    geronimo/sandbox/failover/load-beans/src/main/java/org/superbiz/
    geronimo/sandbox/failover/load-beans/src/main/java/org/superbiz/load/
    geronimo/sandbox/failover/load-beans/src/main/java/org/superbiz/load/Load.java
    geronimo/sandbox/failover/load-beans/src/main/java/org/superbiz/load/LoadBean.java
    geronimo/sandbox/failover/load-beans/src/main/resources/
    geronimo/sandbox/failover/load-beans/src/main/resources/META-INF/
    geronimo/sandbox/failover/load-beans/src/main/resources/META-INF/ejb-jar.xml
    geronimo/sandbox/failover/load-beans/src/test/
    geronimo/sandbox/failover/load-beans/src/test/java/
    geronimo/sandbox/failover/load-beans/src/test/java/org/
    geronimo/sandbox/failover/load-beans/src/test/java/org/superbiz/
    geronimo/sandbox/failover/load-beans/src/test/java/org/superbiz/load/
    geronimo/sandbox/failover/load-beans/src/test/java/org/superbiz/load/LoadTest.java
    geronimo/sandbox/failover/load-beans/target/
    geronimo/sandbox/failover/load-beans/target/classes/
    geronimo/sandbox/failover/load-beans/target/classes/META-INF/
    geronimo/sandbox/failover/load-beans/target/classes/META-INF/ejb-jar.xml
    geronimo/sandbox/failover/load-beans/target/classes/org/
    geronimo/sandbox/failover/load-beans/target/classes/org/superbiz/
    geronimo/sandbox/failover/load-beans/target/classes/org/superbiz/load/
    geronimo/sandbox/failover/load-beans/target/classes/org/superbiz/load/Load.class   (with props)
    geronimo/sandbox/failover/load-beans/target/classes/org/superbiz/load/LoadBean.class   (with props)
    geronimo/sandbox/failover/load-beans/target/load-beans-1.0.jar   (with props)
    geronimo/sandbox/failover/load-beans/target/maven-archiver/
    geronimo/sandbox/failover/load-beans/target/maven-archiver/pom.properties
    geronimo/sandbox/failover/load-beans/target/surefire-reports/
    geronimo/sandbox/failover/load-beans/target/surefire-reports/TEST-org.superbiz.load.LoadTest.xml
    geronimo/sandbox/failover/load-beans/target/surefire-reports/org.superbiz.load.LoadTest.txt
    geronimo/sandbox/failover/load-beans/target/test-classes/
    geronimo/sandbox/failover/load-beans/target/test-classes/org/
    geronimo/sandbox/failover/load-beans/target/test-classes/org/superbiz/
    geronimo/sandbox/failover/load-beans/target/test-classes/org/superbiz/load/
    geronimo/sandbox/failover/load-beans/target/test-classes/org/superbiz/load/LoadTest.class   (with props)
    geronimo/sandbox/failover/run.sh   (with props)
    geronimo/sandbox/failover/setup.sh   (with props)

Added: geronimo/sandbox/failover/README.txt
URL: http://svn.apache.org/viewvc/geronimo/sandbox/failover/README.txt?rev=700238&view=auto
==============================================================================
--- geronimo/sandbox/failover/README.txt (added)
+++ geronimo/sandbox/failover/README.txt Mon Sep 29 13:19:05 2008
@@ -0,0 +1,98 @@
+This is a little sample app that is accompanied by a neat open source
+load testing tool called the Grinder.  This little setup should help
+cut out some of the time required to evaluate the multicast/failover
+functionality.
+
+
+-- The Grinder --
+
+A quick overview of the important Grinder files:
+
+  grinder-3.0.1/grinder.properties
+ 
+    This file has all the Grinder configuration settings.  Only one
+    setting needs to be updated before things will work, that's
+    "grinder.jvm.classpath" This property is currently referencing
+    paths on my machine, you'll need to update the paths in the
+    "grinder.jvm.classpath" property to point to the directory where
+    everything has been extracted.
+
+  grinder-3.0.1/grinder.py
+    
+    This is essentially the client.  The Grinder generates javacode
+    from that file and then runs it as the load testing client.  Note
+    the client is using "multicast://239.255.2.3:6142" as the
+    connection URL and not pointing to any server in particular.  This
+    is to demonstrate the multicast/discovery aspect of the
+    clustering/failover functionality.
+
+    If you wanted to update it for JBoss it shouldn't be too
+    difficult, you'd just need to tweak the JNDI settings in the
+    grinder.py file and then tweak the grinder.properties file to have
+    the required JBoss client libraries in the "grinder.jvm.classpath"
+    property.  I've suspected that our client performance is faster
+    than JBoss, but have never done any comparisons.  Would be
+    interested to see what stats you come up with should you be
+    tempted to race them.
+
+
+-- Sample App --
+
+The load-beans/ directory contains a basic sample application that is
+used to test the failover.  As mentioned the client for this is
+essentially the grinder.py file.  A maven2 build is included as well
+as a plain JUnit TestCase which shows the embedded testing stuff I was
+mentioning.  Everything is already built so you don't need to mess
+with that directory unless you're interested.
+
+
+-- Scripts --
+
+
+The scripts are for convenience and not a critical part of testing the
+failover.
+
+Here's what the do:
+
+  setup.sh
+   
+    Unpacks the vanilla
+    geronimo-tomcat6-javaee5-2.2-SNAPSHOT-bin.tar.gz binary then
+    copies it four times and updates the port offset on each of the
+    copies so that they don't conflict.  Note that if you do split
+    these servers onto separate machines, you will need to update the
+    "ServerHostname" property in
+    var/config/config-substitutions.properties to something other than
+    0.0.0.0.  The Geronimo 2.2 snapshot binary image is a build of the
+    current Geronimo 2.2 trunk and is not a customized build.  Anyone
+    who builds Geronimo 2.2 trunk will have the same code.
+
+  deploy.sh
+
+    Copies the load-beans app into the hot deploy directory of each
+    the server copies.  This script is called from setup.sh and does
+    not need to be run unless you feel like experimenting with the
+    sample code and want an easy way to update the app on all the
+    servers.
+
+  run.sh
+
+    Starts each of the server copies giving them a bit of time to
+    start.  The it starts the Grinder Console, waits a bit then starts
+    the Grinder Agent which will connect to the Grinder Console.  Once
+    that is up you can click the little icon at the top left that
+    looks like a "play" button.  This will start hammering on the
+    cluster.  Note that the Grinder Agent and Grinder Console can be
+    run on separate machines which will give you better stats that
+    don't include overhead of the client and console.  Grinder has
+    some pretty cool options, definitely recommended to check them
+    out.
+
+  cycleservers.sh
+
+    A simple utility that makes the whole repeated killing and
+    starting of servers automated so you can let it run for a few
+    hours unattended to see how things look over a prolonged period.
+    It kills a server, waits for a minute, starts the server again,
+    waits a minute, then moves on to the next server.  It does this
+    infinitely till the script is killed.

Added: geronimo/sandbox/failover/cycleservers.sh
URL: http://svn.apache.org/viewvc/geronimo/sandbox/failover/cycleservers.sh?rev=700238&view=auto
==============================================================================
--- geronimo/sandbox/failover/cycleservers.sh (added)
+++ geronimo/sandbox/failover/cycleservers.sh Mon Sep 29 13:19:05 2008
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+while true; do
+
+  for server in server-*; do
+
+    echo "Killing $server"
+    kill -9 $(ps ax | grep "javaagent.*$server" | grep -v 'grep' | cut -c 1-6)
+
+    sleep 60
+
+    echo "Starting $server"
+
+    ./$server/bin/startup.sh > /dev/null
+
+    sleep 60
+  done
+
+done

Propchange: geronimo/sandbox/failover/cycleservers.sh
------------------------------------------------------------------------------
    svn:executable = *

Added: geronimo/sandbox/failover/deploy.sh
URL: http://svn.apache.org/viewvc/geronimo/sandbox/failover/deploy.sh?rev=700238&view=auto
==============================================================================
--- geronimo/sandbox/failover/deploy.sh (added)
+++ geronimo/sandbox/failover/deploy.sh Mon Sep 29 13:19:05 2008
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+for server in server-*; do 
+  echo "Deploying app to $server"
+
+  # Deploy the app
+  cp load-beans/target/load-beans-1.0.jar  $server/deploy/
+
+done

Propchange: geronimo/sandbox/failover/deploy.sh
------------------------------------------------------------------------------
    svn:executable = *

Added: geronimo/sandbox/failover/grinder-3.0.1/AUTHORS
URL: http://svn.apache.org/viewvc/geronimo/sandbox/failover/grinder-3.0.1/AUTHORS?rev=700238&view=auto
==============================================================================
--- geronimo/sandbox/failover/grinder-3.0.1/AUTHORS (added)
+++ geronimo/sandbox/failover/grinder-3.0.1/AUTHORS Mon Sep 29 13:19:05 2008
@@ -0,0 +1,67 @@
+Paco Gomez
+
+Philip Aston                    philipa@mail.com
+
+Phil Dawes
+
+Paddy Spencer                   paddy.spencer@physics.org
+
+Richard Wallace                 richard.wallace@bea.com
+
+Stuart Tily                     tily@sylo.org
+
+Phillip Burgess                 phillip_burgess@mail.com
+
+Christian Nedregard             christian@laycan.com
+
+Mikael Suokas                   cms@suokas.org
+
+David Freels                    david.freels@peregrine.com
+
+Kalle Burbeck                   kalle.burbeck@idainfront.se
+
+Dirk Feufel                     Dirk.Feufel@abaXX.de
+
+Kjetil JD                       kjetiljd@usa.net
+
+Todd Wasson                     twasson@nks.net
+
+Jose Antonio Zapata Rey         joseantonio.zapatarey@hp.com
+
+Richard Perks                   rperks@bea.com
+
+Manuel Silva                    manuel.silva@bea.com
+
+Bill Schnellinger               bill@schnellinger.com
+
+Bertrand Ave                    avebertrand@yahoo.fr
+
+Huibert Alblas                  Huibert.Alblas@mgh.metro-ag.de
+
+Kalyanaraman Venkatasubramaniy  venkatk1973@yahoo.com
+
+John Stanford White             jswhite@ieee.org
+
+Slavik Gnatenko                 miracle9@newmail.ru
+
+Marc Born                       marc.born@xtramind.com
+
+Andreas Schmidt                 andreas.schmidt@docstrange.de
+
+Calum Fitzgerald                calum.fitzgerald@environment-agency.gov.uk
+
+Sebastián Fontana               sebastian.fontana@motorola.com
+
+KArol Muszynski                 karol.muszynski@hp.com
+
+Meo Bogliolo                    boglio07@bogliolobartolomeo.191.it
+
+Konstantin Ignatyev             kgignatyev@yahoo.com
+
+Martin Wagner                   martin.wagner@tngtech.com
+
+Venelin Mitov                   vmitov@gmail.com
+
+Hugh Chen                       hugh.jf.chen@gmail.com
+
+Matthias Dillier                xmds@gmx.net

Added: geronimo/sandbox/failover/grinder-3.0.1/CHANGES
URL: http://svn.apache.org/viewvc/geronimo/sandbox/failover/grinder-3.0.1/CHANGES?rev=700238&view=auto
==============================================================================
--- geronimo/sandbox/failover/grinder-3.0.1/CHANGES (added)
+++ geronimo/sandbox/failover/grinder-3.0.1/CHANGES Mon Sep 29 13:19:05 2008
@@ -0,0 +1,1650 @@
+The Grinder 3.0.1
+-----------------
+
+  Fix bug 1876273 - grinder.jar has incorrect manifest classpath.
+
+
+The Grinder 3.0
+---------------
+
+  The console now expects a properties file to be selected, rather than a
+  script. The properties file determines the script to run through the
+  grinder.script property. Other properties override the values in the
+  agents' local grinder.properties file. This provides much better
+  centralised control from the console.
+
+  Updates to the German console translation from Matthias Diller.
+
+  Fix bug 1808854 - Incorrect synchronisation in TestStatisticsMap.
+  Thanks to Ishan Oshadi Jayawardene for the report.
+
+  Partially address feature request in bug 1688988 by translating
+  InterruptedIOExceptions due to timeouts in HTTPClient code to a
+  specific TimeoutException. Thanks to Andrew McGuigan for the report.
+
+  Fix bug 1700158 - ShutdownException thrown when using
+  grinder.duration. Thanks to Caroline Rioux for the report.
+
+  Update the cookie.py example to show how to send a cookie, and to
+  retrieve and modify the cookies for the current thread. Thanks to
+  "tz" and Ying Moy for prompting me to do this.
+
+  Fix bug 1825639 - "Connection ... already opened" when recording HTTPS.
+  Thanks to Peter Zadrozny and Brian Dols for the report.
+
+  Refine logging:
+  - The first error message is written to the terminal as well as the
+    error log. This is handy for catching script typos.
+  - Don't word wrap log messages from the Agent.
+  - Don't truncate log lines to an arbitrary number of characters.
+
+  Fix bug 1831651 - Some parts of the distribution file filter should be
+  fixed. Also, added ".svn" directories to the default filter - you will
+  need to delete .grinder_console from your home directory/profile to
+  pick up this change. Thanks to Andrew Stephens for the report.
+
+  Fix TCPProxy filter bug which would cause some form data not to be
+  identified and tokenised. Increase the size of form data that will be
+  in-lined in the script. Thanks to Brian Dols for the prompt and testing.
+
+  Fix bug 1846218 - Delayed statistics are not flushed on next test.
+
+  Console script editor keyboard shortcut for "Save-File" (Ctrl-S).
+
+  The console allows files to be opened in a configurable external editor.
+
+  The console optionally automatically distributes changed files when
+  processes are started.
+
+  The -httpplugin and -newhttpplugin TCPProxy filter options have been
+  removed. They were deprecated in 3.0-beta29. The new -http filter should
+  be used instead.
+
+  Upgrade embedded version of Jython from Jython 2.1 to Jython 2.2.1.
+
+  Fix bug 1874815 - '-' does not work in statistics expressions. Also,
+  relax '+' and '*' so they are defined for zero or one argument.
+  Thanks to Heidi Thompson for the report.
+
+
+The Grinder 3.0-beta33
+----------------------
+
+  Fulfil Feature Request 1524827 - Mnemonics needed. Requested by
+  Travis Bear.
+
+  Fulfil Feature Request 1484448 - Console window size doesn't persist.
+  Requested by Travis Bear.
+
+  Fulfil Feature Request 1185967 - Insert comments while capturing with
+  the TCPProxy. Patch implemented by Venelin Mitov.
+
+  Really fix bug 1495428 - Plugin thread context not correctly
+  registered for events. This bug prevented custom plugins from
+  receiving thread lifecycle events but did not affect the HTTP
+  plugin. Thanks to Klaus-Peter Berg for reporting that this was still
+  broken.
+
+  Fix bug 1638659 - Deadlock in SleeperImplementation. Thanks to
+  Bruce Adams for the report.
+
+  Change the console's monitoring of changes to files so that it no
+  longer assumes system time matches the file system time. This should
+  fix some subtle bugs, particularly for file systems on shared storage.
+
+  Fix bug 1639383 - Extra lines added to Content-Disposition. Previously,
+  The Grinder relied on the script maintaining line endings for textual
+  POST bodies, in particular multipart/form-data. This was brittle, text
+  editors, email, and cross platform transfer frequently alters line
+  endings; and I'm sure the Jython interpreter also takes a liberal
+  approach where a file has mixed line endings. I've applied a simple
+  escaping scheme to fix this. Thanks to Claes T Tenell for the report.
+
+  Fix bug 1228335 - File editing should consider end of line. The console
+  editor now canonicalises line endings on input, and uses the host
+  platform line ending on output.
+
+  Fix bug 1619450 - Unit test HTTPClient.TestCookie.testParse fails. Thanks
+  to Bastiaan Bakker for the report.
+
+  Fulfil Feature Request 1510072 - Save absolute timestamp somewhere.
+  Log both the current time zone and the start time in milliseconds since
+  the Epoch in the output log. Requested by Vladimir Sitnikov.
+
+  Add process control methods to console API, and provide a factory for
+  obtaining a ConsoleClient.
+
+  Tentative fix to bug 1677087. Thanks to Matt Moran for the report.
+
+  Remove all support for implicit 'grinder' script context object. It was
+  deprecated in beta 15, and the implementation was broken.
+
+  New Chinese translation from Hugh Chen. If you use this, you'll also need
+  to set up Java for Chinese fonts. The following blog entry may help:
+  http://blog.lizhao.net/2007/03/java-chinese-fonts-on-ubuntu.html
+
+
+The Grinder 3.0-beta32
+----------------------
+
+  Fix bug 1577573 - valueFromBodyURI() could be optimised. TCPProxy
+  recorded scripts use this method, and its previous inefficiency
+  caused beta 30 and beta 31 to be overly demanding of CPU and memory.
+  Thanks to Andy Kim for the original bug report.
+
+  Fix bug 1579641 - Exceptions thrown by HTTPRequest.processResponse()
+  were not logged correctly. Thanks to Richard Taylor for the report.
+
+  Fix bug 1585912 - jdbc.py incorrectly indented. Thanks to Coey
+  (cminear at users.sourceforge.net) for the report.
+
+  Fix bug 1593169 - AssertionError thrown in instrumentation code. Thanks
+  to Peter Wickersham and Matt Schlobohm for the report and analysis.
+
+  Added MQ library and example code from Phillip Mayhew to the contrib
+  directory.
+
+  Fix bug 1592664 - InterruptedException when grinder.processes > 1.
+  This is due to JRE badness that I've had to work around. Thanks to
+  Stephane Nicoll and whoever opened the bug for the reports.
+
+  Fix bug 1604111 - Deadlock on shutdown (TCPProxy). Thanks to Graham
+  Sweetland for his assistance in reproducing this problem.
+
+  Added an initial version of the console API. This API is under
+  development and not stable. It will grow and change over the next
+  few releases. Its not ready for mass consumption yet, but advanced
+  users can check out the API (net.grinder.console.client.ConsoleClient).
+
+
+The Grinder 3.0-beta31
+----------------------
+
+  Fix bug 1199086 - Distribution to multiple agents hangs. Thanks to
+  capwin@sourceforge.net for analysing the problem.
+
+  Fix bug 1495428 - Plugin thread context not correctly registered for
+  events.
+
+  Fix HTTPPlugin TCPProxy filter to remove extraneous quote from
+  reference to POST data files. Thanks to Saurabh Sehgal for the
+  report.
+
+  Fix bug 1525387 - Relax cookie parsing to cope with .NET nonsense.
+  Requested and prototyped by John S. White.
+
+  Fulfil Feature Request 1482811 - slow socket connections. Requested
+  by Travis Bear. See HTTPPluginConnection.setBandwidthLimit(). Travis
+  and Leland Olney assisted in the testing and fixing of this feature.
+
+  Fix console bug where the Total line in statistics tables could be
+  incorrectly rendered in red.
+
+  Fix bug 1525628 - Throw NotWrappableTypeException not
+  NullPointerException on attempt to wrap a null object.
+
+  Fix bug 1527299 - statistics.delayReports doesn't work with nested
+  tests. This required a significant change to the script statistics
+  API. The script can now distinguish between the statistics for the
+  current test (statistics.forCurrentTest), and the statistics for the
+  last completed test (statistics.forLastTest). If there is a current
+  test, it's statistics can be queried and modified. If there is a
+  last reported test, it's statistics can be queried and can be
+  modified if statistics reports are delayed.
+
+  The statistics for an erroneous test is now recorded in the data
+  log, but not included in the aggregate statistics sent to the
+  console and the summary table (only the number of errors is
+  incremented). This makes the aggregate statistics averages correct,
+  whilst still allowing the test time to be retrieved from the data
+  log. (Previously, the test time was zeroed for erroneous tests, so
+  both the data log and the aggregate statistics averages other than
+  test time were incorrect).
+
+  Fix bug 1484703 - Total statistics wrong for composite tests. This
+  was most apparent with the HTTP plugin - the total average test time
+  also included the page tests so "double accounted" for the time of
+  individual tests. The statistics display has now been changed so
+  that the statistics for composite tests (tests which wrap calls of
+  other tests) are no longer including in the totals.
+
+
+The Grinder 3.0-beta30
+----------------------
+
+  Fix HTTPlugin TCPProxy filter so that scripts send the real token
+  name back to the server, not the token id. Thanks to VmasterZen for
+  reporting this.
+
+  Changes to the script statistics API:
+
+    Scripts now refer to statistics by name rather than indicies. This
+    means they don't need to use StatisticsIndexMap. This addresses an
+    issue with scripts being unable to access StatisticsIndexMap -
+    thanks to Stefan Grinsted for the report.
+
+    The ScriptContext registerSummaryStatisticsView() and
+    registerDetailStatisticsView() methods have been replaced with
+    Statistics.registerSummaryExpression() and
+    Statistics.registerDataLogExpression(). The new methods use
+    expression strings, rather than requiring the use StatisticsView
+    and ExpressionView objects.
+
+    The scripts no longer need objects from the net.grinder.statistics
+    package; consequently that package has been removed from the
+    statistics API.
+
+  Fix scripts statistics so the query methods work outside of an open
+  test dispatch context; they return values for the last test reported
+  by the worker thread. This was broken by the support for nested
+  tests introduced in the last beta.
+
+  The grinder.recordTime property has been replaced by a new
+  grinder.reportTimesToConsole property. Test times are now always
+  recorded in the worker process data log, irrespective of the value
+  of grinder.reportTimesToConsole.
+
+
+The Grinder 3.0-beta29
+----------------------
+
+  Nested Tests are supported. That is, you can now use a Test to
+  instrument script code that calls things wrapped by other Tests.
+
+  A __target__ field has been added to test proxy wrappers, allowing
+  convenient access to the wrapped object.
+
+  New implementation of the HTTPPlugin TCPProxy filter. Key new
+  features over the previous filter (which is deprecated):
+   - Records to a single script.
+   - Basic Authorization is recorded.
+   - Modular implementation based on an XSLT style sheet.
+   - Requests are grouped together into pages, using simple rules that
+     guess the resources belonging to a page based on the resource type.
+     Pages are instrumented as separate tests.
+   - Name value tokens are identified in URL path parameters and query
+     strings and mapped to script variables. Most session tokens that
+     encoded in URLs or present in hidden form fields will now be
+     handled automatically.
+
+  Several changes to the script API, including:
+    net.grinder.plugin.http.HTTPRequest:
+     - Removed addHeader(), deleteHeader()
+     - Header arrays passed to GET, POST, etc. are now merged with the
+       default values held by the HTTPRequest. Previously they setting
+       an array on the request overrode all the default values.
+
+    net.grinder.plugininterface.PluginThreadContext:
+     - getStartTime(), startTimedSection(), stopTimedSection() have
+       been replaced with pauseClock(), resumeClock() to support nested
+       tests. (Since now there can be multiple active dispatch contexts).
+
+    net.grinder.script.Statistics:
+     - Query methods now return meaningful results within wrapped code.
+     - Added getStatisticsIndexMap. Thanks to Beecher Greenman for
+       reporting this omission.
+
+    net.grinder.plugin.http.HTTPUtilities
+     - New class. This has methods that HTTP scripts might find useful.
+
+  The HTTPClient Authorization module is no longer enabled by default
+  because it prevents raw Authorization headers being sent through.
+  The module also slows things down as HTTPClient must parse responses
+  for challenges. Advanced users who still wish to use the HTTPClient
+  Authorization module can enable it with the new
+  HTTPPluginConnection.setUseAuthorizationModule() method. The
+  following convenience wrappers around the HTTPClient API were also
+  removed: addBasicAuthorization(), removeBasicAuthorization(),
+  addDigestAuthorization(), removeDigestAuthorization().
+
+  The worker process to console communication has been made more
+  efficient, and a race condition which caused "Ignoring unknown test"
+  messages has been removed. Thanks to Dhinakar K for the report.
+
+  The Grinder can now optionally use J2SE 5 System.nanoTime() which
+  might give more precision on some platforms. Times are still
+  reported in milliseconds. See the grinder.useNanoTime property.
+  Thanks to Tom Barnes for requesting this feature.
+
+  Fix console file scanning to used the same filtering as the file
+  distributon. Thanks to whoever reported this. (Bug 1447361).
+
+  The HTTP proxy code in the TCPProxy has been improved; this should
+  address problems seen when chaining TCPProxy's together as HTTPS
+  proxies. Thanks to Justin Nowell for prompting me to look at this.
+
+
+Grinder 3.0-beta28
+------------------
+
+  Updates to the Italian translation from Meo Bogliolo.
+
+  Refactoring of statistics package API. This may affect existing
+  custom plugins. See PluginProcessContext.getStatistics.
+
+  New Russian translation from Konstantin Ignatyev.
+
+  Fix the TCPProxy port forwarding mode to correctly generate https
+  URLs. (Bug 1324640).
+
+  Fix the exception logging to include Jython stack traces. Simplify
+  the exception log formatting.
+
+  Java methods can now be wrapped. The resulting object should be
+  invoked Python style, i.e. non-static methods must be supplied with
+  a 'self' instance as the first argument.
+
+  New grinder.debug.singleprocess property. If set to true, the agent
+  process spawns engines in threads rather than processes, using
+  special classloaders to isolate the engines. This allows the engine
+  to be easily run in a debugger. This is primarily a tool for
+  debugging The Grinder engine, but it might also be useful to
+  advanced users.
+
+  More relaxed handling of invalid dates in Cookies. Requested by
+  Martin Wagner.
+
+  Nicer output for ConnectExceptions and UnknownHost exceptions.
+  (Bug 927828).
+
+  Handle Cookies with empty expires attribute. (Bug 982834).
+
+  Added a pop-up menu to the editor file tree.
+
+  Support Jython 2.2a1. Simply add the Jython 2.2a1 jython.jar to the
+  start of your class path. Thanks to Martin Wagner for prompting me
+  to do this.
+
+  The documentation is now distributed in a separate zip file.
+
+
+Grinder 3.0-beta27
+------------------
+
+  The TCPProxy is now relaxed about empty query strings. Thanks to
+  John Sinclair for the suggestion.
+
+  Updates to the Spanish translation from Jose Antonio Zapata.
+
+  New Polish translation from KArol Muszynski.
+
+  New Italian translation from Meo Bogliolo.
+
+  The documentation sources are now hosted on SourceForge CVS, and are
+  no longer part of the source distribution. See
+  http://sourceforge.net/cvs/?group_id=18598.
+
+  Modify HTTPClient code so that HTTPResponse.getText() works with
+  more content types. (Bug 1297821).
+
+  Fix out of date documentation references to getIndexForLong (it has
+  been renamed to getLongIndex). Thanks to Dietrich Bollmann for the
+  report.
+
+
+Grinder 3.0-beta26
+------------------
+
+  The Grinder now requires J2SE 1.4.
+
+  The console now displays agent process status.
+
+  Fix the TCPProxy to cope correctly with 8 bit strings in all
+  locales (Bug 1167731). Thanks to Anton Malykh for the report.
+
+  Fix a bug where system properties specified on the command line were
+  incorrectly quoted when building the worker process command line.
+  Thanks to Dietrich Bollmann for the report.
+
+  Be more strict about matching line endings in the HTTP TCPProxy
+  filters. Previously there was a platform specific bug. Thanks to
+  Alex Bolgarov for the report.
+
+  Change to the script API: getGrinderID() has been renamed
+  getProcessName().
+
+  Correct SSL documentation - The Grinder does not support the
+  javax.net.ssl.* system properties.
+
+  Fix to the JMS receiver example from Dietrich Bollmann: use a queue
+  to pass state between threads in a thread safe way.
+
+  Make the TCPProxy HTTP engine more resilient to connections being
+  dropped. Thanks to Jon Weygandt for the suggestion.
+
+
+Grinder 3.0-beta25
+------------------
+
+  The statistics engine has been enhanced to report the standard
+  deviation of the test times. This addresses Feature Request 1029224.
+  The change requires some changes to the statistics API - the
+  timedTests and timedTestTime long statistics have been replaced with
+  a single timedTests long sample statistic; there is currently no way
+  for a script to directly set, or query, timedTests.
+
+  Latest updates from Bertand Ave for the new HTTP Plugin TCPProxy
+  filter. Addresses RFE 1041267, bug 1164319.
+
+  Change the HTTPlugin TCPProxy filters so that they no longer
+  interpret ';' as a query string separator. Thanks to Nichole
+  Holthoefer for the problem report.
+
+  Fix a bug where the engine would incorrectly override the plugin if
+  the plugin had marked a test as an error.
+
+  Correct a few typos. Thanks to Henry Chan for pointing then out.
+
+  Fix a bug so that Test invocation works from from __init__ or
+  __del__. Thanks to Bertrand Ave for the bug report.
+
+  Most source files have been converted to use the Unix line endings.
+  This is better supported by the Eclipse CVS module and Cygwin tools.
+
+
+Grinder 3.0-beta24
+------------------
+
+  The TCPProxy now returns HTML error messages to the browser where it
+  can.
+
+  When used in the default HTTP proxy mode, the TCPProxy always
+  listens as an HTTPS proxy as well. The TCPProxy -ssl option now only
+  applies to port forwarding mode.
+
+  Fix a bug where the TCPProxy could raise an
+  ArrayIndexOutOfBoundsException. Thanks to Alan Droege for the
+  report.
+
+  Historically The Grinder has used the terms "transaction" and "test"
+  synonymously - this is inconsistent and confusing. "Test" is now
+  used consistently everywhere.
+
+  Fix a bug with the new HTTP instrumentation. The statistics were
+  incorrectly calculated when more than one HTTPRequest was wrapped in
+  a given Test. Thanks to Bernd Pressler and Sebastien Lemeunier for
+  reporting the problem.
+
+  The distribution control in the console is now enabled only if the
+  agent file caches might be out of date. This acts as a visual
+  indication that the files need to be distributed. Added warning
+  dialog about attempting to start the processes without distributing
+  files.
+
+  The process controls in the console are now enabled only if an agent
+  is connected. Added warning dialog about attempting to start the
+  processes with unsaved buffers.
+
+
+Grinder 3.0-beta23
+------------------
+
+  Scripts can now control the SSL context used by each worker thread.
+  This can be used to vary the client certficate based on the thread.
+  Thanks to Ryan Whitaker and William Babilon for requesting this.
+
+  Enhancement from Slavik Gnatenko that allows the grinder.threads,
+  grinder.reportToConsole.interval, and grinder.duration properties to
+  be overridden in scripts initialistion section.
+
+  Fix TCPProxy to make it more relaxed about 8 bit characters in HTTP
+  URLs. Thanks to Thomas Böhne for reporting problems.
+
+  Fix another bug in HTTPClient related to responses with a
+  Content-Length of 0. Thanks to John Lee for the report.
+
+  German console translation updates from Marc Born and Andreas
+  Schmidt.
+
+  French console translation updates from Bertrand Ave.
+
+  New documentation built with Apache Forrest.
+
+  Additional HTTP instrumentation from Calumn Fitzgerald. This adds
+  new statistics measuring time to resolve host names (DNS), time to
+  establish the connection, and time to first byte.
+
+  XML-RPC example from Sebastián Fontana.
+
+
+Grinder 3.0-beta22
+------------------
+
+  Major work on console editing and script distribution features. These
+  are undocumented, but now quite usable. See TODO for details of the
+  enhancements to be done in the additional releases before The
+  Grinder 3.0 is promoted out of beta.
+
+  Fix bug in HTTPPlugin. Now The Grinder doesn't automatically follow
+  redirects by default.
+
+  Fix bug in new HTTPPlugin filter which caused an exception when
+  attempting to record POSTs that have query strings.
+
+  Fix bug in HTTPPlugin. Can now handle responses with a
+  Content-Length of 0.
+
+  The TCPProxy now uses a built-in default key store if none is
+  specified.
+
+
+Grinder 3.0-beta21
+------------------
+
+  New process ramp-up feature from Bertrand Ave and Phil Aston. New
+  properties: grinder.initialProcesses, grinder.processIncrement, and
+  grinder.processIncrementInterval. (Whilst this new feature is useful,
+  process ramp-up and other scheduling will eventually be implemented
+  by the console.)
+
+
+Grinder 3.0-beta20
+------------------
+
+  Fix bug 912050 - gr3-b19 doesn't playback recorded URL params.
+  Fix bug 911966 - gr3-b19 doesn't playback User-Agent: header.
+  Thanks to Koen Debruyckere for the timely reports.
+
+  Simplify HTTPRequest API slightly by removing some redundant
+  overloaded methods and ordering parameters for consistently.
+
+  Other fixes to HTTPRequest:
+   - DELETE() mistakenly invoked a Trace() method.
+   - GET() and OPTIONS() could pass header values to query strings.
+
+  The PluginRegistry class that a plugin must use has been moved to
+  the plugininterface package.
+
+
+Grinder 3.0-beta19
+------------------
+
+  Removed redundant getLogger() and getFilenameFactory() from
+  PluginProcessContext and PluginThreadContext. Plug-ins can get these
+  services from the script context object and share them with worker
+  threads.
+
+  The PluginRegistry.register() method now takes an instance of
+  GrinderPlugin, rather than a class that implements GrinderPlugin,
+  and no longer returns a PluginProcessContext.
+
+  Fix bug 820481 - StringIndexOutOfBoundsException when logging.
+  Thanks to Dragos Cernahoschi and Gordon Reid for reports.
+
+  Fix bug 805013 - mean time is not correct. Thanks to all who
+  reported this, and to Jan Wilmaers and Bart Bauwens for their
+  investigation and analysis.
+
+  HTTP response errors statistic from John Stanford White.
+
+  Added a processResponse method to HTTPRequest so that scripts
+  subclasses can process respones.
+
+  The console can now be set to start as soon as the first worker
+  process starts its threads. ("Ignore 0 samples").
+
+
+Grinder 3.0-beta18
+------------------
+
+  Fix console column header resizing by working around Java bug
+  4760433.
+
+  Fix the TCPProxy SSL support that I inadvertently broke in beta 17.
+
+  Allow the console Look and Feel to be changed.
+
+  HTTPPlugin updates from Bertrand:
+
+   - Provide access to HTTPClient content and transfer decoding
+   support.
+
+   - Minor updates to HTTPPluginTCPProxyFilter2.
+
+  Remove the Sniffer web app.
+
+  Fail hard if script attempts to register detail statistics view from
+  worker thread.
+
+  Support scripts that sleep outside of worker threads.
+
+  Allow table cells to be copied to clipboard and (with J2SE 1.4 and
+  later) copy dragged.
+
+
+Grinder 3.0-beta17
+------------------
+
+  Fix bug 872546 - using HTTPPlugin with no console hangs the worker
+  processes. The change involves explicitly calling
+  InetAddress.getLocalHost() up front, indicating that the underlying
+  cause is a very strange JVM issue.
+
+  Fix bug 876097 - ClonePyInstance not included in grinder.jar. Thanks
+  to Karl Wyer for the report.
+
+  Fix implicit grinder object deprecation message. Thanks to Christian
+  Sell for the report.
+
+  Minor updates and fixes to the HTTPPluginTCPProxyFilters from
+  Bertrand Ave.
+
+  Fix bug 868587 - The HTTP plugin now uses a new SSL session for each
+  thread and for each run. This corresponds to the orthodox grinder
+  model of one run corresponding to one user browser session.
+  Previously SSL sessions were pooled across threads, leading to
+  unrealistic results when using The Grinder to drive a cluster of
+  servers through SSL session-aware load balancers. More SSL sessions
+  will be created, so expect high CPU load on both client and server,
+  and average times for first contact with an HTTPS server within a
+  test run to be significantly higher. Thanks to Joshua Reedy for
+  prompting me to do this, and for testing the change.
+
+  Example of how to use The Grinder with HTTPUnit from Tony Lodge.
+
+  Email script example from Tom Pittard.
+
+  Implement HTTPPluginConnection.removeBasicAuthorization() and
+  HTTPPluginConnection.removeDigestAuthorization(). The parameters
+  to this method, and semantics of the corresponding add methods, have
+  been changed to match HTTPClient. The clearAll methods have been
+  removed from the API.
+
+  Add addValue() methods to the script Statistics API.
+
+  The HTTP plugin now records the length of responses and reports mean
+  response length and response bytes per second to the console. Thanks
+  to John Stafford White for prompting me to do this. I've altered the
+  console tables to word wrap the column labels so that more columns
+  can be displayed neatly. This only appears to size correctly with
+  J2SE 1.3, and even then not every time. J2SE 1.4 only shows the
+  first line. I hope to have this swinging nicely by the next beta.
+
+  Spanish translation updates from Jose Antonio Zapata Rey.
+
+
+Grinder 3.0-beta16
+------------------
+
+  Multicast is no longer used for distributing console messages
+  signals.
+
+  Multicast has been a frequent source of newbie problems, and has
+  also made The Grinder unreasonably hard to use with some corporate
+  network configurations. Console messages are now sent over TCP
+  connections to the agent processes, which fan-out the signals to
+  their worker processes. The processing is multi-threaded and
+  asynchronous and I expect it to scale well.
+
+  IMPORTANT: The communication properties have changed. The following
+  properties can be set in grinder.properties:
+
+    grinder.consoleHost	  (previously grinder.consoleAddress)
+    grinder.consolePort
+    grinder.useConsole    (previously grinder.receiveConsoleSignals /
+                     grinder.reportToConsole)
+
+  The grinder.grinderAddress and grinder.grinderPort properties have
+  been removed. Corresponding changes have been made to the console
+  options dialog.
+
+
+Grinder 3.0-beta15
+------------------
+
+  The use of the implicit 'grinder' script context object is
+  deprecated. You should explicitly "from net.grinder.Grinder import
+  grinder" in your scripts to ensure they remain compatible with
+  future releases.
+
+  Fix bug 810532 - problems invoking methods. You can now wrap Jython
+  objects that are subclassed from Java objects. Thanks to Karl Wyer
+  for the report, and also to John Stanford White for requesting this.
+
+  HTTPPluginTCPProxyFilter now records the User-Agent header. Thanks
+  to Danny Faught for pointing out the opportunity.
+
+  Fix bug 852217 - sample interval jumps after I set it. Thanks to
+  Danny Faught for the report.
+
+  Fix/enhance the TCPProxy's support for chained HTTPS proxies. This
+  should now work with a wider range of proxies.
+
+  Improved console error handling.
+
+  Fix bug 852298 - null pointer exception when multicast fails. Thanks
+  to Danny Faught for the report.
+
+  Remove support for grinder.appendLog, I suspect it was rarely used.
+  Add new feature which keeps archives of old logs, see
+  grinder.numberOfOldLogs. This should be much more useful when
+  resetting processes with the console.
+
+  Add a confirm dialog to "Stop Processes" as its probably not what
+  the user wants to do.
+
+  Bertrand Ave has added support for regular expressions to his new
+  HTTPPluginTCPProxyFilter (see notes below). The implementation now
+  has its own response filter; use the TCPProxy "-newhttpplugin" as a
+  short cut. An example properties file can be found in
+  contrib/httpplugin.
+
+
+Grinder 3.0-beta14
+------------------
+
+  Hack HTTPClient to provide a tentative fix to the "premature EOF"
+  problem. This widely reported problem occurs when a server times out
+  and closes a connection, after which writes to the connection
+  silently fail and we don't learn about the problem until we read
+  from the connection.
+
+  Clean up the Jython interpreter correctly so that scripts can use
+  exit functions. (See the standard Python atexit module).
+
+  Guarantee that the TestRunner __del__ call is called on shutdown so
+  that scripts can use it to tidy up per-thread state. Thanks to
+  Stefano Santoro for inspiration.
+
+  Add a new HTTPPluginTCPProxyFilter from Bertrand Ave. This is
+  currently undocumented and should be considered beta, but is more
+  feature rich than the default HTTPPluginTCPProxyFilter. Over time it
+  is likely to become the default HTTPPlugin filter. If you'd like to
+  try it out, you'll need to start the TCPProxy with "-requestFilter
+  net.grinder.plugin.http.HTTPPluginTCPProxyFilter2 -responseFilter
+  net.grinder.plugin.http.HTTPPluginTCPProxyReponseFilter". You'll
+  also need the WebUtils Python module that can be found in
+  contrib/httpplugin.
+
+  Fix bug 850939 - dead link in documentation. Thanks to Danny Faught
+  for the report.
+
+
+Grinder 3.0-beta13
+------------------
+
+  Fix bug 847571 - console does not display image icons. Thanks to
+  Stefano Santoro for the report.
+
+
+Grinder 3.0-beta12
+------------------
+
+  Updates to the TCPProxy from Bertrand Ave:
+
+   - Added a "-console" switch. When used, the TCPProxy creates a
+     simple Swing dialog that allows it to be cleanly interrupted.
+
+   - Added a "-properties" switch to pass System properties to
+     filter implementations. Removed the HTTPPluginTCPProxyFilter's
+     "-initialTest" option in favour of this more general mechanism.
+
+   - Added a shutdown hook to increase chance of clean shutdown.
+
+  Fix TCPProxy so that it supports HTTP/1.1 from the browser when
+  acting as an HTTP Proxy. Recording of cross-site links should now
+  work. Thanks to Jimmy Wang for the report.
+
+  Remove the -proxy option from the TCPProxy. The TCPProxy now listens
+  as an HTTP proxy by default unless either -remoteHost or -remotePort
+  is specified.
+
+  Add a new -httpproxy option to the TCPProxy. This option specifies
+  that output should to be directed through another HTTP/HTTPS proxy;
+  this may help you reach the Internet. There is also a -httpsproxy
+  option which allows you to have a different HTTPS proxy. These
+  options are not supported in port forwarding mode.
+
+  The TCPProxy now supports chains of filters. Some may find
+  "-httpPlugin -requestFilter ECHO -responseFilter ECHO" useful.
+
+  The TCPProxy now displays key store configuration when starting in
+  SSL mode. Support for setting the key store using system properties
+  has been removed.
+
+  Optimise TCPProxy SSL initialisation for speed rather than
+  cryptographic strength. Do not rely on the TCPProxy to provide
+  strong security.
+
+  Change the TCPProxy -timeout option so the TCPProxy will not exit
+  if there are active connections.
+
+  Fix a TCPProxy HTTPS proxy bug that caused SSLHandshakeExceptions
+  when used with Internet Explorer 6.0.
+
+  Enhancement from Richard Perks that allows scripts to specify the
+  local interface to use for HTTP connections. See
+  HTTPPluginConnection.setLocalAddress().
+
+  HTTP Plugin enhancement: If the User-Agent header is specified,
+  don't append the HTTPClient version string.
+
+  Fix bug 836028 - incorrect platform specific separator for
+  classpath. Thanks to Stefano Santoro for the report.
+
+
+Grinder 3.0-beta11
+------------------
+
+  Updates to the French console translation from Betrand Ave.
+
+  German console translation from Huibert Alblas.
+
+  "grinder." properties specified on the agent command line are now
+  passed through to worker processes. The original motivation for this
+  was to allow the log directory to be set based on the system date.
+
+  HTTPPlugin enhancements:
+
+   - Script API to set whether an exception should be thrown when
+     establishing an HTTPS connection if the server's certificate
+     doesn't match the host name. The default behaviour has been
+     changed to disable this check.
+
+  Fix bug 804272 - console results table column order varies according
+  to how classes are packaged. Thanks to Karl Wyer for the report.
+
+  Updated TCPProxy documentation.
+
+  If console cannot be contacted, don't expect console signals.
+
+  The 'grinder' context object can now be explicitly imported from
+  net.grinder.Grinder.grinder. It is good practice to add an explict
+  import to the top of your scripts so that they can be called as
+  Python modules from other scripts.
+
+  Fix bug so that TestRunners are now initialised using their worker
+  thread.
+
+  New property, grinder.duration, from Kalyanaraman Venkatasubramaniy.
+  This property allows an overall time limit to be set for worker
+  processes.
+
+  Be more agressive about interrupting workers. Thanks to Venkat for
+  the idea and  original implementation.
+
+  Incorporated feature matrix into documentation. Thanks to Edwin
+  DeSouza for his help with this.
+
+
+Grinder 3.0-beta10
+------------------
+
+  Fix saving of console data. (Bug 749461).
+
+
+Grinder 3.0-beta9
+-----------------
+
+  Incorporate HTTPClient HTTPS patch into main distribution. The Grinder
+  now *requires* the JSSE, so you must install it if you are using a
+  version of the J2SE earlier than 1.4.
+
+  Fix use of J2SE 1.4.1 Color constants. Should compile with J2SE 1.3.1
+  again. Thanks to Kumar Mettu for the report.
+
+  Minor fixes to how the HTTP Plugin TCPProxy filter parses content
+  length.
+
+  Minor fidling with timing.
+
+  Tutorial from Richard Perks.
+
+  Incorporate the jEdit Syntax package which will be used for
+  development of a console script editor. The basics of the editor are
+  there, but will not be functional until I've reworked the
+  communications layer to allow the script to be distributed.
+
+  The HTTP plugin now records the HTTP response status code to the
+  data log for HTTPRequests that are wrapped in Tests. If multiple
+  HTTPRequests are wrapped in a Test, the status code of the last
+  response is recorded. Thanks to Carlos Franco for the idea.
+
+  Incorporate patch from Bill Schnellinger: Fix
+  HTTPPluginTCPProxyFilter so that large data uploads (>1K) are stored
+  in separate data files rather than inlined in the script. This
+  should fix bug 702022.
+
+  Fulfil Feature Request 732676 raised by Bertrand Ave by adding a
+  "milliseconds since start" column to the data file.
+
+  French console translation from Bertrand Ave.
+
+  Example script that interprets an grinder.properties HTTP test
+  script for The Grinder 2.
+
+
+Grinder 3.0-beta8
+-----------------
+
+  Fix a bug in the TCPProxy which prevented the recording of 8-bit
+  POST data. Thanks to Joakim Suarez for the report.
+
+  The TCPProxy now copes with query strings and form data that are not
+  name value pairs. Thanks to Ryan Balsam for the report.
+
+  Tentative fix to bug 690639. (TCPProxy recorded HTTP script refers
+  to header array before declaration.)
+
+  Documentation updates. Correct JMS example scripts.
+
+  Spruce up console UI.
+
+  Allow the console to be optionally reset with the worker processes.
+  (Feature request 686632).
+
+
+Grinder 3.0-beta7
+-----------------
+
+  Fix synchronisation of the console new tests event which was causing
+  null pointer exceptions.
+
+  Fix synchronisation of TestStatisticsMap that caused potential data
+  loss and worker process stack traces.
+
+  Fix handling of thread shutdown exceptions. Threads again now
+  respond correctly to shutdown/reset requests.
+
+  Improve console handling of large numbers of tests.
+
+
+Grinder 3.0-beta6
+-----------------
+
+  Enhanced statistics API for scripts.
+
+  Documentation.
+
+  Source code clean up.
+
+
+Grinder 3.0-beta5
+-----------------
+
+  Expose script and document API to allow scripts to work with custom
+  statistics.
+
+  Rationalise the plugin API so that PluginProcessContext and
+  PluginThreadContext no longer extend Logger and FilenameFactory.
+
+  Add JMS examples.
+
+  Improve cleaning up of child processes when the agent is killed.
+
+  Some script documentation.
+
+
+Grinder 3.0-beta4
+-----------------
+
+  Correct implementation to read grinder.consolePort rather than
+  grinder.console.consolePort. Thanks to Dave Tauzell for the report.
+
+  Replace mandatory properties with reasonable defaults.
+
+  Fix HTTPPlugin static initialisation order so that script settings
+  are not overridden by default initialisation. Thanks to Mark Wilson
+  and Brett Schmoll for reports.
+
+  Script API to provide access to The Grinder build version -
+  net.grinder.common.GrinderBuild.
+
+  Script API to provide access to the HTTPClient connection context
+  for a thread -
+  net.grinder.plugin.http.HTTPPluginControl.getHTTPClientContext().
+
+  Script API to provide access to grinder.properties values -
+  net.grinder.script.ScriptContext.getProperties(). Thanks to Dave
+  Tauzell for feature request 672691.
+
+
+Grinder 3.0-beta3
+-----------------
+
+  Fix bug in wrapping code that broke the hello-world examples. Thanks
+  to Simon Cousins for finding this.
+
+
+Grinder 3.0-beta2
+-----------------
+
+  Improved exception handling and logging. Any exception thrown by a
+  wrapped test is recorded as an "error", if the script doesn't
+  catch the exception the run is aborted.
+
+  Jython instances can now be Test.wrap()'d.
+
+  First cut of HTTPPlugin TCPProxy filter.
+
+  HTTPRequest API now has overloaded GET and HEAD methods that take a
+  query string NVPair[].
+
+
+Grinder 3.0-beta1
+-----------------
+
+   Fix bug 608392 - console data file field separator conflicts with
+   localised decimal points. Fields are now tab separated. Thanks to
+   Martin Vilcans for the report.
+
+   Fix bug 631144 - worker processes sometimes fail to launch on real
+   operating systems. Thanks to Martin Voss for the report.
+
+
+Grinder 3.0-beta0
+-----------------
+
+   Jython meets The Grinder and the magic starts to happen.
+
+
+Grinder 2.8.6
+-------------
+
+   Fix bug 608392 - console data file field separator conflicts with
+   localised decimal points. Fields are now tab separated. Thanks to
+   Martin Vilcans for the report.
+
+   Fix bug 631144 - worker processes sometimes fail to launch on real
+   operating systems. Thanks to Martin Voss for the report.
+
+
+Grinder 2.8.5
+-------------
+
+   Fix TCPSniffer bug for non-proxy, non-ssl startup.
+
+
+Grinder 2.8.4
+-------------
+
+   Unified HTTP/HTTPS proxy.
+
+   Allow spaces in grinder.properies file names and host names.
+
+   Documentation on The Grinder vs LoadRunner courtesy of Tom
+   Braverman.
+
+   Spanish translation of the console from Jose Antonio Zapata Rey.
+
+
+Grinder 2.8.3
+-------------
+
+   String beans can now implement an interface that allows them to
+   access the HTTPClient HTTPResponse object. This means that
+   StringBeans can perform assertions on the HTTP response, and snarf
+   data from that response for use in subsequent requests.
+
+   The HTTP plugin is now relaxed when it finds a partial string bean
+   tag, it just outputs the literal text. This allows string bean tags
+   to be used within XML POST data.
+
+   Fix sleepTimeVariation documentation. Thanks to Mika Laitio for the
+   report.
+
+   Allow query strings to be passed with POSTs. Thanks to Kjetil JD
+   for the fix.
+
+   The TCP Sniffer parameters for passing keystore information have
+   changed, see doc/TCPSniffer.txt.
+
+   I've removed the TCP Sniffer URL rewriting filter; use -proxy
+   instead.
+
+   All of the TCP Sniffer engines have been reworked. This SSL proxy
+   engine is more efficient when making multiple requests. The TCP
+   Sniffer -proxy mode can now be used with any filter. The TCP
+   Sniffer should no longer spin CPU when idle.
+
+   Reworked HttpPluginSnifferFilter:
+  - Outputs a full usable test script.
+  - Copes with POST data split across TCP packets.
+  - Fixed bug where POST with multiple lines was read incorrectly,
+    this required moving to Jakarta ORO because Jakarta Regexp
+    bombed with a trivial regexp.
+  - Removed multipart form handling.
+  - Records 401 (authentication) exchanges.
+
+   (A note is necessary on the multipart form handling. The more I
+   looked at the existing support in the sniffer, the more dubious it
+   looked. Here's what the HTTP specification says on the subject:
+
+  "In general, HTTP treats a multipart message-body no
+  differently than any other media type: strictly as payload.
+  The one exception is the "multipart/byteranges" type ..."
+
+   This means that the sniffer should just chuck the data directly
+   into the POST file, which is what it now does. And no Cynthia, we
+   do not support multipart/byteranges.)
+
+   Support for disabling persistent connections with the HTTPClient
+   plugin courtesy of Todd Wasson.
+
+   Other miscellaneous fixes and documentation.
+
+
+Grinder 2.8.2
+-------------
+
+   The Grinder is now released under a BSD style license.
+
+   New UI showing worker process status from Dirk Feufel.
+
+   Fix console communication bug where socket reader threads would
+   sleep each time a dead socket handle was polled.
+
+   Fix SocketPlugin bug where multiple request files were incorrectly
+   handled. Thanks to Hussein Badakhchani for the report.
+
+
+Grinder 2.8.1
+-------------
+
+   Communication from the worker processes to the Console now uses a
+   unicast TCP connection. Multicast has been used here since the
+   beginning (it was cheap and cheerful to implement) but caused
+   several problems:
+  - Under heavy load, multicast packets are lost.
+  - I've had a report of multicast packets being duplicated.
+
+   Clearly neither of these are good for statistics reporting. Signals
+   from the Console to the worker processes still use multicast.
+
+   IMPORTANT: The communication properties have changed, you must set
+   the following in grinder.properties:
+
+  grinder.consoleAddress	(Address of machine running Console)
+  grinder.consolePort
+  grinder.grinderAddress	(Multicast address)
+  grinder.grinderPort
+
+   [grinder.consoleAddress is a new property. grinder.multicastAddress
+   and grinder.multicastPort have been renamed to
+   grinder.grinderAddress and grinder.grinderPort.]
+
+   You should make the corresponding changes in the Console options
+   dialog. Please refer to the README file for more details.
+
+   Fix the data file title line.
+
+   Reinstate the hack to prevent the HTTPClient from sending HTTP
+   trailers. Say -DHTTPClient.disableTrailers=true in your
+   grinder.jvm.arguments.
+
+
+Grinder 2.8
+-----------
+
+   New heavy iron statistics engine. Allows plugins to dynamically
+   add new statistics and derived statistic views.
+
+   As an example, I've used the new statistic engine to implement an
+   additional "mean time to first byte" for the HttpURLConnection
+   implementation of the HTTPPlugin. This replaces the old
+   "timeIncludesTransaction" parameter. Support for HTTPClient is
+   more involved and is slated for a future release.
+
+   Console "about" dialog.
+
+
+Grinder 2.7.2
+-------------
+
+   Console enhancements:
+    - Console no longer reads grinder.properties:
+    - New options dialog to set communication details.
+    - Console responds dynamically new tests registered by Grinder
+      processes.
+    - Can no longer set ignore samples to 0, doing this used to cause
+      incorrect triggering.
+    - Colour coded state label.
+
+   Miscellaneous engine enhancements:
+    - Sleeping processes can now be interrupted by the Console, so
+      they respond more quickly.
+    - Logging tweaks.
+    - Add dropped message detection to the communications.
+
+   HTTPPlugin enhancements:
+    - Filenames of result pages now contain test description.
+
+   More changes to the plugin API:
+    - A better fix for non-contiguous test numbers that doesn't
+      pollute the Test interface.
+    - Coallese processID and hostID into a single grinderID.
+    - Much repackaging and rationalisation. Plugins should only need
+      to use the "common" and "plugininterface" packages.
+
+
+Grinder 2.7.1
+-------------
+
+   Fix bug with non-contiguous test numbers.
+
+   Fix basic authentication bug.
+
+
+Grinder 2.7
+-------------
+
+  Console enhancements:
+   - All text is now read from Console.properties (think I18N).
+   - Highlight errors labels if errors > 0.
+   - Table view now has average TPS and peak TPS.
+   - Removed individual sample TPS labels.
+   - New last sample statistics tab.
+
+  Remove distinction between "abortions" and "errors" from the
+  recorded statistics. All tests now result in a "successful
+  transaction" or an "error".
+
+  Removed deprecated BookHttpPlugin example. Use StringBeans instead.
+
+  Minor changes to the plugin interface.
+
+  New HTTP plugin sniffer filter option, -initialTest.
+
+  HTTPPlugin enhancements
+   - Can now send arbitrary headers. Note, the specific
+     If-Modified-Since property has been removed, use the arbitrary
+     header support. The TCPSniffer filter has been updated
+     accordingly.
+   - Most request strings, including the arbitrary header values, are
+     now affected by the String Bean, see doc/HTTPPlugin.txt.
+   - HTTPClient is now the default implementation. The
+     timeIncludesTransaction parameter (which is ignored by the
+     HTTPClient implementation) now defaults to true.
+     HttpURLConnection support is deprecated and will be removed in a
+     future release. See doc/HTTPPlugin.txt for more information,
+     including notes on HTTPS support.
+
+  Features from Kalle Burbeck:
+   - HTTP plugin sniffer filter now has limited support for
+     multipart forms.
+   - HTTP plugin sniffer filter now generates test descriptions.
+
+  Features from Paddy Spencer:
+   - New "Sniff 'n' Grind" webapp (the management take no
+     responsibility for Paddy's sense of humour).
+
+   - Reworked HTTP proxy, added new HTTPS proxy
+
+   - TCPSniffer changes:
+     -timeout to set the proxy to timeout;
+     -localSSLPort for use with the HTTPS proxy;
+     -localHost for use with multiple local IP addresses;
+     doesn't barf if you set remote host/port with proxy;
+
+
+Grinder 2.6.5
+-------------
+
+  New tabbed Console layout.
+
+  Arm/stop is now a single Console control.
+
+  New "reset" Console control. This allows you to start a single
+  Grinder process per machine and control the whole show from the
+  Console.
+
+  New Console control for the number of significant figures to
+  display.
+
+  You can now save data from console.
+
+  HTTPClientHandler now supports multiple servers.
+
+  Graph colour is now based on response time.
+
+  Documentation fixes.
+
+
+Grinder 2.6.4
+-------------
+
+  Fix -colour.
+
+  Fix distribution: add HTTPClient classes to grinder.jar.
+
+  Patch HTTP to fix handling of query strings.
+
+  Fix: don't throw NPE when using HTTPClient to retrieve zero length
+  body response.
+
+  Make the console "ignore samples" and "collect samples" controls
+  text fields rather than sliders - allows big numbers for power
+  users.
+
+  Hack a switch onto HTTPClient to disable the use of
+  trailer-related headers, and use it in HTTPClientHandler. Better for
+  the less well-travelled server implementations.
+
+  Extra documentation. The changes to doc/Timing.txt are particular
+  worth a scan.
+
+
+Grinder 2.6.3
+-------------
+
+  New socket plugin from David Freels.
+
+  Console summary table now uses a JTable.
+
+  Fix to recording of short response times from Mikael Suokas.
+
+  Thread safety fix from Mikael Suokas.
+
+  Fix basic authentication property names. Thanks to Andrew
+  Sliwkowski for reporting this.
+
+  Added new file doc/Problems.txt to hold wisdom from Mikael Suokas.
+  Split the documentation of the plugins and the TCPSniffer into
+  separate files.
+
+  The HTTP plugin now has experimental support for Ronald Tschalär's
+  excellent HTTPClient library instead of HttpURLConnection.
+  HTTPClient has many more features than HttpURLConnection, see
+  http://www.innovation.ch/java/HTTPClient/urlcon_vs_httpclient.html
+  for a comparision. I hope to lever features such as proxy support,
+  connection timeouts and persistent cookies into future versions of
+  The Grinder. Unfortunately experimentation shows HTTPClient
+  sometimes does not perform well in a multithreaded environment. I'm
+  guessing this should be straightforward to fix. See the file
+  doc/HTTPPlugin.txt for details on how to turn on the HTTPClient
+  support.
+
+  The TCPSniffer echo filter now reports connection open and close
+  events.
+
+  The TCPSniffer now has a funky "-colour" option.
+
+
+Grinder 2.6.2
+-------------
+
+  Added support for HTTP basic authentication. You can now use two new
+  HTTP plugin test parameters, basicAuthenticationUser and
+  basicAuthenticationPassword, to specify the appropriate parameters
+  for each request. See README for details.
+
+  New HTTP plugin parameter: timeIncludesTransaction. By default the
+  time that the HTTP plugin reports is the time it takes for the
+  remote server to accept the connection request. When using the times
+  as an indicator of user experience, this is usually what you want.
+  Sometimes however you are more interested in the time the entire
+  HTTP transaction takes, including the time required to read the HTTP
+  response over the network. If so, set this parameter to true.
+
+  Removed property grinder.thread.beginCycleSleepTime, as its
+  redundant. (Use grinder.test0.sleepTime instead).
+
+  New property: grinder.thread.initialSleepTime. See README for
+  details.
+
+  When the property grinder.recordTime is false, the time is no longer
+  logged to the data file. (The prime purpose of recordTime is to
+  control whether times are _reported_ to the console, in fact times
+  are always recorded. This is too subtle for some users ;-) so I've
+  made this change for an easy life).
+
+  Reworked the logging code. The visible change is improved logging of
+  sub-process events to the controlling terminal.
+
+  Changed the sense of the "-norewriteURLs" TCPSniffer option to make
+  it "-rewriteURLs". Rewriting is no longer the default behaviour.
+
+
+Grinder 2.6.1
+-------------
+
+  Various tweaks to the timing code. The response times reported by
+  your test scripts will almost certainly be smaller and more correct
+  with this version. See doc/Timing.txt for information.
+
+  New property: grinder.recordTime. See the file doc/Timing.txt for
+  details.
+
+  New property: grinder.logProcessStreams. See README for details.
+
+  Handle multiple Set-Cookie headers, courtesy of Christian Nedregard.
+
+
+Grinder 2.6
+-----------
+
+  Console rework. Extra knobs and dials which allow the console to be
+  set to capture a certain number of samples - see README for details.
+  New average TPS reporting.
+
+  You can now use the Console to request that Grinder processes exit.
+  ** IMPORTANT** The property "grinder.waitForConsoleSignal" has been
+  renamed to "grinder.receiveConsoleSignals".
+
+  Cool HttpPluginSnifferFilter enhancements from Dr Paddy Spencer that
+  rewrite absolute URLs on the fly. This makes creating test scripts
+  for sites that use absolute URL's much less painful. The solution
+  includes a new way of running the sniffer by defining it as a proxy
+  to the browser. Paddy promises to document all of this RSN.
+
+  Several bug fixes including:
+   - Don't spin uselessly when not reporting to the console.
+   - Don't broadcast needless cruft in the statistics report messages.
+     (read: your network will no longer creak, this explains the need
+      to up the buffer in 2.5).
+   - Log directory is no longer mandatory.
+
+
+Grinder 2.5
+-----------
+
+  The HTTP plugin now supports "string beans". These allow URL's and
+  POST data to be easily parameterised.
+
+  I've up'ed the read buffer size to 64K to allow more test statistics
+  to be sent in a single multicast message. If this is too low you'll get
+  exceptions - either null pointer exceptions in the Receiver or
+  "can't bind to socket" exceptions in the Sender code. If any one is
+  still running into problems, please mail
+  grinder-use@lists.sourceforge.net.
+
+  JRun friendly patch from Stuart Tily.
+
+  Better socket handling for TCPSniffer from Phillip Burgess.
+
+
+Grinder 2.4
+-----------
+
+  The console UI has been slightly tidied up. Graphs are now
+  histograms.
+
+  The JUnit plugin should work again. It also has a new parameter
+  (logStackTraces) and improved logging.
+
+  You can now specify an explicit properties file to both the Grinder
+  and the Console as the first argument. For example:
+
+  java net.grinder.Grinder myproperties
+
+  Credit to Marc Stogner for this idea and initial implementaion.
+
+  (More version musings: The last version was _meant_ to named be 2.4,
+  not 2.3.2. According to my schem, increments the third number is
+  meant to be reserved for bug fix releases only. The new console
+  funtionallity really deserves something more significant. Rather
+  than rewriting history, I'm treating 2.3.2 as a "beta" of the
+  console functionality, and upping the second number here.)
+
+
+Grinder 2.3.2
+-------------
+
+  A shiny new console, with true TPS measurement.
+
+  New communciations layer.
+
+
+Grinder 2.3.1
+-------------
+
+  Even more bug fixes to the HTTP plugin. The cookie handling has been
+  reworked to more accurately reflect RFC 2109. Multiple cookies
+  should now work, with the exception that only one Set-Cookie header
+  is recognised per request. This is a limitation of the
+  java.net.HttpURLConnection class, which I will rant about at length
+  to anyone who asks.
+
+  The HTTP plugin parameter 'grinder.plugin.parameter.keepSession' has
+  been renamed to 'grinder.plugin.parameter.useCookies'.
+
+  The Grinder now has a logo, courtesy of Richard Wallace.
+
+
+Grinder 2.3
+-----------
+
+  A HTTP plugin bug fix release. See the ChangeLog for details.
+
+
+Grinder 2.2
+-----------
+
+  The promised JUnit plugin is here! See README for more information.
+
+  I've introduced the concept of a TestSetPlugin that defines the set
+  of tests to perform. This is primarily to support the JUnit plugin.
+
+  Bug fix to SSLSnifferEngine from Paddy Spencer. (You're first name
+  doesn't _have_ to begin with 'P' to get into AUTHORS, but it helps
+  :-)).
+
+  More tweaks to the logging and terminal output.
+
+  The Console _should_ work again. Can't verify this as multicast is
+  currently not working on my machine.
+
+
+Grinder 2.1
+-----------
+
+  The plugin interface now has a single "doTest" dispatch interface
+  instead of using reflection. This simplifies the writing of generic
+  plugins. The "grinder.methods" property has been removed. Instead
+  tests are specified by a number of "grinder.testX" properties (where
+  test is any number). See README for details.
+
+  [Support for testing classes using reflection will be provided by a
+  JUnit plugin which will come in 2.2].
+
+  The "initial sleep time" has been removed, a "begin cycle sleep
+  time" has been added in its place. Individual method sleep times can
+  now be specified. All sleep times are now randomly varied according
+  to a Normal distribution. See README for details.
+
+  The HttpPlugin now supports an "ifModifiedSince" parameter. This
+  translates to the HTTP "If-Modified-Since" request header. This
+  allows the grinder to simulate the mechanism browsers use to check
+  for cached pages.
+
+  The HttpPluginSnifferFilter has been updated to record sleep times,
+  If-Modified-Since headers, and reflect the property format changes.
+
+  The logging of the HTTP plugin has been improved.
+
+  The output and error log format is now more useful. There was no
+  point in displaying the host and process for each line (each process
+  gets its own output file). I've added the current cycle and test
+  number instead.
+
+  I've removed the "simple" and "ejb" plugins as they are not useful
+  in their own right and I got fed up of maintaining them. Both would
+  be best addressed using the planned JUnit plugin. Examples will come
+  with Grinder 2.2.
+
+  We have our first JUnit test case. We need more.
+
+  The TCPSniffer is now silent about SocketExceptions.
+
+  Renamed "GrinderContext" to more correct "PluginContext". Renamed
+  "method" to "test" throughout.
+
+
+Grinder 2.0
+-----------
+
+  "Huh - what happened to the version numbers?": This release of the
+  Grinder should be published on http://developer.bea.com/ and its
+  logically a "1.0" release. However, Paco's original was released as
+  1.6 and I don't want to confuse the public too much as to the latest
+  and greatest.
+
+
+  New TCPSniffer - the SnifferServlets are dead! (Big thanks to Phil
+  Dawes for the sweat behind this).
+
+
+  The HTTP plugin now automatically follows redirects only if you
+  set the property
+
+  grinder.plugin.parameter.followRedirects=true
+
+  See the README file for details.
+
+
+  The build auto-detects what modules to build by checking your
+  classpath for classes the module depends on. You may have to unset
+  your classpath if this doesn't do what you want. Currently the
+  conditionally built modules are:
+
+   HTTP SSL plugin (Needs the JSSE)
+   TCPSniffer SSL engine (Needs the JSSE)
+   TCPSniffer HTTP plugin filter (Needs Apache Jakarta Regexp)
+   WebLogic Server 5.1 Trader EJB plugin (needs WLS Trader EJB)
+
+
+  Fixed a bug that caused the thread ID to be displayed incorrectly.
+
+
+  I've added a wrapper class for the Console to the net.grinder
+  package. You should now use "java net.grinder.Console" instead of
+  "java net.grinder.console.Console". All future "main" classes will
+  belong to this package.
+
+
+Grinder 0.9
+-----------
+
+  I've finally got rid of PropsLoader. This entails a few changes to
+  properties:
+
+    grinder.jvm.path	-	Specifies the java executable used for
+        the child JVMs. Defaults to "java" so
+        you do not need to specify this if
+        your path is sensible.
+
+    grinder.jvm.classpath -	Use to adjust the classpath used for
+        the child VMs. Anything specified here
+        will be prepended to the classpath
+        used to start the grinder itself.
+
+    grinder.jvm.arguments -	Additional arguments to child JVM's.
+
+
+  Additionally, grinder.properties does not have to be in your
+  classpath anymore. (I know I said this before - I mean it this
+  time).
+
+  PeterZ found the data file title line useful so I've reinstated it.
+
+  I'm now using Ant 1.2 as the build engine, and have decided to
+  remove Ant from the distrubution. See the build.xml file for more
+  information.
+
+
+Grinder 0.8
+-----------
+
+  HTTPS support from Phil Dawes.
+
+  HTTP 302/307 handling from Phil Dawes.

Added: geronimo/sandbox/failover/grinder-3.0.1/LICENSE
URL: http://svn.apache.org/viewvc/geronimo/sandbox/failover/grinder-3.0.1/LICENSE?rev=700238&view=auto
==============================================================================
--- geronimo/sandbox/failover/grinder-3.0.1/LICENSE (added)
+++ geronimo/sandbox/failover/grinder-3.0.1/LICENSE Mon Sep 29 13:19:05 2008
@@ -0,0 +1,91 @@
+The Grinder
+Copyright (c) 2000 Paco Gomez
+Copyright (c) 2000-2008 Philip Aston
+All rights reserved.
+
+Additional contributions have been made by individuals listed in the
+AUTHORS file supplied with this distribution. Each individual's claim
+to copyright is asserted in the files to which they contributed.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the names of the copyright holders nor the names of the
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+
+The Grinder includes Ronald Tschalär's HTTPClient library
+(http://www.innovation.ch/java/HTTPClient/index.html). The HTTPClient
+library is distributed under the GNU Lesser Public License. Under the
+term 6 of the GNU Lesser Public License, The Grinder is a "work that
+uses the Library". See the file LICENSE-HTTPClient for license and
+copyright details.
+
+The Grinder includes the software Jython, created by Jim Hugunin,
+Barry Warsaw and the Jython team (http://www.jython.org/). See the
+file LICENSE-Jython for license and copyright details.
+
+The Grinder includes the jEdit Syntax highlighting package
+(http://syntax.jedit.org/). See the file LICENSE-jEditSyntax for
+license and copyright details.
+
+The Grinder includes Apache XMLBeans (http://xmlbeans.apache.org),
+under the terms of the Apache Software License Version 2.0.
+
+   =========================================================================
+   ==  NOTICE file corresponding to section 4(d) of the Apache License,   ==
+   ==  Version 2.0, in this case for the Apache XmlBeans distribution.    ==
+   =========================================================================
+
+   This product includes software developed by
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Portions of this software were originally based on the following:
+     - software copyright (c) 2000-2003, BEA Systems,
+     <http://www.bea.com/>.
+
+   Aside from contributions to the Apache XMLBeans project, this
+   software also includes:
+
+    - one or more source files from the Apache Xerces-J and Apache
+      Axis products, Copyright (c) 1999-2003 Apache Software
+      Foundation
+
+    - W3C XML Schema documents Copyright 2001-2003 (c) World Wide Web
+      Consortium (Massachusetts Institute of Technology, European
+      Research Consortium for Informatics and Mathematics, Keio
+      University)
+
+    - Piccolo XML Parser for Java from http://piccolo.sourceforge.net/,
+      Copyright 2002 Yuval Oren under the terms of the Apache Software
+      License 2.0
+
+    - JSR-173 Streaming API for XML from
+      http://sourceforge.net/projects/xmlpullparser/,
+      Copyright 2005 BEA under the terms of the Apache Software
+      License 2.0
+
+The Grinder includes PicoContainer
+(http://picocontainer.codehaus.org/). See the file
+LICENSE-PicoContainer for license and copyright details.



Re: svn commit: r700238 [1/4] - in /geronimo/sandbox/failover: ./ grinder-3.0.1/ grinder-3.0.1/bin/ grinder-3.0.1/contrib/ grinder-3.0.1/contrib/mq/ grinder-3.0.1/etc/ grinder-3.0.1/examples/ grinder-3.0.1/examples/.grinder/ grinder-3.0.1/lib/ grinder-3.0....

Posted by Kevan Miller <ke...@gmail.com>.
On Sep 29, 2008, at 4:19 PM, dblevins@apache.org wrote:

> Author: dblevins
> Date: Mon Sep 29 13:19:05 2008
> New Revision: 700238
>
> URL: http://svn.apache.org/viewvc?rev=700238&view=rev
> Log:
> First ref of the failover sample
>
> Added:
>    geronimo/sandbox/failover/README.txt
>    geronimo/sandbox/failover/cycleservers.sh   (with props)
>    geronimo/sandbox/failover/deploy.sh   (with props)
>    geronimo/sandbox/failover/grinder-3.0.1/
>    geronimo/sandbox/failover/grinder-3.0.1/AUTHORS
>    geronimo/sandbox/failover/grinder-3.0.1/CHANGES
>    geronimo/sandbox/failover/grinder-3.0.1/LICENSE
>    geronimo/sandbox/failover/grinder-3.0.1/LICENSE-HTTPClient
>    geronimo/sandbox/failover/grinder-3.0.1/LICENSE-Jython
>    geronimo/sandbox/failover/grinder-3.0.1/LICENSE-PicoContainer
>    geronimo/sandbox/failover/grinder-3.0.1/LICENSE-jEditSyntax

David Blevins,
Unfortunately, looks like Grinder contains HTTPCLIENT which is LGPL  
licensed. So, Growler is not something we can maintain in svn. Seems  
like we can document how to download and install growler for use by  
the demo.

This demo is great!

--kevan