wrapper 

File Info

Rev. 170
Size 186,621 bytes
Time 2012-02-17 15:04:16
Author mortenson
Log Message

Add a new _WRAPPER_CONF_OVERRIDE setting to stop the batch files expecting an alternate configuration file as the first argument to the batch files.

Content

   1: Java Service Wrapper Revision History.
   2: --------------------------------------
   3: 
   4: 3.5.15
   5: * Add a new _WRAPPER_CONF_OVERRIDE setting to the Wrapper dedicated command
   6:   batch files on Windows so it is now possible to control whether or not the
   7:   first parameter is the configuration file name.  The ability to specify an
   8:   alternate configuration file is now disabled by default as it was confusing
   9:   for users who tried to pass other parameters to the JVM.
  10: 
  11: 3.5.14
  12: * Fix a problem in the AppCommand.bat.in file where a parenthesis in the
  13:   file name of the Wrapper binary would have caused a 
  14:   "PATH was unexpected at this time" error.
  15: * (Standard, Professional) Fix a problem when using a localized version of
  16:   the Wrapper on Windows 64-bit platforms where the Wrapper would continue
  17:   to use the default system language even wrapper.lang was used to specify
  18:   a different language.  Introduced in 3.5.12.
  19: * Fix a problem in the Windows AppCommand.bat.in command based batch file
  20:   where the 'status' command was incorrectly being reported as 'query' in the
  21:   usage output.  The 'status' command had always worked correctly if used.
  22: * Fix a problem on UNIX platforms where some asynchronous messages were
  23:   causing a warning message "Coding Error..." to be logged in place of the
  24:   intended message.  This could be seen if the configured log file did not
  25:   have write permissions.  Other than the incorrect log message, the Wrapper
  26:   worked correctly.  Introduced in 3.5.2.
  27: * Fix a problem in the UNIX script where running with upstart wasn't working
  28:   correctly when RUN_AS_USER was set.
  29: * Relax security checks when running the 'status' command against the UNIX
  30:   shell script so it now allows any user running the script to perform the
  31:   read-only check of the pid file.
  32: * Fix a problem with the UNIX script where the 'remove' command was trying to
  33:   stop a running application even when the application had not been installed.
  34: * Fix a buffer overflow which could potentially cause a crash during the
  35:   installation of a Windows Service when wrapper.ntservice.account was
  36:   specified.  This was introduced in 3.5.12.
  37: * Fix a heap corruption which could occur on startup and potentially cause a
  38:   crash. Only Windows systems, which use the System Event logs, were affected.
  39:   Discovered from a code review, there had never been any reports of this
  40:   causing problems for users.  This could happen if the configured wrapper.log
  41:   could not be written to as the Wrapper always tries to write to the Event
  42:   Log in such cases.  Introduced in 3.5.12.
  43: * Add a new version comparison between the UNIX shell script and Wrapper to
  44:   start showing a warning in case of a version mismatch.  The check will only
  45:   work if the shell script and Wrapper are each of at least version 3.5.14.
  46: * Added a new wrapper.pidfile.strict property which will tell the Wrapper not
  47:   to start if the pid file already existed.  Defaults to false for backwards
  48:   compatibility.
  49: * Make the Java side of the backend socket more resilient in case of a read
  50:   or write timeout.  The backend socket does not have a timeout set by default
  51:   so this should not have been an issue.  A couple users reported problems on
  52:   specific systems however which led to this fix.
  53: * To aid in the testing of the backend socket timeout, a new
  54:   wrapper.backend.so_timeout system property was added to make it possible to
  55:   configure the backend socket to use a timeout.  See the Javadocs of the
  56:   WrapperManager class for details.
  57: 
  58: 3.5.13
  59: * Fix a typo in the script where the environment variable 'TR_BIN' should 
  60:   actually be 'TREXE'.  This was causing the "install" command on UNIX
  61:   platforms to fail.   Introduced in 3.5.12.
  62: * Fix a heap corruption which could lead to a crash that would occur the
  63:   second time an internal buffer used for logging was expanded.  The buffer
  64:   would be expanded the first time a log line over 2048 characters in length
  65:   was encountered.   Then the second expansion would happen when a line at
  66:   least 1024 characters longer was encountered.  Introduced in 3.5.11.
  67:   Bug ID #3423108
  68: 
  69: 3.5.12
  70: * Put more descriptive Text in case the Wrapper is using integration method 4, 
  71:   but the jar file deos not specify the Main-Class correctly in its meta 
  72:   information.
  73: * Fix a bug when failing to grant the LogOnAsService permission to a domain
  74:   user.
  75: * Fix a bug where the ident for the syslog on Unix platforms was broken since 
  76:   3.5.0.  This was because when opening the syslog, the Wrapper was freeing the
  77:   memory for pointing to ident. However the string pointer ident will be
  78:   retained internally by the Syslog routines. And must not free the memory that
  79:   ident points to.  Bug #3404978.
  80: * Add a check on the script to make sure the 'tr' command exists on Unix
  81:   platforms.
  82: * Improve the parsing of log formats so that format tokens are recocognized
  83:   even if they are lower case.  This affects the wrapper.console.format,
  84:   wrapper.event.default.email.maillog.format, wrapper.logdialog.format, and
  85:   wrapper.logfile.format properties.
  86: * The Wrapper parses log formats by looking for known tokens, any invalid
  87:   tokens are simply ignored.  If the entire format is made up of invalid tokens
  88:   then this resulted in the Wrapper logging an empty line, which was not very
  89:   useful and caused confusion when encountered.  The Wrapper now reverts to the
  90:   default log format in such cases.  This affects the wrapper.console.format,
  91:   wrapper.event.default.email.maillog.format, wrapper.logdialog.format, and
  92:   wrapper.logfile.format properties.
  93: * Improve the debug output while loading native libraries to avoid confusion
  94:   about the meaning of the warning logged about attempts to load alternately
  95:   named native library files.
  96: * Fix a problem on Unix platforms where the default umask was being set to 0000
  97:   rather than inheriting it from the parent process when running as a daemon
  98:   process.  This can be a security problem as log and other files have global
  99:   read/write access.  Introduced in 3.5.8.  Can be worked around by setting
 100:   the wrapper.umask property to a safe value.
 101: 
 102: 3.5.11
 103: * Fix a potential crash on Windows caused by a buffer overflow.  This has been
 104:   a problem since version 3.5.0 and affects configurations which define more
 105:   than one wrapper.ntservice.dependency.<n>.  Depending on what was in memory,
 106:   this did not always result in a crash.  It has very reproducible behavior for
 107:   a given configuration file.
 108: * Fix a problem on Windows where the Wrapper was taking 15 seconds or longer to
 109:   startup on some systems because the WinVerifyTrust system call was having
 110:   problems updating the CRL.  This had been a problem since the Wrapper
 111:   binaries started being signed in version 3.5.7.  If the WinVerifyTrust call
 112:   takes longer than the configured wrapper.startup_thread.timeout then the
 113:   Wrapper will continue to startup without further delay.
 114: * (Standard, Professional) Explicitly remove the certificate of the customized
 115:   binary during customization. There were problems resigning the binary with
 116:   another certificate otherwise.
 117: * If the Wrapper is unable to write to the configured wrapper.logfile for any
 118:   reason then we always fall back to a default log file and then log a message
 119:   about the failure.  If the default also fails then that is also logged but
 120:   the messages would only be logged to the console in most cases.  Modify the
 121:   Wrapper so we now always send both messages to the syslog or EventLog
 122:   regardless of what the wrapper.syslog.loglevel is set to.  This is important
 123:   to help track down the cause of logfile access problems.
 124: * Starting with version 3.5.0, it was internally possible to print out
 125:   multi-line log messages so that all of the lines would always be grouped
 126:   together in the log file.  This version modifies the logging code slightly so
 127:   that such multi-line log output is now logged as a single message in the UNIX
 128:   sylog or Windows EventLog.
 129: * Fix a problem where very long lines of output from the JVM would cause the
 130:   Wrapper to appear to hang for a while.  The first time a single line of
 131:   output containing several hundred thousand characters was logged, an internal
 132:   buffer was being incrementally increased by 100 characters per cycle.  The
 133:   Wrapper now increases the size based on last known size to greatly reduce the
 134:   number of cycles needed to choose a new buffer size.
 135: * Modify the PAUSE_THREAD command so it is now possible to wait indefinitely.
 136:   Only useful for testing the Wrapper.
 137: * Add a new PAUSE_LOGGER command to make it possible to pause the next log
 138:   entry.  Only useful for testing the Wrapper.
 139: * On UNIX, the stdout/stderr pipe between the JVM and Wrapper was not being
 140:   cleaned up correctly.  This resulted in a small leak but was otherwise
 141:   harmless.  The pipes are now cleaned up and initialized for each JVM
 142:   instance.
 143: * Fix a problem where the Wrapper could fail to restart the JVM when the
 144:   restart request originated in the JVM if the system was experiencing very
 145:   heavy IO resulting in long disk IO queues.   This was causing the Wrapper's
 146:   main loop to block on the write and miss the restart request, causing the
 147:   Wrapper to shutdown rather than restart.  This could affect all platforms.
 148:   On Windows, it could also be reproduced by making a selection in the console
 149:   to freeze output and then making a request from within the JVM to restart.
 150: * Add a new WrapperPropertyUtil helper class to make it easer to access Wrapper
 151:   property values from within the JVM.
 152: * Fix a bug on some platforms where java log output could get corrupted due to
 153:   misuse of a strncpy system function.  This function warns that some
 154:   implementations do not support overlapping memory copies.  The problem could
 155:   only be reproduced on a single Linux test machine in lines following an empty
 156:   line of output.  This problem has existed since 3.4.0.
 157: 
 158: 3.5.10
 159: * Setting wrapper.jvm.port to '0' (zero) will make the JVM to assign an 
 160:   available port for the backend socket by itself.
 161: * Add warnings in the log file if an integer configuration property value
 162:   contains a non-numerical value.  Previously, the Wrapper would silently
 163:   ignore the problem and use the value of 0 if the number started with an
 164:   invalid character, it will now return the default value.  If the property
 165:   value started with valid numerical characters then those were, and still will
 166:   be, used to generate a value, but the invalid characters will be trimmed.
 167:   The later is being kept this way to avoid breaking old configurations.
 168: * Add warnings in the log file if a boolean configuration property has any
 169:   value other than TRUE or FALSE.  It will still return a value of FALSE
 170:   for other values to avoid breaking old configurations.
 171: * Add a warning if an invalid value is specified for the wrapper.on_exit.<n>
 172:   property.
 173: * Add a new wrapper.log.lf_delay.threshold property which makes it possible
 174:   to control how long a partial line of Java log output will be allowed to be
 175:   buffered until it is completed with a line feed.  If the threshold is
 176:   exceeded then the partial line will be logged as a full line resulting in an
 177:   extra line feed in the log output.  All previous versions would do this
 178:   within 1-2 ms.  The default is now 500ms.
 179: * (Standard, Professional) Make it possible to customize the manufacturer
 180:   through the customize options.
 181: * (Professional) Fix a problem where the Wrapper was sending a CTRL-BREAK
 182:   rather than a CTRL-C signal to child processes launched with
 183:   WrapperManager.exec when destroying them on Windows.  For most child
 184:   processes this was not a problem, but if the direct child process was a JVM
 185:   then the CTRL-BREAK was triggering a thread dump rather than asking the JVM
 186:   to exit.  The Wrapper was then timing out and forcibly killing the JVM child
 187:   process.
 188: * (Standard, Professional) Fixed a bug, where the timezone ICT when set by
 189:   the wrapper.timezone property got misinterpreted as IST.
 190: * (Standard, Professional) Fixed a problem where the UTC offset value in the 
 191:   wrapper.timezone property was not being parsed correctly on UNIX platforms.
 192:   This led to the Wrapper to using an offset UTC0000.
 193: * Take out the warning about unset LANG environment variable on Linux and 
 194:   AIX systems.  On system startup, some systems fail to set the LANG
 195:   environment variable.  This is not really a problem for the Wrapper and the
 196:   warning was causing confusion for users so we decided to remove it.
 197: 
 198: 3.5.9
 199: * (Standard, Professional) Fix a problem on Windows where network adapters
 200:   whose names contained "PRO/1000" were being removed from the list of hostids
 201:   displayed when "wrapper.exe -h" was run.  This did not affect existing server
 202:   license key files generated for hostIds reported by 3.5.7 or earlier, or
 203:   development license keys.  But it did cause the Wrapper to report that no
 204:   valid hostIds could be found when the Wrapper was started without a license
 205:   file.  This was caused by some test code added in 3.5.8 that we failed to
 206:   remove.
 207: * Fix a problem where the Wrapper was not correctly yielding control back to
 208:   its main loop when very large amounts of continuous output was being logged
 209:   from the JVM.  Introduced in version 3.4.0.  In versions prior to 3.5.8, this
 210:   could have caused the JVM to timeout and restart itself.  That particular
 211:   issue was resolved but the Wrapper process in 3.5.8 would still have been
 212:   unresponsive when this was happening.  The Wrapper will now always yeild back
 213:   to its main loop after 250 milliseconds of continuous logging.
 214: * Fix a problem where the WrapperManager could block trying write debug output
 215:   if the current user application was writing very large amounts of output to
 216:   the console as well.  In extreme circumstances this led to the Wrapper
 217:   thinking that the JVM was frozen.  This was only an issue if debug output was
 218:   enabled.
 219: * Restructured the shell script so all editions now use the same script again.
 220: 
 221: 3.5.8
 222: * (Standard, Professional) Starting with version 3.5.5, we invalidated the use
 223:   of all 00ff* hostids on Windows to avoid problems with changing hostids when
 224:   users have a Juniper Network Connect network adapter on their system.  This
 225:   turned out to be too restrictive as Guest OSs running under Parallels also
 226:   make use of this hostid range.  The Wrapper is now more careful to only
 227:   invalidate actual Juniper Network Connect hostids.
 228: * (Standard, Professional) Improve the message shown to the user when the
 229:   Wrapper is unable to locate any hostids for a system.
 230: * Fixed a problem with the wrapper script on Solaris, where the option -F was
 231:   not available for grep.
 232: * Added Windows version information on the wrapper debug output.
 233: * Added a wrapper.log.warning.threshold property which makes the Wrapper show
 234:   a warning whenever it detects that the Wrapper took a long time to record a
 235:   log message.  This was added to test a reported issue caused by slow IO on
 236:   very heavily loaded systems.
 237: * Fix a problem where a filter that requested the JVM to restart would be
 238:   ignored if the JVM exited on its own immediately.  The Wrapper is now more
 239:   consistent so that restart requests from within the JVM or filters will
 240:   always take priority over such exit requests.  External shutdown requests, or
 241:   those from other actions will still behave as they did in the past and
 242:   continue to shutdown the Wrapper.  The Wrapper also logs messages in debug
 243:   output if an outstanding restart request is being preserved or ignored.
 244: * Fixed a problem in the AppCommand.bat batch file which could occur on some
 245:   Windows platforms with certain multi-byte system encodings. The script has
 246:   been rewritten and questionable parts have been simplified. The functionality
 247:   of the script has been preserved.
 248: * Added the environment variable WRAPPER_CONF_DIR, which can be used for 
 249:   the configuration properties.  Feature Request #3160644.
 250: * Made the script exit with the right exit code received when running the
 251:   script as different user, specified in RUN_AS_USER.  Bug #3185281.
 252: * Fix an access violation which could happen when reporting that the code
 253:   signing certificate has failed to been verified.
 254: * Log an error if the backend socket is forcibly closed externally.  It had
 255:   been getting logged at a debug log level.  The message is "An existing
 256:   connection was forcibly closed by the remote host. (0x2746)".  Because the
 257:   message was only logged if debug output was enabled, the JVM would be
 258:   restarted with no clear explanation as to what happened.  The source of the
 259:   socket closure is under investigation.
 260: * (Professional) Added the Java call fireUserEvent to the WrapperManager API.
 261:   This enables to fire user event mails, actions without the filter trigger.
 262: * Fix a warning on Mac versions if the configured java command was not a
 263:   universal binary.  A check was added in 3.4.0 to make sure that the
 264:   wrapper.java.command pointed directly to an executable to avoid unexpected
 265:   behavior when running a script.  The message is only a warning and the
 266:   Wrapper continues regardless.  Standard ppc, ppc_64, x86_64, i386, as well
 267:   as the universal binaries will now all work correctly without a warning.
 268: * The default value of the wrapper.*.umask properties is using the current
 269:   umask the process has. Before the default value was always 0022.
 270: * Add a new wrapper.backend.type property that is used to control whether the
 271:   Wrapper communicates with the JVM using the traditional "SOCKET" or new
 272:   experimental "PIPE".  This was added as a workaround to a rare problem where
 273:   some Windows machines are closing the socket at an OS level.  This was only
 274:   ever seen on Windows 2003, but could exist on other Windows versions as well.
 275: * Add a new experimental wrapper.use_javaio_thread property which causes the
 276:   Wrapper to handle all java console output in a dedicated thread.
 277: * Add a new WrapperManager.isNativeLibraryOk() method which lets user code
 278:   easily test whether or not the native library was loaded and initialized on
 279:   startup.
 280: * Add a new PAUSE_THREAD command to the wrapper.commandfile property which
 281:   makes it possible to test how the Wrapper behaves when various threads block
 282:   or freeze.  This was used to simulate and reproduce issues on heavily IO
 283:   bound servers.
 284: * Improve the way the Java side of the Wrapper behaves when the Wrapper fails
 285:   to ping the JVM for an extended period of time.  The JVM used to exit to let
 286:   itself resync itself with the JVM.  This was causing problems on systems
 287:   which were heavily IO bound because the Wrapper could block for a while while
 288:   trying to write to the log file and the JVM was exiting.  The JVM will now
 289:   never exit under such circumstances.  The JVM will never become orphaned
 290:   because it will still exit almost immediately if the backend socket or pipe
 291:   with the Wrapper is ever closed.
 292: * Deprecate the WrapperManager.appearOrphan() method as it is used to simulate
 293:   a failure mode which is no longer possible with the Wrapper.
 294: * Changed the way the Wrapper is handling certificate errors regarding the 
 295:   code signing/timestamping certificate. The Wrapper will now only shutdown 
 296:   itself if the signature of the binary was not successfully verified because 
 297:   the binary or signature has been malformed but not if any problem with 
 298:   the counter-signer has been found.  Starting with 3.5.7, the Windows Wrapper
 299:   binaries are signed.  Some users with locked down Windows 2008 systems had
 300:   problems with the Wrapper refusing to start because the Comodo certificate
 301:   had been disabled on their system.
 302: * Add a new wrapper.java.detach_started property which makes it possible to use
 303:   the Wrapper as a simple tool to launch Java applications.  When enabled, the
 304:   Wrapper terminates immediately and the JVM is left to run on its own.  Also
 305:   add new wrapper.java.outfile and wrapper.java.errfile properties which make
 306:   it possible to redirect the stdout and stderr of the JVM to files when
 307:   detached.
 308: * When running the Wrapper as a specified User Account, through the 
 309:   wrapper.ntservice.account property, the Wrapper will add permission for the
 310:   account to log on as service automatically upon install.  Feature Request
 311:   #3286491.
 312: * Fixed a problem binding the backend socket on Windows. If another process 
 313:   bound a port inside the wrapper.port.min and wrapper.port.max range using the
 314:   SO_EXCLUSIVEADDRUSE option, the Wrapper would stop at this port report 
 315:   an Access Permission problem and omits binding any further port in the range.
 316:   This problem existed ever since the Wrapper was released.
 317: 
 318: 3.5.7
 319: * Changed the way the script is installing the daemon gets installed on an AIX
 320:   system. The script now uses inittab & SRC.
 321: * Fix a problem in the shell script that was preventing the script from
 322:   starting the Wrapper correctly if a file or directory existed in the current
 323:   working directory which was one character in length.  This was only a problem
 324:   when the delta-pack naming of the Wrapper was used.  This was easy to
 325:   reproduce on AIX systems on system restart because a "u" directory exists in
 326:   the root directory by default.  This had been a problem since 3.4.0 when
 327:   it was introduced as a fix to a Solaris problem.  The root cause was a
 328:   missing set of quotes in the tr command.
 329: * Fix a problem in the shell script that was preventing the script from finding
 330:   the running wrapper process when it was started when the working directory
 331:   was in the same directory as the wrapper binary, but queried later from
 332:   another location.  It would also fail if it was started from another
 333:   location, but then queried from the location of the Wrapper.  This was
 334:   introduced in version 3.5.6 when the script stopped changing the working
 335:   directory in the script.
 336: * Add a new GC action that will cause the JVM to immediately perform a full
 337:   garbage collection sweep.  See the wrapper.commandfile,
 338:   wrapper.filter.action.<n>, wrapper.check.deadlock.action, and
 339:   wrapper.timer.<n>.action properties for details.
 340: * (Professional) Modify the wrapper.event.<event_name>.command.block.action
 341:   property slightly so it will now correctly warn if an unknown action is
 342:   encountered.  It had been defaulting to CONTINUE silently.
 343: * Modify the timing of the message shown when an #encoding directive is missing
 344:   from the top of a configuration file.  It was only being logged if debug
 345:   output was enabled.  It will now also be logged if the #include.debug
 346:   directive is specified.
 347: * Fix the indentation of warning messages about encoding or include problems in
 348:   configuration files.
 349: * (Standard, Professional) Fix a problem where include file problems could
 350:   cause the shell script to have errors due to invalid translated output from
 351:   the Wrapper.
 352: * Add a warning when the maximum include depth is reached and include debugging
 353:   is enabled.  The Wrapper had always just silently skipped the include.
 354: * Fix a problem where #include.required directive was not correctly preventing
 355:   startup if the include file was missing but the required include was in a
 356:   nested include.
 357: * Fix a problem where the cause of some fatal include problems were not being
 358:   logged correctly, resulting in a simple, non-informative message only that
 359:   the configuration file failed to be loaded.  This was a problem since 3.5.5.
 360: * Fix a Windows problem where the Wrapper could fail to start as a service if a
 361:   defined environment variable would expand to a length larger than the 32k
 362:   limit specified in the ExpandEnvironmentStrings system function.  This was a
 363:   problem on all Windows platforms prior to version 3.5.5, but only on Windows
 364:   2000 since then, when the code used to reload the environment from the
 365:   registry was disabled for newer versions of Windows.  We now simply skip the
 366:   expansion of the problem variable and continue with a warning.  Bug #3103776.
 367: * Add a set of optional system properties that the WrapperSimpleApp,
 368:   WrapperStartStopApp, and WrapperJarApp helper classes are aware of to tell
 369:   them to ignore uncaught exceptions thrown within the main methods of the user
 370:   application.  The exceptions will still be logged, but they can now be
 371:   configured so that the main method is just allowed to end without causing the
 372:   Wrapper to shutdown in an error state.  Java on its own will stay running in
 373:   such a case as long as it has launched at least one non-daemon thread prior
 374:   to the uncaught exception being thrown.  This does not affect most users, but
 375:   an application was found that was having problems because of this difference
 376:   in behavior.  See the javadocs of the helper classes for details.
 377: * (Professional) Fix a problem when looking for the correct exit code to use
 378:   for the wrapper.event.<event_name>.command.on_exit.<n> property.  The Wrapper
 379:   now searches for a value as follows:
 380:   wrapper.event.<event_name>.command.on_exit.<n>,
 381:   wrapper.event.<event_name>.command.on_exit.default,
 382:   wrapper.event.default.command.on_exit.<n>, then
 383:   wrapper.event.default.command.on_exit.default.  The third pattern had been
 384:   getting skipped in previous versions since it was added in version 3.3.0.
 385: * (Professional) Add logic to report a warning if an unexpected value is
 386:   specified for the wrapper.event.<event_name>.command.on_exit.<n> or
 387:   wrapper.event.<event_name>.command.block.action properties.
 388: * (Professional) Clean up the message log levels so the output is as expected
 389:   when using the wrapper.event.<event_name>.command.loglevel property.
 390: * (Professional) Improve the wrapper.event.<event_name>.command.on_exit.<n>
 391:   property so the configured action will now work even if the command exits
 392:   after the block time out has expired.  In previous versions, there was no
 393:   way to make the Wrapper do anything other than continue.
 394: * (Professional) Fix a problem where the Wrapper was failing to detect a JVM
 395:   exit correctly if an event command had been fired first.  The only problem
 396:   was that the Wrapper was always reporting a JVM exit code of 0 rather than
 397:   the actual exit code.
 398: * Fix a buffer overflow on Windows when either installing as a service, or
 399:   updating an existing service.  The problem only occurred when properties
 400:   containing spaces, or Java passthrough arguments containing spaces were
 401:   specified on the command line.  The running service did not have any
 402:   problems.  This was introduced in 3.5.0.
 403: * (Standard, Professional) Improve the error message logged when an unlicensed
 404:   version of the Wrapper's native library is used.
 405: * (Standard, Professional) Fix a buffer overflow problem on Windows when
 406:   creating a customized Wrapper binary if the target binary name did not
 407:   include the ".exe" extension.  This problem existed since its intruduction in
 408:   version 3.3.7.
 409: * The wrapper.exe, wrapperw.exe and wrapper.dll binaries are now being signed
 410:   on Windows making it possible to verify that valid Tanuki Software binaries
 411:   are being used.
 412: * Implemented a way to install, remove, start, stop, etc., the Wrapper as a
 413:   Windows service from a non-elevated (UAC) console.  The Wrapper is elevated
 414:   transparently using a child process.  This is needed starting with Windows
 415:   Vista and 2008 for smooth interaction with the Windows Service Manager.
 416: * (Standard, Professional) Fix a problem where the wrapperjni_*.mo localized
 417:   files were not being loaded correctly.  These messages are only shown when
 418:   debug output is enabled.  Application and Wrapper localization was working
 419:   fine.  Introduced in 3.5.5.
 420: * (Standard, Professional) Enhanced the ability to run with localizations
 421:   other than the system language on Windows.  The Wrapper process locale was
 422:   not being set correctly.  So Japanese text was not always showing correctly
 423:   if the wrapper.lang property was set when the OS was English or German.
 424:   The Java process still has an issue where it will always start with the
 425:   system default value for the file.encoding system property.  This can still
 426:   cause problems writing Japanese text when the file.encoding is German for
 427:   example.
 428: * Added support in the shell script for starting/installing the wrapper on
 429:   system boot with upstart.
 430: * Fix a problem in the shell script where it would fail to recognize a running
 431:   Wrapper if the Wrapper command line or path contained a square bracket.
 432: * Modify the way we test for the existance of the temp directory so we now
 433:   generate our own file name rather than using File.createTempFile.  On some
 434:   systems createTempFile was taking a long time because it requires that Java
 435:   initialize its internal entropy.  We discovered that large numbers of files
 436:   in the java.tmpdir directory makes Java's entropy initialization code very
 437:   slow.  This has been a potential issue since 3.5.0.
 438: * Fixed a problem on Windows where passthrough arguments after a "--" which
 439:   contained spaces were not being passed through to the JVM intact, they were
 440:   being split at the spaces into multiple arguments.
 441: * Fix a problem on Windows where the Wrapper could sometimes crash on shutdown
 442:   if more than one thread got into the cleanup code at the same time.  This
 443:   did not affect running applications and was only an issue on shutdown.  It
 444:   was more likely if a language pack was loaded.  Introduced in 3.5.3.  
 445: 
 446: 3.5.6
 447: * Fix a problem on UNIX platforms where the log file path was being calculated
 448:   incorrectly if an absolute path was specified for wrapper.logfile, and the
 449:   file did not already exist.   A warning message was being displayed but the
 450:   Wrapper would continue using the default log file.  There was a problem in
 451:   the message displayed which caused a crash on some platforms include Mac OSX.
 452:   Introduced in version 3.5.5.
 453: * Fix a problem on Windows platforms where the Wrapper would crash if it could
 454:   not access the directory of the configured wrapper.logfile. 
 455:   Introduced in version 3.5.5.  Bug #3087424.
 456: * Improve the way warnings are logged when there are problems writing to the
 457:   configured wrapper.logfile so that the message will now be logged into the
 458:   log file that the Wrapper ends up using in case it is successful in falling
 459:   back to a default log file.
 460: * Fix a problem on Windows platforms where wrapper.java.additional.<n>
 461:   properties that were specified on the command line, and contained spaces,
 462:   were not being requoted correctly when building up the Java command line.
 463:   Introduced in version 3.3.6.
 464: * Fix a problem where the warning message logged for invalid values of the
 465:   wrapper.java.additional.<n> property, contained corrupted text.  Introduced
 466:   in version 3.3.6.
 467: * Fix a problem on UNIX platforms where an invalid value for the
 468:   wrapper.java.additional.<n> property was correctly being reported and then
 469:   skipped, but the resulting command line to launch the JVM had a blank value
 470:   that was causing the JVM to fail to launch.  An invalid value is any value
 471:   that does not begin with a "-" character.
 472: * Add a new WRAPPER_INIT_DIR environment variable which can be used to
 473:   reference the working directory from which the Wrapper was launched.  This is
 474:   needed for certain applications because the Wrapper always changes its
 475:   working directory to the location of the Wrapper binary.
 476: * Modify the UNIX shell script so it no longer changes the current working dir
 477:   to the location of the script.  This is no longer needed because the Wrapper
 478:   has been changing the working directory to its own location since version
 479:   3.2.0.
 480: * Add a new wrapper.request_thread_dump_on_failed_jvm_exit.delay property to
 481:   control how long the Wrapper will wait after doing a thread dump before
 482:   killing the Java process.  This delay has always been hardcoded to 5 seconds.
 483: * Clean up the text of several warning messages about invalid configuration
 484:   values to make them more consistent.
 485: * (Professional) Add a new wrapper.jvm_kill.delay property which makes it
 486:   possible to control the amount of time to allow between the jvm_kill event
 487:   being fired and the JVM actually being killed.  Useful if an external event
 488:   command is fired that needs to do something with the JVM process first.
 489: * (Professional) Fix a problem where the output of the
 490:   wrapper.event.<event_name>.message and wrapper.event.<event_name>.loglevel
 491:   properties were not displaying correctly on UNIX platforms.
 492: * (Professional) Fix a problem on UNIX platforms where the Java side of the
 493:   Wrapper was not being correctly notified if a large number of child
 494:   processes that had been launched with WrapperManager.exec, exited at the
 495:   same instant.  Some of them were going into a defunct state until the next
 496:   child exited, at which point they would be cleaned up.  This was mainly an
 497:   issue on JVM shutdown if the user code was calling WrapperProcess.waitFor()
 498:   as part of its shutdown process.   WaitFor calls at any point were getting
 499:   stuck and would remain so until another child exited.  As part of this fix,
 500:   there were also several changes to the Windows implementation to bring the
 501:   two code bases into sync.
 502: * Fix a problem on Windows when multiple threads were creating Childobjects,
 503:   Handles could have been unintendedly get inherited by another Child Process,
 504:   causing problems on reading/writing to the Input/Output/Errorstream.
 505: * Fix a problem on solaris and AIX when errno calls were not thread safe due
 506:   to a compiler switch.
 507: * Fix a problem where debug level warning output while loading the Wrapper
 508:   configuration was being displayed on startup.   This could be fixed because
 509:   the Wrapper actually loads the configuration twice, and such output is now
 510:   only logged on the second call.
 511: * (Standard, Professional) Remove the undocumented ability to define a single
 512:   file share mapping without the index.  This would cause confusion if used,
 513:   and complicated the code.
 514: * (Standard, Professional) Fix a byte alignment problem caused by a bad
 515:   compiler directive on Windows platforms.  It was known to cause a crash when
 516:   defining mapped drives on 64-bit Windows versions.  The problem was in the
 517:   source since version 3.3.7, but is not known to cause any other issues.
 518: * (Standard, Professional) Modify the messages displayed when network shares
 519:   are mapped or fail for some reason.  Also add messages about them being
 520:   unmapped on shutdown.
 521: * On some Windows platforms, a failure to delete a rolled log file was not
 522:   being reported correctly.  The system function to delete a file was
 523:   returning success even if it had failed.  We now double check.
 524: * Fix a deadlock in the code that is used to send data to the Java process.
 525:   It was only possible if debug level output was enabled and log file rolling
 526:   was enabled.  Introduced in 3.3.7.
 527: * Fix a problem where the Wrapper was not notifying the JVM whenever the log
 528:   file was rolled and the new name was the same as the previous one, as it is
 529:   when wrapper.logfile.rollmode is anything other than NONE or DATE.
 530: * Fix a problem where the WrapperManager.getWrapperLogFile() was not returning
 531:   the accurate log file name until the first time the log file was rolled after
 532:   each JVM invocation.  This was only noticeable if the wrapper.logfile
 533:   contained either the "ROLLNUM" or "YYYYMMDD" tokens.
 534: * Correct an error message that was displayed on UNIX platforms when the
 535:   configured java binary could not be accessed.  The message referenced a
 536:   buffer whose contents were undefined on some platforms.
 537: * Fix a problem on z/OS where due a difference in the API used to lock a
 538:   mutex compared to all other UNIX platforms, the mutex's locking and
 539:   unlocking code were effectively being ignored.  This means that multiple
 540:   threads were able to access code which was not thread safe and could lead to
 541:   a crash of the Wrapper.   This is a problem that has been in the code since
 542:   the first z/OS release and is not known to have actually caused any problems.
 543:   Starting with 3.5.1, this was only an issue if debug output was enabled.
 544:   Versions 3.3.9 through 3.5.0 could have also had problems whenever the
 545:   Wrapper received a system signal.
 546: 
 547: 3.5.5
 548: * Add new wrapper.filter.trigger.<n> action, "SUCCESS".  If this gets triggered
 549:   then the Wrapper will treat the current JVM invocation as a success, and
 550:   reset its internal failed invocation counter.  This is useful for
 551:   applications that need to be restarted frequently.
 552: * (Standard, Professional) Ignore Juniper Network Connect hostIds as they
 553:   change on each reboot and are thus unreliable as hostIds.
 554: * Added a PASS_THROUGH setting to the UNIX shell script and Windows
 555:   AppCommand.bat.in files which tells them to pass any extra arguments directly
 556:   on to the JVM when it is launched.
 557: * Added a FIXED_COMMAND setting to the UNIX shell script and Windows
 558:   AppCommand.bat.in files to make it possible to run either without specifying
 559:   a command.  Mainly useful in conjunction with PASS_THROUGH.
 560: * (Standard, Professional) Added a --passthrough option to the exe
 561:   customization, in order to tell the wrapper to precede the whole command line
 562:   through to the application in the JVM.
 563: * (Standard, Professional) Added a --conf option to change the default conf
 564:   file, the wrapper tries opening when no conf file was explicitly specified.
 565: * Added wrapper.ntservice.account.prompt.  If set to TRUE the wrapper will
 566:   prompt for all account details (domain, account name, password).
 567: * Fix a minor issue in #include file declarations where a leading space was not
 568:   required.
 569: * Add a new #include.required directive which works the same as the #include
 570:   directive except that it will output an error and prevent the loading of the
 571:   configuration if the included file does not exist.   Normally include files
 572:   are optional by design.
 573: * Modify the error messages displayed when configuration files fail to load so
 574:   they now provide more information about where specifically the problem was.
 575: * Disabled the forced reloading of the SYSTEM (and if set to a specific
 576:   account, the user) registry before launching the Wrapper as a service on
 577:   Windows.  This was done originally in Windows NT because changes to the
 578:   configured environment were not being reflected when running a service unless
 579:   the system was first rebooted.  Microsoft appears to have solved this problem
 580:   in Windows XP and 2003.  In Windows 7 and 2008, this was actually causing a
 581:   problem because the SYSTEM registry contains a setting "USERNAME=SYSTEM" by
 582:   default that was overwriting the USERNAME when run as specific user.  It was
 583:   decided to disable this registry loading for Windows versions starting with
 584:   XP and 2003.  Of the supported versions, only 2000 is now reloading its
 585:   environment.  The only difference from version 3.5.4 and earlier that could
 586:   be found is that when running as the SYSTEM user on Windows 7 or 2008, the
 587:   USERNAME environment variable will now be set to the host name followed by a
 588:   dollar sign rather than SYSTEM.   This is actually how all other services
 589:   work.  But just in case this is a problem, it can we resolved by adding a
 590:   "set.USERNAME=SYSTEM" property into the Wrapper configuration file.
 591:   Bug #3061490.
 592: * (Standard, Professional) Fix a problem for Solaris and HP-UX where the socket
 593:   timeout properties for the email notifications were ignored.
 594: * (Standard, Professional) Added wrapper.ntservice.recovery.<x> properties to 
 595:   define system level actions in the event that the Wrapper process itself
 596:   has a failure.
 597: * (Standard, Professional) Fixed a problem in the WrapperProcess.waitFor() and
 598:   WrapperProcess.exitValue() call, where it would fail to return when called
 599:   after the Wrapper had initiated the shutdown of the JVM.
 600: * (Standard, Professional) Add WrapperProcessConfig.setSoftShutdownTimeout(int)
 601:   method to tell the Wrapper how long to wait after nicely asking the child
 602:   process to shutdown cleanly when calling WrapperProcess.destroy().  Once the
 603:   timeout has ellapsed, the child process will be forcibly terminated.  This
 604:   timeout had been hard coded to 5 seconds in earlier versions.
 605: * Add more detailed usage output to the UNIX shell script.
 606: * Make it possible to 'pause' and 'resume' the JVM from the UNIX shell and
 607:   Windows batch scripts.
 608: * (Professional) Fix a minor memory memory leak while initializing timers.
 609: * Fix a memory leak which could happen if there were any invalid strings in
 610:   localization resources.
 611: * (Professional) Fix a bug where the wrapper.event.<event_type>.command.argv.<n>
 612:   properties were not correctly parsed on Windows. This issue was introduced
 613:   in version 3.5.0.
 614: * (Professional) Add the ability to define wrapper.event.default.command.argv.<n>
 615:   properties that will be used if the event specific specific commands are not
 616:   defined.  Mainly useful for testing.
 617: * Fix a problem occuring when the wrapper failed to roll the log file causing 
 618:   to write to the wrapper's default log (wrapper.log) file rather than
 619:   continuing to write to the current logfile.
 620: * (Standard, Professional) Fix a put problem in the internal hash map
 621:   implemenation used for localization where values could be lost.  This was
 622:   not a visible issue because of the data used.
 623: * Add new wrapper.filter.allow_wildcards.<n> property and make it possible to
 624:   specify wrapper.filter.trigger.<n> patterns which contain '*' and '?'
 625:   wildcards.
 626: * Add a commented alternative in the default OutOfMemoryError filter
 627:   configuration to make it more specific to only trigger on uncaught exception
 628:   stack traces.  This is to avoid output like that from the
 629:   -XX:+PrintClassHistogram JVM argument from causing the JVM to restart with a
 630:   false out of memory warning.  See the wrapper.filter.trigger.<n>
 631:   OutOfMemoryError example for more details.
 632: * Localize the default filter message.
 633: * Added ISO-8859-* encoding support and a few other encodings.
 634: * (Standard, Professional) Fix a problem on UNIX versions, parsing dates in
 635:   license keys that was introduced in version 3.5.0.  Windows verisons did not
 636:   have this problem.  All license upgrade terms and lease terms which contained
 637:   "08" or "09" as either a month or day were being parsed incorrectly.  This
 638:   was leading the Wrapper to interpret those date components as "00".  If the
 639:   number was the date, then this would cause the date to be set to the last day
 640:   of the previous month.  If it was the month however, it would cause the date
 641:   to be set to December of the previous year.  For example "2010-08-20" was
 642:   being interpreted as "2009-12-20", and "2010-10-08" was being interpreted as
 643:   "2009-09-30".  This would have prevented some licenses from being able to
 644:   start because the upgrade terms were in effect prior to the Wrapper's release
 645:   date.  Some trial licenses could also have stopped early because their lease
 646:   term end was earlier that it should may have been.  For normal licenses, his
 647:   will have no effect on installations once they are up and running because
 648:   they do not use the lease term.
 649: * Fix a problem on Windows when a service received several service control
 650:   codes in rapid succession.  Since version 3.5.1, the Wrapper was only to
 651:   process a single control code in each cycle of its main loop.  This was
 652:   resulting in messages like "Previous control code (4) was still in queue,
 653:   overwriting with (4)." in the logs.  The Wrapper can now handle up to 25
 654:   control codes per 10ms cycle.
 655: * Fix a problem where it was not possible to send passthrough arguments to the
 656:   JVM when installing or updating a Windows Service.  Passthrough using the
 657:   "--" argument was added in 3.5.2.
 658: * Add a new wrapper.pause_on_startup property which makes it possible to tell
 659:   the Wrapper to go directly into a paused state without ever launching a JVM.
 660: * Fix a problem where the STOP command set in a command file was being ignored
 661:   if the Wrapper was currently in a paused state.
 662: * Make it possible to specify DEFAULT for the configuration file encoding.
 663:   This will cause the file to be loaded using the default system encoding.  We
 664:   added this by request, but recommend using a portable encoding like UTF-8 to
 665:   ensure that the configuration file will load correctly on all systems.
 666: * Added a WRAPPER_LANG environment variable which makes it possible to reference
 667:   the current locale language code in the configuration file.   One common use
 668:   is to do localization using inclues.
 669:   (e.g. #include ../conf/wrapper-%WRAPPER_LANG%.conf)
 670: 
 671: 3.5.4
 672: * Add optional support for custom public static methods in the
 673:   WrapperSimpleApp and WrapperStartStopApp helper classes.  Feature Request
 674:   #2812276.
 675: * Add a new special configuration file directive "#properties.debug" which
 676:   enables debug output about the properties as they are loaded by the
 677:   configuration file.  This can be useful to tell if and why certain properties
 678:   are being overwritten.  Feature Request #3042959.
 679: * Fix a minor problem where the "#include.debug" configuration file directive
 680:   was sticky so it would be enabled when the configuration file was reloaded
 681:   even if the reloaded configuration file no longer had the directive set.
 682:   This was only an issue if the wrapper.restart.reload_configuration property
 683:   was set.
 684: * Messages about missing included configuration files that were output when the
 685:   #include.debug" configuration file directive was active were being logged at
 686:   the ERROR level even though they were not problems.
 687: * Fix a minor problem where the WRAPPER_JAVA_HOME environment variable was not
 688:   correctly being set to final when it was set internally by Wrapper.  This
 689:   could lead to unexected results if the user overwrote it later in their
 690:   configuration file.
 691: * Fix a problem on AIX and z/OS, when running the Wrapper without any
 692:   arguments.  The Wrapper was attempting to use the default wrapper.conf file
 693:   but the check for the file was failing causing the Wrapper to continue even
 694:   though the file did not exist.  This caused a confusing error message to be
 695:   displayed, but was otherwise harmless.
 696: * Clean up some debug code associated with sleeping where log output was being
 697:   queued when it did not need to be.
 698: * (Standard, Professional) Consolidate some redundant code associated with
 699:   waiting for interfaces on startup.
 700: * (Professional) Fix a problem in the email feature of the Wrapper where a
 701:   subject of more than 27 bytes in length when encoded as UTF-8.  This was
 702:   caused by a miscalculation in the Base64 conversion of the subject.
 703: * (Professional) Fix a problem when the WrapperManager.exec method which takes
 704:   an array of command elements was called on Windows.  The command elements
 705:   need to be combined into a single command line, but if any of the elements
 706:   contained spaces, the resulting command line was not being correctly quoted.
 707: * Add a new wrapper.java.command.resolve property to control whether or not the
 708:   Wrapper tries to resolve any symbolic links in the Java command, specified
 709:   with the wrapper.java.command property.  Historically, it has always done so,
 710:   but some jvm started applications like run-java-tool on Gentoo will fail if
 711:   it is run directly as they have a check to make sure it is launched via a
 712:   symbolic link.
 713: * Fix a problem on Windows versions where a path to the Wrapper binary,
 714:   including the Wrapper binary itself, which was more than 100 characters would
 715:   cause a buffer overflow when installing the service.  A second similar
 716:   problem would happen if the same path was more than 128 characters, whenever
 717:   the Wrapper was launched.   These were both very old issues and only happened
 718:   on 32-bit versions of Windows XP and 2000.  Microsoft documentation says that
 719:   the issue should also exist on the 64-bit versions, but we were unable to
 720:   reproduce it there.  Newer versions of Windows are all fine.
 721: 
 722: 3.5.3
 723: * Fix a typo in the UNIX shell scripts that was causing "command not found"
 724:   errors to be shown when running the Community Edition.
 725: * Add new wrapper.console.fatal_to_stderr, wrapper.console.error_to_stderr,
 726:   and wrapper.console.warn_to_stderr properties to control whether the output
 727:   at the FATAL, ERROR, and WARN log levels go to stdout or stderr.  In the past
 728:   they all went to stdout.  With this change, FATAL and ERROR log levels now
 729:   default to stderr output.
 730: * Fix a problem where the shell script would produce unexpected results if the
 731:   Standard or Professional Edition shell scripts were used with the Community
 732:   Edition Wrapper.  Fix was in Wrapper binary by changing the default ERROR and
 733:   FATAL log level console output to stderr rather than stdout.
 734: * (Standard, Professional) Fix a problem where script error message output was
 735:   not being shown if the wrapper.conf file specified in the script did not
 736:   exist.
 737: * Fix a problem where errors from failed forks on Windows were always being
 738:   flushed immediately rather than honoring the value of the
 739:   wrapper.console.flush property.
 740: * Fix a problem on Windows 2000 systems where a new feature added in 3.5.2 was
 741:   preventing the Wrapper from running because the API used was too new.
 742: * Change the font of the wrapperw dialog in order to have prettier output of
 743:   multibyte characters.
 744: * Add a line feed after the first message when starting the Wrapper from the
 745:   UNIX script.
 746: * Add a note in the debug output so the configured java temporary directory is
 747:   always logged to help with debugging.
 748: * Add a workaround for a bug in both Sun and IBM JVMs which cause an invalid
 749:   exception to be thrown when a socket is already bound.  It had been causing
 750:   the Wrapper to report: "Unexpected exception opening backend socket:
 751:   java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind":
 752:   http://bugs.sun.com/view_bug.do?bug_id=6965962
 753: * Add the encoding of the subjects in the event mails to be always UTF-8
 754:   Base-64 encoded.
 755: * Add new wrapper.event.<x>.email.smtp.auth.type,
 756:   wrapper.event.<x>.email.smtp.auth.userid, and
 757:   wrapper.event.<x>.email.smtp.auth.password properties which make it possible
 758:   to do LOGIN and PLAIN connection authorizations.  Currently SSL (STARTTLS)
 759:   connections to the mail are server are not yet supported.
 760: * Fix a buffer overflow while loading the configuration file on Mac OSX
 761:   versions.  Introduced in 3.5.0.
 762: * Fix a several memory leaks on UNIX versions that were added in 3.5.0, as well
 763:   as a few others on all platforms, some from quite early versions.
 764: * Fix some places where a resolved path of exactly MAX_PATH characters in
 765:   length could have resulted in a buffer overflow.
 766: * (Standard, Professional) Fix a memory leak disposing language packs.
 767: * Go through and increase the consistency of text strings.
 768: * Fix a problem on HP-UX where the Wrapper was logging a warning that the
 769:   configured JVM was invalid if it was a PA-RISC 2.0 binary.  Bug #3037317.
 770: * Fix a problem where the WrapperManager was failing to trap and hide errors
 771:   initializing the MBean server on some JVMs that did not support it.
 772: 
 773: 3.5.2
 774: * Added new command line argument "--" . All arguments following will be
 775:   preceded and passed to the java application. The arguments are attached after
 776:   the arguments used in wrapper.app.parameter.<n>
 777: * Fixed a problem in the shell script which could lead to report failed starts
 778:   of a daemon incorrectly on the command line.
 779: * Implemented some small logic in the wrapper script which tries to change the
 780:   permissions of the wrapper binary to executable if it wasn't set.
 781: * The Demo Application had problems locating the right conf file on Unix
 782:   platforms and failed to launch the internal demonstration wrapper process.
 783: * Improved the error message logged if the Windows version of the Wrapper exits
 784:   with an internal error.  It now logs more information about the internal
 785:   state of the Wrapper as well as saving a mini dump file which can be sent to
 786:   support to make it easier to diagnose the cause of the problem.
 787: * Fix a problem where the names and displayNames in WrapperWin32Service
 788:   instances were corrupted.  List affected the WrapperManager.listServices()
 789:   and WrapperManager.sendServiceControlCode() methods.  There was a similar
 790:   problem with the WrapperManger.getUser(), WrapperManager.getInteractiveUser()
 791:   and WrapperManager.setConsoleTitle() methods.  Introduced in 3.5.0.
 792: * Fix a problem on Windows where wildcards would sometimes fail to be resolved
 793:   or cause the Wrapper to crash.  This affected the generation of classpaths
 794:   and logfile rolling.  Introduced in 3.5.0.
 795: * Fix a problem on UNIX platforms where some error messages related to a failed
 796:   fork to launch the JVM were not being logged correctly.  Introduced in 3.5.0.
 797: * Fix a problem where invalid characters in configuration files that did not
 798:   declare an encoding could cause the Wrapper to crash on startup.  This could
 799:   be issue for users upgrading from versions prior to 3.5.0 as older versions
 800:   did not do any character set translations and would not have had a problem.
 801: * Fix a problem in code to check whether a drive was a mapped network drive or
 802:   not was failing.  This would sometimes lead to a false warning that the drive
 803:   could not be identified.  Introduced in 3.5.0.
 804: 
 805: 3.5.1
 806: * Start using a system function to determine whether or not a character in the
 807:   configuration file is a control character or not.  This way it works on
 808:   non-ASCII platforms.
 809: * (Standard, Professional) Fix a crash on Windows platforms caused by freeing
 810:   up unallocated memory while loading the Wrapper's configuration.
 811: * Add debug output describing the system and current code pages on Windows
 812:   versions to help understand encoding and mojibake issues.
 813: * Add a Japanese localized src/conf/wrapper.conf.in_ja template configuration
 814:   file to assist Japanese users.
 815: * Fix an potential deadlock on UNIX platforms if the JVM exits while logging
 816:   is taking place and the wrapper.debug or undocumented wrapper.state_output
 817:   properties were set to TRUE.
 818: * Fix a problem where a failed JVM invocation that happened immediately after
 819:   being launched would cause the Wrapper to immediately give up and shutdown.
 820:   This should not have been possible with normal JVM configurations, but was
 821:   turned up in testing.
 822: * Fix a problem where some startup output of the tick timer debug output was
 823:   corrupted.  This was only an issue if the wrapper.tick_output property was
 824:   set.
 825: * (Standard, Professional) Rework the way text is localized so that mallocs
 826:   are all handled on initialization.  3.5.0 had problems with occassional
 827:   freezes and crashes caused by mallocs being made within signal handlers.
 828:   The problems were rare unless debug output was enabled.
 829: * Greatly simplify signal handlers on all platforms so they now do as little
 830:   as possible, actions are now queued and then processed by the main thread.
 831: * (Standard, Professional) Fix a problem where the hostname in the 
 832:   wrapper.syslog.remote.host couldn't resolve a hostname (IP Address was
 833:   working).
 834: * (Standard, Professional) Add debug output on Windows versions to help debug
 835:   localization and code page issues.
 836: * (Standard, Professional) Fix a localization problem on Windows where the
 837:   Wrapper was using the system-wide language rather than that of the current
 838:   process.  This was resulting in mojibake if the Wrapper was launched in a
 839:   new console if that new console did not support the required code page.
 840:   This was only an issue if the user had changed the active code page from the
 841:   default for their Windows desktop.
 842: * Fix a problem on Windows platforms where the JVM child output was being
 843:   logged with an extra line feed in some cases.
 844: * Fix a problem running the DemoApp from some Network shares on Windows.
 845: * Add a new WrapperManager.isWindows() and WrapperManager.isMacOSX() methods to
 846:   make it easy to write such conditional code as both platforms can require non
 847:   standard code.
 848: * (Standard, Professional) Make the GetHostId.bat file more robust so it can be
 849:   executed using a relative reference from the command line.  It also now
 850:   supports Delta-pack style Wrapper binary naming and falling back to use which
 851:   binaries are available.
 852: * Change the timing of when the wrapper.working.dir is set so that any error
 853:   messages generated while loading the configuration will be logged to the
 854:   correct log file.  It is also needed for Standard and Professional Editions
 855:   to ensure that the language pack is loaded from the correct location so that
 856:   all such messages will be in the correct locale.
 857: * Fix a problem on UNIX platforms where the status command was failing with an
 858:   error due to the localization feature added in 3.5.0.
 859: 
 860: 3.5.0
 861: * (Standard) Added the ability to detect and react to thread dead locks in
 862:   the JVM.  Requires at Java 1.5.  Added wrapper.check.deadlock,
 863:   wrapper.check.deadlock.interval, wrapper.check.deadlock.action, and
 864:   wrapper.check.deadlock.output properties to configure the detection.
 865: * (Professional) Add a new jvm_deadlock event which is fired in response to
 866:   a thread deadlock being detected within the JVM.
 867: * Fix a problem where the intervals like wrapper.ping.interval were all
 868:   rounding down causing them to function at a rate one second shorter than
 869:   configured.
 870: * Fix a minor memory leak calling WrapperManager.exec.
 871: * Add a new wrapper.filter.message.<n> property which can be used to control
 872:   the message which is logged when a wrapper.filter.trigger.<n> is matched.
 873: * Rework the way actions are fired for the wrapper.filter.<n>.action and
 874:   wrapper.timer.<n>.action properties so there is no longer any duplicate
 875:   code.
 876: * Modify the way the wrapper.filter.<n>.action and wrapper.timer.<n>.action
 877:   properties work so it is now possible to specify a list of actions which will
 878:   happen in the order specified.  This makes it possible to do a thread dump
 879:   and then restart in response to an error.
 880: * Add the DEBUG action to the wrapper.filter.<n>.action property for
 881:   consistency.
 882: * (Professional) Implement the ability to fire user defined events as actions
 883:   of the wrapper.filter.<n>.action, wrapper.timer.<n>.action, and
 884:   wrapper.check.deadlock.action properties.
 885: * Fix a problem in the WrapperProcess.destroy() function, when a child process
 886:   couldn't have been forcibly killed.
 887: * Add GetHosdID.bat file for Windows platforms. This file will open a dialog 
 888:   displaying the HostId of the machine.
 889: * Fix a problem in the shell script which, on a rc based OS, could lead to
 890:   problems starting the Wrapper when the APP_NAME in the script contained
 891:   capital letters.
 892: * (Standard, Professional) Added a set of wrapper.share.<n>.* properties which
 893:   makes it possible to configure the Wrapper to map specific network resources
 894:   before launching the JVM on Windows.
 895: * Corrected the way the Wrapper is installing itself as a Windows service when
 896:   the binary and/or conf file are located on a Mapped Drive.
 897: * Add new wrapper.pausable and wrapper.pausable.stop_jvm properties to control
 898:   whether the JVM can be paused or not, and deprecate the use of the Windows
 899:   specific wrapper.ntservice.pausable and wrapper.ntservice.pausable.stop_jvm
 900:   properties.
 901: * Modified the wrapper.commandfile property so PAUSE and RESUME commands are
 902:   now supported on all platforms at any time.
 903: * Modified the wrapper.filter.action.<n> property so PAUSE, RESUME, and DEBUG
 904:   actions are now supported.
 905: * (Professional) Modified the wrapper.timer.<n>.action property so PAUSE and
 906:   RESUME actions are now supported.
 907: * (Professional) Modified the wrapper.event.<event_name>.command.block.action
 908:   property so PAUSE and RESUME actions are now supported.
 909: * Added new WrapperServicePauseEvent and WrapperServiceResumeEvent classes to
 910:   make it possible to notify an application that it has been paused or resumed.
 911:   To date, this was only possible when the Windows service was paused or
 912:   resumed
 913: * (Professional) Add new "wrapper_pause" and "wrapper_resume" event types that
 914:   are fired whenever the Wrapper is paused or resumed.
 915: * Enhance the command line parsing for the WrapperManager.exec() command. The
 916:   single commandLine version of the exec call will handle quotes more
 917:   sophisticated.
 918: * Modified the wrapper.syslog.ident property so its value is now silently
 919:   trimmed to 32 characters in length.  This is needed to avoid problems with
 920:   syslog servers.  (See RFC 3164 section 4.1.3)
 921: * (Standard, Professional) Add new wrapper.syslog.remote.host,
 922:   wrapper.syslog.remote.port, and wrapper.syslog.local.host properties which
 923:   can be used to redirect all syslog (UNIX) or Event Log (Windows) output to
 924:   a remote syslog server.
 925: * Add support for the wrapper.syslog.facility property on Windows so remote
 926:   syslog entries can be sent from Windows versions of the Wrapper.
 927: * Add debug output from the WrapperManager class which shows information about
 928:   the current wrapper.jar, including its size, location, and MD5 hash.
 929: * Add a check for wrapper.java.classpath.<n> entries containing quotes.  The
 930:   quotes are now stripped and a debug warning logged.
 931: * (Standard, Professional) Increase the size of the wrapperw.exe error dialog
 932:   so it is a little easier to read.  Also changed the font for the same reason.
 933: * (Standard, Professional) Modify the title of the wrapperw.exe error dialog
 934:   so it now includes the value of the wrapper.displayname property.
 935: * Add a new check for the writability of the configured Java temporary
 936:   directory.  When running on Vista, it will not be writable and can lead to
 937:   errors.
 938: * Added new wrapper.java.tmpdir.required and wrapper.java.tmpdir.warn_silently
 939:   properties to control whether the temporary directory is required.
 940: * Add a note in Wrapper conf template showing users how to configure a specific
 941:   Java version to use.
 942: * Add a new CLOSE_SOCKET command to the wrapper.commandfile property and added
 943:   a new wrapper.commandfile.enable_tests property to control whether it can be
 944:   used.
 945: * Fix a debug warning while shutting down caused by one thread closing the
 946:   backend socket when another expected it to be open.
 947: * If the backend socket between the JVM and Wrapper is somehow closed, make the
 948:   JVM respond promptly by restarting the JVM immediately to resync with the
 949:   Wrapper.  Added log information to make it clear when this happens.
 950: * Add a new wrapper.use_tick_mutex property to control whether or not the
 951:   internal tick timer is protected by a mutex. (Experimental)
 952: * (Standard, Professional) Add support for zLinux 32 and 64-bit on s390 and
 953:   s390x systems.
 954: * Change the internal encoding of the wrapper from native characters to
 955:   UNICODE.  This will allow the wrapper to handle correctly any characters in
 956:   its configuration file and internally.
 957: * (Standard, Professional) Implement a new WrapperResources class which makes
 958:   it possible for user applications to localize their applications using the
 959:   same methods common to native applications.  The Wrapper uses this internally
 960:   to provide localized versions of the Wrapper.
 961: * Remove the old org.tanukisoftware.wrapper.resources package as it is no
 962:   longer being used.
 963: * (Standard, Professional) Add Japanese language pack to localize the Wrapper
 964:   to Japanese.
 965: * Fix a problem in the WrapperManager class where unexpected exceptions thrown
 966:   in the main socket loop were being thrown away without being logged.
 967: * Make the Wrapper more robust against failures removing the Wrapper's shutdown
 968:   hook on shutdown.  It had been causing the clean shutdown of the JVM to fail
 969:   as an unexpected exit.
 970: * Fixed a problem in the wrapper customize code where customized multi layer
 971:   icons may get scaled incorrectly by Windows.  Bug #3015848
 972: * Modify the wrapper.on_exit.<n> property so it is now possible to PAUSE the
 973:   Wrapper when a JVM exits.  This delays the restart of the JVM until the
 974:   Wrapper is resumed.
 975: * Add a new log format, 'U', which logs the approximate time in seconds since
 976:   the Wrapper was launched.  It is based on the internal tick timer and will
 977:   be a few percent lower than the actual number of seconds that have elapsed.
 978:   Added to the wrapper.console.format, wrapper.logfile.format, and
 979:   wrapper.logdialog.format properties.
 980: * Fix a problem where deleting the configured anchor file was not recognized
 981:   if the JVM was not running at the time.  The Wrapper was not noticing that
 982:   it was missing until the next JVM was launched.
 983: * (Standard, Professional) Add a new NOTICE log level which is used to log
 984:   license related message.  These will only show up trial license log output.
 985: * (Standard, Professional) Add a new default 15 minute trial license which
 986:   can be used out of the box on any machine without the need to register and
 987:   obtain a trial license or purchase a license.
 988: * Add a new wrapper.environment.dump property which will dump all of the
 989:   environment variables to the log, along with where the variables originated.
 990: * Force the Wrapper to flush all logfile output for each line until the
 991:   configuration file has been loaded.  There is normally no output up to this
 992:   point anyway, but this ensures that any errors are logged in a consistent
 993:   location.
 994: * Move the registration of the main thread with the logging system up a bit
 995:   to make it possible to perform low level debug logging earlier.
 996: * Add a set of checks to display an error and prevent the Wrapper from starting
 997:   if the batch or shell scripts being used are based on the TestWrapper demo
 998:   application.  It is important that the user start with the default template
 999:   files in the distribution src/bin and src/conf directories to make sure the
1000:   integration goes smoothly.
1001: 
1002: 3.4.1
1003: * Fix a problem where the wrapper.app.parameter.1 property was always being
1004:   set to an empty string when launched from launchd on Mac OSX.  It worked
1005:   correctly with the testwrapper application, but would fail for most user
1006:   applications.
1007: * (Professional) Fix a potential synchronization problem in the log output
1008:   of the tick timer, event command and event email code.  This had been in
1009:   the code since 3.3.0 without any reports of problems.
1010: * Improve the error message displayed when the configured wrapper.java.command
1011:   can not be found on the path.
1012: * Log the name of the signal in the logs when a SIGSEGV is detected from the
1013:   JVM.   It had been logged as Unknown.
1014: * Add some comments to the wrapper.conf.in template to help users get started
1015:   with a new license key file.
1016: * Add some default properties to the wrapper.conf.in template file to make
1017:   it easier to get up and running with out of memory checks, as well as
1018:   sending out alert emails.
1019: * Add a small debug message when running wrapperw.exe so it is clear which
1020:   wrapper binary is being used.
1021: * Fix a problem where the wrapper.logfile.maxfiles was not being applied on
1022:   startup when the current log file did not yet exist.  This was true for any
1023:   wrapper.logfile value which contained a unique value like a PID.
1024: * (Professional) Fix a problem in the WrapperProcess.destroy() function, where
1025:   the function was failing to forcibly kill the child process.
1026: * (Standard, Professional) Add a new GetHostID.bat file for Windows platforms.
1027:   This file will open a dialog displaying the HostId of the machine to help
1028:   new users get up and running.
1029: * Add a new WrapperManager.appearOrphan() method which can be used to test
1030:   how the WrapperManager shuts down the JVM in the event that the Wrapper
1031:   process ever crashes or freezes.  This was not due to any particular problem
1032:   and was added to fill out our test coverage.
1033: * (Professional) Fix a problem where event commands were being left in a
1034:   defunct state after execution on UNIX platforms.
1035: * Fix a potential problem on 64-bit versions where the internal tick timer was
1036:   not rolling over in the same way as the 32-bit versions.  This has been in all
1037:   previous versions but is not known to have caused any problems.  It was fixed
1038:   for consistency.
1039: * Modify the WrapperManager class so it will now request a JVM hard exit only
1040:   after 4-times the ping timeout, in seconds, since the last contact with the
1041:   JVM.  This had been 90 seconds more than the ping timeout, which was not
1042:   always long enough when the wrapper.ping.timeout was very large.
1043: * Shift the initial start point of the tick counter so it will roll over 50
1044:   seconds after startup.  This shouldn't be noticeable to the user, but makes
1045:   sure that this roll over is much better tested as it always happens the first
1046:   time on startup.
1047: * Add a new wrapper.java.classpath.use_environment property which makes it
1048:   possible to set the classpath using the CLASSPATH environment variable rather
1049:   than including it on the Java command line.
1050: * Fix a problem where requests to shutdown the Wrapper when in the state where
1051:   it was just about to launch a JVM would being ignored.  This was fixed in all
1052:   editions, but was only an issue in the Professional Edition when the
1053:   wrapper.event.jvm_prelaunch.command.on_exit.<n>=SHUTDOWN property was being
1054:   used with the wrapper.event.jvm_prelaunch.command.block=TRUE property and the
1055:   command exited with a code that triggered the SHUTDOWN.
1056: * (Professional) Add a new wrapper.event.<event_type>.command.block.action
1057:   property to control how the Wrapper behaves when a command does not complete
1058:   execution within the configured timeout.  Accepted values are CONTINUE, KILL,
1059:   KILL_SHUTDOWN and KILL_RESTART.  Default value is CONTINUE.
1060: * (Professional) Made it possible to use the "default" event type with the
1061:   wrapper.event.<event_type>.command.loglevel,
1062:   wrapper.event.<event_type>.command.block,
1063:   wrapper.event.<event_type>.command.block.timeout,
1064:   wrapper.event.<event_type>.command.on_exit.<n>, and
1065:   wrapper.event.<event_type>.command.on_exit.default properties.
1066: * Fixed a single byte buffer overflow which takes place just before the JVM is
1067:   launched on Windows platforms.  This was introduced in 3.4.0.
1068: * Add a message pointing the user to the Wrapper's log file when the service
1069:   fails to start after it has been launched.
1070: * Update the debug message displayed when attempting to open the backend socket
1071:   if the port is unavailable so it doesn't seem like a problem.  It will retry
1072:   with another port.
1073: * Work around an issue on some Solaris problems where the shell script would fail
1074:   if /usr/ucb/ps wasn't installed.
1075: * Fix a problem on UNIX versions where the Wrapper would fail to resolve the
1076:   correct location of java if it was located using the system PATH, and that PATH
1077:   element pointed to a binary via a relative symbolic link.  This was introduced
1078:   in 3.4.0.
1079: 
1080: 3.4.0
1081: * Increased the minimum supported Java version from 1.2 to 1.4.
1082: * Removed the reflection code used to manage the Wrapper's shutdown hook.
1083:   The Runtime methods are now called normally.
1084: * Add a note in the TestWrapper shell script to make it clear that the user
1085:   should always use the scripts in the WRAPPER_HOME/src/bin/ directory when
1086:   generating scripts for their own applications.  This became more of an
1087:   issue because of changes to the TestWrapper script starting with 3.3.8.
1088:   Bug #2902843.
1089: * (Professional) Added new WrapperManager.exec methods and a new
1090:   WrapperProcess class to allow the launching and management of child
1091:   processes through the Wrapper rather than using the standard Runtime
1092:   class.  This makes it possible to clean up child processes when the
1093:   JVM crashes or is restarted, as well as solves severe memory issues with
1094:   the way processes are forked on some UNIX platforms.
1095: * (Professional) Added a new wrapper.child.status.loglevel property to make
1096:   it easier to debug the status of child processes.
1097: * (Professional) Added a new wrapper.child.count.interval property to control
1098:   the interval at which the number of waiting child processes is logged after
1099:   a JVM is shutdown.
1100: * (Professional) Added a new wrapper.jvm_cleanup.timeout property to control
1101:   the amount of time that managed child processes still running after the JVM
1102:   has exited are given to shutdown before being forcibly killed.
1103: * Fix a problem with WrapperManager.getUser() and getInteractiveUser() methods
1104:   which was preventing us from using the latest compiler on 32-bit Windows.
1105:   (The compiler used to build 32-bit Windows versions was rolled back to the
1106:   version used through the 3.3.5 release in 3.3.9 to work around the problem
1107:   that was causing these methods to always return null.)  The change in this
1108:   version should not affect how the Wrapper functions.
1109: * The old compiler used in 3.3.9 for Windows 32-bit builds was causing a false
1110:   hit on Symantec security software.  The new compiler causes the Wrapper to
1111:   once again pass without any warnings.
1112: * Added a warning while starting up the JVM which will be displayed if the
1113:   Java command in wrapper.java.command does not point to a valid java binary 
1114:   file.
1115: * [Changed the scripts and batch files to try to load the wrapper executable
1116:   according to the system, i.e. on 64-bit systems the 64bit binary of the 
1117:   wrapper is attempted to be executed first and after this fails the 32 bit 
1118:   gets attempted to be loaded. This behaviour is primaly useful with the 
1119:   delta-pack of the wrapper.]
1120: * Add some debug output logging the current timezone to assist supporting
1121:   time related problems.
1122: * (Standard, Professional) Added a new wrapper.license.debug property which
1123:   will log information about the license key(s) being tested on startup.
1124: * (Standard, Professional) Fix a problem where license validation was
1125:   failing at certain times of the day for servers with timezones east of
1126:   Japan.  Development license keys which have their update times obfuscated
1127:   were not affected.  This was a problem introduced in 3.3.7.
1128: * Fixed a bug in the wrapper shell script which occured when running the script
1129:   on a Solaris within a non singlebyte locale. Bug #2910327
1130: * Fixed a potential bug in the wrapper script where requesting a Thread Dump,
1131:   the shell is sending the wrapper console to the background and returning 
1132:   with a prompt.
1133: * Fix a problem where Java log output would sometimes get extra line feeds
1134:   when under heavy load.
1135: * Fix a problem which was leading to a resource not found error when trying
1136:   to start a service, if it was installed on a Mapped Network Drive under 
1137:   Windows.
1138: * Added some advice messages recommending the use of UNC paths if a resource
1139:   located on a Mapped Network Drive is used in the configuration file on
1140:   Windows versions.
1141: * (Standard, Professional) Fix a bug in the wrapper binary customization,
1142:   which occured when the source binary file was set to read only. 
1143: * Fixed a null string problem in the error message if a classpath value 
1144:   wasn't found.
1145: * (Professional) Added the option to include a logfile into the wrapper's 
1146:   EmailNotification mails via wrapper.event.default.attach_log=TRUE
1147: * Improve the message displayed when a user calls
1148:   WrapperManager.requestThreadDump() in JVM which does not have console
1149:   window on Windows.  This should never be an issue when run with the Wrapper,
1150:   but can happen if running standalone without the wrapper binary.
1151: * Update the Windows batch scripts so they now take AMD64 and IA64
1152:   architectures into account when deciding which version of the Wrapper to
1153:   run when using the delta pack.
1154: * Update the UNIX shell script so it now does a much better job of resolving
1155:   the ideal platform bits to run the correct version of the Wrapper when using
1156:   the delta pack.  Thanks to Leo Leung for the patch.
1157: * Add install and remove commands to the UNIX shell script so it is now much
1158:   easier to install and remove the Wrapper on many UNIX plattforms to start
1159:   and stop on system startup and shutdown.  Thanks to Leo Leung for the patch.
1160: * Update the Windows batch scripts so it is now easier to change the location
1161:   of the Wrapper configuration file or rename the Wrapper binary when using
1162:   the scripts.
1163: * Added a new QueryApp-NT.bat.in template script which can be used to query
1164:   the current running status of the service on Windows.
1165: * (Standard, Professional) Add a new "-u" or "--update" command to the Wrapper
1166:   which allows you to effectively reinstall the Wrapper as a service without
1167:   having to provide the account credentials if the service is running as a
1168:   specific user.  This is very useful for installers upgrading an application
1169:   to a new version.
1170: * Add a new "update" command to the Windows AppCommand.bat.in batch script.
1171: * Go through and clean up the messages displayed when controlling the Wrapper
1172:   as a service so the messages are consistent and more meaningful to the user.
1173: * Add wrapper.wait_for_hostid and wrapper.max_hostid_timeout property. 
1174:   This properties set if and how long the wrapper shall wait when starting up 
1175:   until the hostid is available.  This is important to make sure that server
1176:   licenses are validated correctly on UNIX platforms as the OS is booting up.
1177: * (Professional) Fix a problem where environment variables referenced in
1178:   property values were not being expanded correctly the first time they were
1179:   referenced if the property's value was a default value.  The underlying fix
1180:   was in all editions, but this was only causing a problem in the Professional
1181:   Edition where the WRAPPER_HOSTNAME variable was not being expanded in the
1182:   subject and body of emails sent out for the "wrapper_start" event if the
1183:   defaults were used.
1184: * (Professional) Fix a problem where backslashes in the body of emails,
1185:   configured with the wrapper.event.<event_name>.email.body property, were
1186:   not being handled correctly when displaying things like paths from
1187:   environment variable references.
1188: * Fix a problem on UNIX platforms where the Wrapper was displaying an error
1189:   about not being able to locate the configuration file when the Wrapper was
1190:   run without any arguments.
1191: * (Standard, Professional) Improve the message shown when a License Key is not
1192:   found.
1193: * Add a new message to the Community Edition when the user requests a HostId.
1194: * Add WAIT_FOR_STARTED_STATUS and WAIT_FOR_STARTED_TIMEOUT to the script. This
1195:   lets the script wait (up to timeout sec.) when starting a daemonized process
1196:   until the process has been started.
1197:   Thanks to Dobes V.  Feature Requests #2917391.
1198: * Improve the error message displayed when the user tries to run the Wrapper
1199:   with the internal -s or --service commands.
1200: * Fix a problem where the WrapperSystemPropertyUtil.getBooleanValue() method
1201:   was not correctly returning the specified default value when the looked up
1202:   property was missing.  Also added a new getStringValue() method.
1203: * Improve the error message displayed when the user tries to install and remove
1204:   the wrapper as Service on Windows Versions after Windows Vista.
1205: * Add an advice message when MacOSX applications launched with launchd
1206:   encounter a "Returning nil _server" error when displaying a GUI.
1207: 
1208: 3.3.9
1209: * Modify the way JNI functions are called from within the native library so
1210:   they work correctly on platforms which are not ASCII based.
1211: * (Professional) Add support for IBM z/OS 390 servers.  This is still an alpha
1212:   release and will be made available on request.
1213: * Improve the message displayed when a server license key is used on a
1214:   different server.
1215: * Add a minimum max file size of 1024 bytes to the wrapper.logfile.maxsize
1216:   property to avoid the log file rotating too often if the user enters a
1217:   very small value.
1218: * Add a message that shows up in the console when the Wrapper fails to write
1219:   to the configured log file.  As with previous versions, it will then fall
1220:   back to writing to wrapper.log in the current working directory.
1221: * On UNIX platforms, automatically set the wrapper.disable_console_input
1222:   property when wrapper.daemonize is set.
1223: * Fix a problem introduced in 3.3.8 where relative configuration file includes
1224:   were failing to resolve correctly when the wrapper.working.dir and
1225:   wrapper.daemonize properties were used together.  The wrapper.daemonize
1226:   property causes the configuration to be loaded twice on startup and the
1227:   working directly was not being reset correctly before it was loaded the
1228:   second time.
1229: * Fix a problem introduced in 3.3.8 where wildcard selection of files on
1230:   Windows failed in some cases.
1231: * Fix a problem introduced in 3.3.8 where setting the wrapper.logfile.maxfiles
1232:   property to 0 was causing all log files to be deleted rather than none when
1233:   the ROLLNUM file pattern was used.
1234: * Revert the way rolled log files are deleted when using the ROLLNUM file
1235:   pattern to the functionality used in versions 3.3.7 and earlier.  Files such
1236:   as wrapper.log.bak or other files manually created with the same log file
1237:   base name were also being deleted with 3.3.8.
1238: * (Standard, Professional) Fix a problem where the close window button in the
1239:   title of the WrapperW log dialog was not correctly cancelling the dialog.
1240: * (Standard, Professional) Fix a problem where the WrapperW log dialog would
1241:   sometimes fail to show itself on top of other windows if the splashscreen
1242:   had been displayed on startup.
1243: * Fix a problem on 32-bit Windows versions where starting with he Wrapper,
1244:   the WrapperManager.getUser() and getInteractiveUser() methods were always
1245:   returning null.  This problem was introduced in version 3.3.6.
1246: * (Professional) Fix a buffer overflow when sending alert emails to multiple
1247:   addresses.  This would sometimes cause crashes in versions 3.3.7 and 3.3.8
1248:   when sending alert emails to even a single recipient.  Because of the nature
1249:   of the overflow, in most cases did not cause any problems.
1250: 
1251: 3.3.8
1252: * Add the new start type DELAY_START for NT Services, which startes the service 
1253:   after other auto-start services are started plus a short delay.
1254: * Fix a problem where the Wrapper's PID file was not being set to the correct
1255:   PID when the wrapper was launched daemonized.  With the shell scripts that
1256:   ship with the Wrapper, this means that it would not be possible to stop the
1257:   Wrapper using the script because the expected PID did not exist.  This was
1258:   a problem introduced in 3.3.7.
1259: * Changed the timing for the wrapper's splashscreen when the splash screen 
1260:   mode was set to JVM_STARTING. Now the splashscreen will disappear when the 
1261:   JVM has been initialized.
1262: * Fix a problem where the splashscreen was being shown when starting a service
1263:   or performing other command line operations.
1264: * Remove some extra debug output on startup for Mac versions.
1265: * Fix a crash in the Community Edition on PPC platforms of the Mac OSX version.
1266:   This crash has been reproduced in all versions starting with 3.3.1.  The OSX
1267:   distribution is a universal binary but does not appear to result in a crash
1268:   on x86 servers.  Standard and Professional Editions were not affected.
1269: * Fix a problem on Windows versions where problems accessing the registry were
1270:   not reporting the correct error message.  This did not cause any problems in
1271:   and of itself, but it made it difficult to track the down the cause.
1272: * When wildcards are used in the classpath elements, the list of matching jar
1273:   files included in the classpath are now sorted to ensure that their order
1274:   is consistent across installations.  Normally it would not matter, but if
1275:   certain classes or resources are redefined in multiple jars this will ensure
1276:   that the application now always works the same.
1277: * Fix a problem where wrapper.logfile.maxfiles was being ignored when
1278:   wrapper.logfile.rollmode=JVM was set.
1279: * Changed the way the wrapper.logfile.maxfiles property works with the ROLLNUM
1280:   token.  Now when the log files are rolled, all files greater than maxfiles
1281:   count will be deleted.  Previously, the Wrapper would roll within the maxfiles
1282:   count and ignore extra files if they existed.  This would cause extra files to
1283:   be left around if the maxfiles property value was decreased.
1284: * Add new wrapper.logfile.purge.pattern and wrapper.logfile.purge.sort
1285:   properties which make it possible to limit the number of log files in some
1286:   advanced cases.  Be sure to read the documentation before playing with them.
1287: * Fix a potential crash when referencing non-existent environment variables
1288:   in the value of wrapper.logfile.
1289: * Modify the way all properties used to define file names behave so that
1290:   undefined environment variable references will now have their '%' characters
1291:   replaced by '_'.  This is to avoid problems caused by file names containing
1292:   '%' characters on some platforms.
1293: * Fix a problem introduced in 3.3.6 where the windows shown by the JVM or its
1294:   child processes could not be displayed when running in iteractive mode.
1295: * Rework the TestWrapper application a bit so it can now be run in headless
1296:   mode for testing.
1297: * Fix a problem on some UNIX platforms where the shell script was showing an
1298:   extra '-n' when run with the "start" command.
1299: * Fix a problem for FreeBSD which could cause the wrapper being unable to stop
1300:   the wrapper daemon if the ps command buffer size (kern.ps_arg_cache_limit) 
1301:   was too small to contain the wrapper command line.
1302: 
1303: 3.3.7
1304: * (Professional and Standard) Added the ability to customize the wrapper.exe
1305:   and wrapperw.exe binaries on Windows with a user specified icon and splash
1306:   screen.
1307: * (Professional and Standard) Added a new wrapper.splashscreen.mode property
1308:   to control how long the splashscreen is visible.
1309: * Fix a problem on SELinux where a strict security policy could lead the
1310:   Wrapper fail to load the libwrapper library.  Thanks to Jean for the hint.
1311: * Fixed a problem in the obfuscated license date, which caused a license to
1312:   be reported as invalid if run in a timezone west of Japan.  This feature
1313:   was implemented in 3.3.6, but disabled on the site until the release of
1314:   version 3.3.7.  Thanks to Leo for the hint.
1315: * Added a new WRAPPER_PID environment variable. Feature Request #2870136.
1316: * Added a new WrapperManager.getWrapperLogFile() method and
1317:   WrapperLogFileChangedEvent class that can be used to receive notifications
1318:   of changes to the Wrapper log file currently in use.
1319:   Feature Request #2870133.
1320: * (Profesional) Improved the wrapper.event.<event_name>.email.to property
1321:   so it now supports the ability to specify multiple recipients.
1322: 
1323: 3.3.6
1324: * Introduce the wrapper.timezone property. This property allows to set the
1325:   timezone in which the wrapper will be executed. This property is available 
1326:   in the standard and the professional Edition of the Java Service Wrapper.
1327: * Fix a potential problem on Windows platforms where a failure to register the
1328:   control handler was not being logged.  If this happened, user logoffs would
1329:   not be trapped correctly but no other problems would have occurred.
1330: * Fixed a problem in the shell script on Solaris platforms where a deep
1331:   directory structure would cause the script to incorrectly report that the
1332:   Wrapper was not running.  That could lead to multiple zombie copies of the
1333:   Wrapper and its application running in memory.
1334:   Bug #1664303.
1335: * Fixed a problem in the shell script on HP-UX platforms where a deep
1336:   directory structure would cause the script to incorrectly report that the
1337:   Wrapper was not running.  That could lead to multiple zombie copies of the
1338:   Wrapper and its application running in memory.
1339:   Bug #2812207.
1340: * Improve the error message displayed when there are problems initializing the
1341:   main class specified for the WrapperSimpleApp, WrapperStartStopApp, or
1342:   WrapperJarApp helper classes.
1343: * (Professional) Add new wrapper.event.<event_name>.loglevel and
1344:   wrapper.event.<event_name>.message properties which can be used to output
1345:   a customizable message like "Event: <event_name>" to the logs at an arbitrary
1346:   log level.
1347: * Add debug output in the Windows version to log the full path of the native
1348:   library.
1349: * Add a new wrapper.java.detect_debug_jvm property which will control whether
1350:   or not the Wrapper disabled timeouts when java's debugger is in use.  The
1351:   Wrapper has automatically disabled timeouts in this case since version 3.2.1.
1352:   Thanks to Ruslan Gainutdinov for the patch.
1353: * Fix a buffer overflow problem for values of wrapper.ntservice.name.
1354: * Fix a problem with where the wrapper.syslog.ident property was not working
1355:   as documented.  It had been necessary to use wrapper.ntservice.name in its
1356:   place.
1357: * Add a new wrapper.ignore_sequence_gaps property which makes it possible to
1358:   have non sequential numbered property values.  This affects the
1359:   wrapper.app.parameter.<n>, wrapper.event.<event_name>.command.argv.<n>,
1360:   wrapper.filter.trigger.<n>, wrapper.java.additional.<n>,
1361:   wrapper.java.classpath.<n>, wrapper.java.library.path.<n>,
1362:   wrapper.ntservice.dependency.<n>, and wrapper.timer.<n>.interval, 
1363:   properties.  The default value maintains past functionality.
1364:   Feature Request #1930298.
1365: * (Professional) Fix a problem where the Event Handler Variables
1366:   were not being set correctly in the values of the
1367:   wrapper.event.<event_name>.command.argv.<n> properties.
1368: * (Professional) Fix a potential access violation if memory allocations fail
1369:   while sending event mails or executing event commands.
1370: * Add a new WRAPPER_HOSTNAME default environment variable as an alias of the
1371:   existing WRAPPER_HOST_NAME variable.
1372: * (Professional) Deprecate the use of the wrapper.event.<event_name>.set_environment
1373:   property.  It will remain in the product for compatibility but its use is
1374:   discouraged as it does not always work correctly when the configuration
1375:   file is reloaded.  See the property's documentation for more details.
1376: * Add a new DUMP action to the wrapper.filter.action.<n> property to make it
1377:   possible to invoke a thread dump in response to a specific string in the
1378:   JVM's console output.
1379: * Fix a problem where the WrapperManager.stopAndReturn method was dead locking
1380:   if called when the JVM was being run in standalone mode without the Wrapper.
1381:   Bug #2711872.
1382: * (Standard, Professional) Modify the way the licensing times work so the
1383:   Wrapper compares the License Upgrade Term to an official release date
1384:   rather than the build date.  This makes it possible to release additional
1385:   platforms at a later date while keeping the use of a license consistent.
1386: * (Standard, Professional) Make it possible to obfuscate the upgrade term in
1387:   License Key files for development licenses so it is not visible to an end
1388:   user what the development license holder's upgrade term is.  This feature
1389:   is accessed from the License Management Page when downloading a new or
1390:   existing License Key file.
1391: 
1392: 
1393: 3.3.5
1394: * Fix a problem on some UNIX platforms introduced in 3.3.4 where the Wrapper
1395:   would crash on startup if the configured JVM could not be found.
1396: * Fix a problem introduced in 3.3.2 where the Wrapper could crash if the
1397:   system host name was longer than 27 characters in length.
1398: * Fix a potential problem with the way thread ids were being compared on UNIX
1399:   systems.
1400: * Add a new wrapper.java.additional.auto_bits property which will automatically
1401:   add the -d32 or -d64 arguments to the JVM for platforms whose JVMs typically
1402:   expect the argument.
1403: * (Professional) Fix a problem with the Date field of outgoing event emails.
1404: 
1405: 3.3.4
1406: * (Standard, Professional) Update the development license to version 1.1
1407:   so that a new copyright notice file can be shipped with user applications
1408:   rather than the full license text.
1409: * The Community Edition may be licensed under either the GPL2 based Community
1410:   License, or the Development License.  The source for the Standard and
1411:   Professional Editions of the Wrapper are proprietary.
1412:   http://wrapper.tanukisoftware.org/doc/english/licenseOverview.html
1413: * Fix a problem introduced in 3.3.2 where querying a the status of a Windows
1414:   service with the -q or -qs commands resulted in an access violation.  The
1415:   running status of the service was reported correctly but additional
1416:   configuration information was failing.  Bug #2644515.
1417: * Add a new wrapper.disable_restarts.automatic property to disable only
1418:   restarts caused by JVM timeouts, crashes, etc.  Manual or configured
1419:   restarts will still be allowed.
1420: * Switch to using make for HPUX IA 32/64 builds.
1421: * Add Advice comments when the Wrapper fails to launch the JVM process.
1422: * Fix a problem on UNIX platforms where log entries made by the forked Wrapper
1423:   process would result in two blocks of log entries in the log file because
1424:   the parent Wrapper process would think they were console output from the JVM
1425:   process.
1426: * Add a set of new wrapper environment variables that can be referenced in the
1427:   wrapper.conf file to generate random numbers, or timestamps for use in
1428:   generating unique file names, etc. See the Default Environment Variable
1429:   definitions section for more details.
1430: * (Standard, Professional) Fix a problem with Development licenses being
1431:   able to authorize applications using Integration Method #4 which was
1432:   added in version 3.3.3.
1433: * Add the number of bits of the current Wrapper to the startup banner to aid
1434:   in support requests.
1435: * (Standard, Professional) Fix a crash problem on HPUX versions which would
1436:   reliably happen on some machines at startup.
1437: 
1438: 3.3.3
1439: * Modify the wrapper.ignore_signals property so it now takes the values
1440:   WRAPPER, JAVA, and BOTH, in addition to TRUE and FALSE.
1441: * Modify the WrapperManager so it is now careful never to poll the native
1442:   library once the JVM is flagged as being ready to shutdown.  This is to
1443:   make sure that the JVM never exits in the middle of a call as that could
1444:   lead to the JVM crashing.
1445: * Add a pair of methods to allow threads to request and release locks which
1446:   will prevent the Wrapper from letting the JVM exit while certain operations
1447:   are in progress.  See WrapperManager.requestShutdownLock() and
1448:   WrapperManager.releaseShutdownLock().
1449: * Fix a problem where interactive services would sometimes leave a console
1450:   window visible when after starting up.  The Wrapper is now more resilient
1451:   about closing the window even if it fails to do so initially.
1452: * Add a new integration method (#4), which makes it easy to configure the
1453:   Wrapper to execute an executable jar file.
1454: * Fix a problem where the random generator was not being seeded correctly
1455:   before naming the Wrapper's console window when running as a Windows
1456:   service.  This was leading to problems identifying the wrapper's console
1457:   when more than one service was running on the same machine.
1458: 
1459: 3.3.2
1460: * Add a file information record to the wrapper.exe and wrapperw.exe binaries
1461:   so the Version tab will be displayed correctly in the Properties dialog of
1462:   the file.
1463: * (Standard, Professional) Fix a problem with the wrapperw.exe binary where
1464:   the log dialog was not being displayed correctly when the Wrapper was
1465:   launched with the "-?", "-v", or "-h" arguments.
1466: * (Standard, Professional) Fix a problem with the wrapperw.exe binary where
1467:   a message was being displayed in the dialog with the location of the full
1468:   log file even if there had not been any entries written to the log.
1469: * (Professional) Improve the debug output produced when sending event emails
1470:   when the wrapper.event.<event_name>.email.debug property enabled.
1471: * (Professional) Add wrapper.event.<event_name>.email.send.timeout and
1472:   wrapper.event.<event_name>.email.receive.timeout properties to avoid the
1473:   wrapper hanging waiting for a response from a remote mail server.
1474:   Bug #2064885.
1475: * (Professional) Fix a problem where the Wrapper would get stuck and fail to
1476:   send emails with some mail servers.  Problems was being caused by incorrect
1477:   linefeeds in the body of the email.
1478: * Add a warning if the leading '#' is missing from an '#include' in the
1479:   configuration file to assist users with include file problems.
1480: * Added a new wrapper.ntservice.generate_console property which will cause
1481:   the Wrapper to always generate a console when running as a service and
1482:   then hide it immediately.  This will cause a slight flicker but is needed
1483:   to support thread dumps.  Bug #2060181.
1484: * Fix a problem in the Windows version where the console window would
1485:   sometimes be left visible when running as an interactive service even when
1486:   it was configured to be hidden.
1487: * Add support for PowerEvents so Windows services can respond to suspend
1488:   and resume events.
1489: * Fix a problem where the wrapper.key system property passed to the JVM was
1490:   being generated incorrectly randomly, 1 in 2048 times the JVM was launched.
1491:   This would result in the JVM failing to start and the Wrapper shutting down.
1492: * Add a new wrapper.disable_console_input to disable to feature which allows
1493:   the Wrapper to pass console input on to the Java process.
1494: * Fix a buffer overflow problem in the logging code which would happen once on
1495:   startup.  This was benign on most platforms but was causing intermittent
1496:   crashes in the 32-bit AIX version.
1497: * Modify the way configuration properties are parsed so that their names are
1498:   no longer case sensitive.
1499: * Modify the WrapperServiceException so that a new getErrorCode method can be
1500:   used to obtain the integer error code which caused the exception.
1501:   Feature Request #2188280.
1502: * (Standard, Professional) Fix a problem where on some Windows machines the
1503:   Wrapper would return a random hostId that changed each time the system was
1504:   rebooted.
1505: * (Standard, Professional) Make it possible to define License Keys so that
1506:   their property names are encoded using either the host name or hostId.  This
1507:   makes it possible to define multiple keys within the same configuration file,
1508:   visible on the same host.  This was necessary to support some load balanced
1509:   network adapters where the visible hostId changes depending on the active
1510:   physical network adapter.
1511: * Rework the Java side state engine so it is now possible for the Java side of
1512:   the Wrapper to respond to stop events while the WrapperListener.start method
1513:   is still in progress.
1514: * Add a new wrapper.listener.force_stop property which allows control over
1515:   whether the WrapperListener.stop method is called on shutdown even if the
1516:   WrapperListener.start method has not yet completed.
1517: * Fix a problem on Windows where the ability to start and stop the Wrapper as
1518:   a service using the Wrapper itself was requiring the Administrator permission
1519:   when a lower permission should have been possible.  The Wrapper should now
1520:   allow service control to do whatever is possible from the Services control
1521:   panel.
1522: * Fix a memory corruption error if the value of wrapper.java.maxmemory was more
1523:   than 4 digits in length.  wrapper.java.initmemory did not have any problems.
1524: * (Professional) Add a new wrapper.event.<event_name>.email.client.host
1525:   property which makes it possible to configure the host name sent in EHLO and
1526:   HELO commands to the SMTP server.
1527: * Add a new default environment variable, WRAPPER_HOST_NAME, which stores the
1528:   name of the machine where the Wrapper is running.
1529: 
1530: 3.3.1
1531: * Add debug output showing the current os name and architecture to aid in
1532:   debugging problems.
1533: * (Standard, Professional) Improve the message displayed when a license key
1534:   is found but is deemed to be invalid.
1535: * Modify the template wrapper.conf file to help users debug include file
1536:   problems.
1537: * Disable the console title feature on all UNIX platforms other than LINUX
1538:   because the console title does not get reset correctly when the Wrapper
1539:   process terminates.
1540: * Add support for HP-UX IA64 CPUs.
1541: * Update the license banner in source files so it is clearer that the user
1542:   is restricted by the license they agreed to.
1543: * Modify the Community edition so it will now display a Licensed to banner
1544:   on startup if shipped with a Development License.  This is required to
1545:   enable the distribution of the Community Edition under the Development
1546:   License.
1547: * (Professional) Fix a problem where the UNIX versions of the Professional
1548:   Edition would sometimes deadlock on startup when run as a daemon process.
1549:   Bug #1989355.
1550: * (Professional) Added two new events; jvm_failed_invocation and
1551:   jvm_max_failed_invocations.  Feature Request #1994718.
1552: * Fix a problem where the Windows service exit code was not being set
1553:   correctly when the JVM exited with a non-zero exit code.  The problem
1554:   could be seen by running "sc query {service}" from the command line.
1555:   Bug #1859061.
1556: * Added support for the Windows Itanium 64-bit platform.
1557: * Added support for the HP-UX Itanium 32 and 64-bit platforms.
1558: * Added support for the MAC OSX 64-bit platform.
1559: * (Standard, Professional) Fix a problem on Windows versions where servers
1560:   which reported a large number of possible host ids could cause a buffer
1561:   overflow on startup.   This crash was possible when using either
1562:   Development or Server licenses.  Removed duplicate host ids from the list
1563:   of possible ids.
1564: * Add a new "condrestart" command to the shell script which will restart
1565:   the Wrapper only if it is already running.  Feature Request #1928045.
1566: * Fix a problem where the 64-bit Solaris x86 version was unable to load its
1567:   JNI library.  Bug #1992039.
1568: * Fix a problem on Windows versions where a frozen JVM process was not always
1569:   being killed.  This could result in the zombie JVM processes being left
1570:   around that consumed memory and other resources.
1571: * Add a new wrapper.ignore_console_logouts property which allows the Wrapper
1572:   and JVM to survive logouts when launched as a console application from
1573:   another service.
1574: * (Standard, Professional) Add a wrapperw.exe binary in Windows implementations
1575:   which makes it possible to run the Wrapper without a console.  A console still
1576:   flickers for an instant when the Wrapper starts.  This is the same issue that
1577:   has existed when running as an interactive service and is required to make
1578:   thread dumping possible.
1579: * (Standard, Professional) Add new wrapper.logdialog.enable,
1580:   wrapper.logdialog.format, wrapper.logdialog.lines, and
1581:   wrapper.logdialog.loglevel properties used to configure the display of a Log
1582:   dialog when the wrapperw.exe binary exits in an error state.
1583: * Fix a problem where the Wrapper was attempting to reopen its backend port
1584:   even when the JVM was down.  This was only a problem when the defined port
1585:   range was limited to a single port with the wrapper.port.min and
1586:   wrapper.port.max properties.  In such a case one or more warning messages
1587:   were being displayed because the port is locked for a few moments after
1588:   being closed.
1589: * (Standard, Professional) The wrapper.initmemory.percent and
1590:   wrapper.maxmemory.percent properties were not correctly being calculated
1591:   relative to a maximum of 2048MB for 32-bit versions of the Wrapper.
1592:   Bug #2053167.
1593: 
1594: 3.3.0
1595: * Add a new wrapper.ping.interval.logged property which makes it possible to
1596:   reduce the debug output caused by ping transactions between the Wrapper and
1597:   JVM.
1598: * Fix a problem on Windows where the Windows Service Manager was not waiting
1599:   the full configured time of the wrapper.jvm_exit.timeout and
1600:   wrapper.shutdown.timeout properties.  This was leading to the net stop
1601:   command timing out and the system shutting down without the java application
1602:   having fully stopped.  Bug #1582568.
1603: * If internal firewalls were preventing the backend socket from being created,
1604:   it was not being made clear what the cause was.  It was also possible that
1605:   the JVM would deadlock on shutdown.  This second problem was recovered from
1606:   when the Wrapper killed the JVM.
1607: * Rework the console output from all Wrapper classes to make it much more
1608:   obvious that that is their source.
1609: * Submit a patch to the UNIX sh script by Chris Dance which makes it possible
1610:   to tell the shell to wait a few seconds for the wrapper to start up.  Also
1611:   includes some modifications to work correctly on older Debian and RedHat
1612:   systems.
1613: * Fix a problem where the local copy of ant was not always being used
1614:   correctly on UNIX systems which have a default copy of any installed.
1615:   Thanks to Robey Pointer for the patch.
1616: * Add the -lm to the command line when building Linux 32 and 64 bit versions
1617:   of the wrapper on Linux.  This is to support building on recent Debian
1618:   and Ubuntu versions.  Thanks to Robey Pointer for the patch.
1619: * Add support for the SIGUSR1 and SIGUSR2 signals so they can now trigger a
1620:   shutdown, restart or be forwarded to the JVM for custom functionality.
1621:   See the wrapper.signal.mode.usr1 and wrapper.signal.mode.usr2 properties.
1622:   Based on a patch by Robey Pointer.  Note that the JVM process does not
1623:   trap SIGUSR1 or SIGUSR2 signals as they are used internally by the JVM
1624:   as part of the garbage collection process.
1625: * Fix a problem where the WRAPPER_OS, WRAPPER_ARCH, and WRAPPER_BITS
1626:   environment variables were not being initialized correctly for the various
1627:   unix platforms.
1628: * Removed the 4096Mb upper limit set on the wrapper.java.initmemory and
1629:   wrapper.java.maxmemory properties.  64bit users need to go way beyond that.
1630: * Fix a problem where relative include file references in the configuration
1631:   file were not working correctly if the wrapper.working.dir was used to
1632:   change the working directory.  The working directory is now always reset
1633:   to its original value as the configuration file is being loaded.
1634: * Added a new wrapper.registry.java_home property which makes it
1635:   possible to specify the location of java within the registry.
1636: * Set a new WRAPPER_JAVA_HOME environment variable if the JAVA_HOME is
1637:   located in the Windows registry.
1638: * Modify the way properties are looked up so that any unreplaced environment
1639:   variable references will be reevaluated in case they were set after the
1640:   property was originally set.  This is possible with some WRAPPER_*
1641:   environment variables or depending on the placement of set.* properties
1642:   in the configuration file.
1643: * Set any unset properties to their default values internally.  This is
1644:   necessary so the WrapperManager.getProperties() method returns the
1645:   correct set of active properties.
1646: * Fix an occasional crash with 64-bit UNIX caused by a native synchronization
1647:   problem when system signals are trapped.  Bug #1614010.
1648: * Fix a problem on Solaris versions, where the Wrapper was not correctly
1649:   recovering and attempting another back end port when the first was already
1650:   in use.  Bug #1594073.
1651: * Fix a problem on Solaris and AIX where the RUN_AS_USER feature of the
1652:   shell script was not working due to lack of support for the "-m" option of
1653:   su.  The shell script now uses "su -".  Bug #1590168.
1654: * Add HP-UX Makefiles for building with make.  Fix some problems in the
1655:   shell script to make the script work better on HP-UX.  Thanks to David
1656:   Brown and Nicolas Varney for the patches.
1657: * Fix a problem where any signals received by the JVM and triggering a
1658:   SIGCHLD signal in the Wrapper were being interpretted as the JVM having
1659:   stopped.  This was not always true.  Bug #1643666.
1660: * The Wrapper is now able to detect when the JVM process is stopped and
1661:   continued.  It will still timeout if stopped, but a descriptive warning
1662:   is now logged.
1663: * Increase the maximum number of log entries which can be queued to avoid
1664:   losing them.  These are only used for log entries outside of the primary
1665:   thread.
1666: * Fix a problem in the shell script which was making it impossible to stop
1667:   the Wrapper or query its status on OSX.
1668: * Add support for 64 bit AIX.  Thanks to Nicolas Varney for supplying a
1669:   Makefile.
1670: * Correct the AIX library extension to be ".a".
1671: * Rename the UNIX Makefiles so it is more obvious which tool must be used
1672:   to build with them.
1673: * Fix a problem where the HP-UX native library would not be located
1674:   correctly for some processor types if the file had a platform specific
1675:   name.
1676: * Internally rename the WRAPPER_JSTATE_LAUNCH state to
1677:   WRAPPER_JSTATE_LAUNCH_DELAY for clarity.
1678: * Fix a problem where the UNIX versions of the Wrapper would shutdown
1679:   rather than restarting a frozen JVM if the arrival of the SIGCHLD signal
1680:   from the old JVM process was delayed by more than a second or two.
1681: * Rework the Windows build so it now uses nmake and a Makefile rather than
1682:   vcbuild.  This is probably not as clean, but it was needed to get the
1683:   64-bit build working.
1684: * Fix a problem on Windows versions where quoted values specified from the
1685:   command line were not always being requoted correctly when generating the
1686:   java command line.
1687: * Add validation checks for Windows versions to make sure that all additional
1688:   parameters, application arguments, the classpath, and library path all
1689:   contain values which are quoted correctly.  Incorrectly quoted values will
1690:   now result in a warning message that will help resolve the problem.
1691: * Fix a memory leak when calling WrapperManager.listServices() on Windows.
1692:   Bug #1665947.
1693: * Fix a buffer overflow problem if the Wrapper was launched without explicitly
1694:   specifying a configuration file.
1695: * Add tests of the return values of all malloc calls to catch out of memory
1696:   errors and recover as gracefully as possible.  Bug #1649880.
1697: * Modify the WrapperManager.signalStarting and signalStopping methods so that
1698:   they will never have the effect of shortening the existing timeout.
1699:   Updated the javadocs of both methods so they more accurately reflect what
1700:   the methods do.
1701: * Move the Wrapper Copyright banner into the Wrapper process so it will be
1702:   output more consistently.
1703: * Branch the code to support Community, Standard, and Professional Editions
1704:   of the Java Service Wrapper.
1705: * (Standard, Professional) Add support for Server (Fixed) as well as
1706:   Development (OEM based) licenses.
1707: * (Standard, Professional) Add 64-bit versions of the Windows version.  The
1708:   64-bit Community Edition will not be distributed initially to support
1709:   ongoing development costs.
1710: * (Professional) Add event handling callbacks for Wrapper start/stop, JVM
1711:   start/stop, JVM started/stopped, JVM restart, JVM killed, and JVM unexpected
1712:   exit events.
1713: * (Professional) Add the ability to send emails in response to any event
1714:   callback.
1715: * (Professional) Add the ability to execute a a user configured command in
1716:   response to any event callback.
1717: * Add WRAPPER_BIN_DIR and WRAPPER_WORKING_DIR environment variables which are
1718:   now available for use within the wrapper.conf file as well as by any child
1719:   processes.
1720: * Add documentation to the integration pages about existing system properties
1721:   that be used to control the way the WrapperSimpleApp and WrapperStartStopApp
1722:   handle application startup.
1723: * Remove support for native PPC and x86 distributions of the Wrapper for
1724:   MAC OSX in favor of the universal X-Code distribution.  This appears to be
1725:   the standard for the market and saves lots of time on testing.
1726: * Add a new '-it' command to the Windows version which makes it possible to
1727:   install and start a service as a single command.
1728: * Fix a problem where the PATH environment variable was not being set correctly
1729:   on Windows versions when run as a service if the wrapper.ntservice.account
1730:   was set and a PATH was set for both the SYSTEM and user accounts.
1731:   Bug #1702274.
1732: * Modify the shell script to set JAVA_HOME to the default JVM location on
1733:   OSX systems if it is not already set.  OSX always places the JVM in a known
1734:   location so this is possible.  Thanks to Andrew Williams for the patch.
1735: * Fix a problem where the UNIX shell script would fail if the APP_NAME was set
1736:   to a value containing spaces.  Thanks to Andrew Williams for the patch.
1737:   Bug #1695678.
1738: * Fix a problem where the DIST_ARCH was not being resolved correctly on HP-UX
1739:   systems.  Thanks to Matej Kraus for the patch.  Patch #1697421.
1740: * Log output from the timer thread was not being queued correctly, this could
1741:   have lead to timing problems if there were any delays writing to disk.
1742: * Add partial support for OS/400 into the build file.  Still needs a Makefile.
1743: * Fix a problem where the WrapperActionServer would deadlock in its stop method
1744:   if the JVM shutdown was initiated by a call to the shutdown or restart
1745:   actions.
1746: * Add support for wrapper.console.title on UNIX platforms.  Add a set of
1747:   wrapper.console.title.<platform> properties which make it possible to set the
1748:   title based on the platform.
1749: * Fix a problem where the wrapper.ntservice.account and
1750:   wrapper.ntservice.password properties were being stored in the system
1751:   registry if the they were specified on the command line when the Wrapper
1752:   was installed as a service.  This was broken in version 3.2.2.
1753:   Bug #1538725.
1754: * Fix a problem where the DUMP command was not working with the
1755:   wrapper.commandfile property when run as a service on Windows.
1756:   Bug #1644421.
1757: * Fix a problem where wildcards like "*.*" or "*" in a classpath property were
1758:   including the "." and ".." files on Windows versions.  Bug #1517928.
1759: * Modify the debug log output when the Wrapper is attempting to load its native
1760:   library in an attempt to make the expected failures less threatening.
1761: * Commit a patch by Rob Oxspring which adds the start_msg and stop_msg commands
1762:   to the shell script.  These are expected by init scripts on HP-UX.
1763:   Patch #1750027.
1764: * Add a DETAIL_STATUS flag to the UNIX shell script which will cause the
1765:   status, start_msg, and stop_msg commands to display the current internal
1766:   status of both the Wrapper and Java processes.
1767: * Commit a patch by Rob Oxspring which adds an init block to the UNIX shell
1768:   script to make it work with install_initd and remove_initd scripts used by
1769:   SUSE linux.  Patch #1750028.
1770: * Commit a patch by Travis Carlson, ia64 systems were being grouped as "x86"
1771:   systems.  They now are assigned the name "ia" which makes it possible to
1772:   create a distribution for them.  Patch #1663887.
1773: * (Standard, Professional) Add new wrapper.java.initmemory.percent and
1774:   wrapper.java.maxmemory.percent properties which make it possible to set
1775:   the initial and maximum memory values relative to the amount of physical
1776:   memory on the system.  Feature Request #1741051.
1777: * Add a new #include.debug declaration in the wrapper configuration file which
1778:   makes it much easier to debug problems with cascading include files.
1779: * Add -l and --controlcode commands to the Windows version which make it easy
1780:   to send user defined control codes to the Wrapper running as a service.
1781: * Fix a synchronization problem in the logging code which could result in
1782:   data corruption or access violations.
1783: * Add version numbers to the bat and sh scripts to make them easier to
1784:   support.
1785: * Make the wrapper.ntservice.name, wrapper.ntservice.displayname, and
1786:   wrapper.ntservice.description properties aliases of new wrapper.name,
1787:   wrapper.displayname, and wrapper.description properties as they are now
1788:   used on UNIX platforms as well as Windows.
1789: * Fix a problem where the wrapper would sometimes fail to send a packet to
1790:   the JVM because the sending of the packet would block.  Thanks to Peter
1791:   Gorgon for the patch.
1792: * Fix a problem where CPUs identifying themselves as 'ia64n' or 'ia64w' were
1793:   not correctly being categorized as 'ia'. Thanks to Stirling Chow for the
1794:   patch.  Patch #1859412.
1795: * Add -d and --dump commands to the Windows version which make it possible to
1796:   send thread dump requests to the Wrapper when running as a service.  Works
1797:   in association with the new wrapper.thread_dump_control_code property.
1798:   Feature Request #1118110.
1799: * (Professional) Add wrapper.timer.<n>.interval and wrapper.timer.<n>.action
1800:   properties which make it possible to schedule Wrapper shutdowns, JVM
1801:   restarts and thread dumps at arbitrary times.
1802: * Fix a problem where the default configuration file name was being corrupted
1803:   by a buffer overrun.  Thanks to Rob Joyce for the patch.  Patch #1879049.
1804: * Fix a problem where the WrapperManager would sometimes attempt to unregister
1805:   its shutdown hook after the shutdown hook had been initiated.  Bug #1799489.
1806: * Fix a problem where log files were limited to 2GB on Linux systems.
1807:   Bug #1881038.
1808: 
1809: 3.2.3
1810: * Add support for x86 Mac OS X distributions.
1811: * The 3.2.2 Windows version was accidentally released with its MFC libraries
1812:   dynamically linked.  This meant that anyone who did not have VS8 installed
1813:   were not able to run the Wrapper due to missing DLLs.  This version fixes
1814:   that snafu by correctly using statically linked libraries as was done in
1815:   previous versions built with VS6.  Bug #1578554.
1816: 
1817: 3.2.2
1818: * Correct a typo in the usage output of the WrapperStartStopApp.  Thanks to
1819:   Michael Giroux for pointing it out.
1820: * Fix a problem on OSF1 systems where the backend socket was not listening
1821:   correctly due to a backlog of 0.  This was broken in 3.2.0.  Thanks to
1822:   Phillip Gussow for supplying a patch.
1823: * Remove the com.silveregg.wrapper package classes that were deprecated in
1824:   version 3.0.0.
1825: * Fix a potential problem in the UNIX script where the lock file permissions
1826:   were not being set correctly if the LOCKFILE and RUN_AS_USER variables are
1827:   specified but the group of the specified user could not be resolved.
1828: * Fix a problem where the exit code returned by WrapperListener.stop was being
1829:   ignored in some cases.
1830: * Fix a problem where the shell script would not work correctly when the
1831:   wrapper or its configuration files were located in a directory path
1832:   containing spaces.
1833: * Apply a series of patches by Michael Saya to get the Windows 64 bit build
1834:   working.
1835: * Fix a problem in UNIX versions where the SIGTERM handler was being disabled
1836:   when a SIGCHLD was received.
1837: * Added support in UNIX versions for the SIGHUP signal.
1838: * Migrated the source to Subversion from CVS.  Did a bunch of cleanup in the
1839:   source, removing CVS specific tags.
1840: * Fix a problem in UNIX versions were the pid file specified by the
1841:   wrapper.java.pidfile property contained the wrapper pid rather than the
1842:   jvm pid.  Bug #1565011.
1843: * Fix a problem in UNIX versions where the file specified by the
1844:   wrapper.java.pidfile property was not always being deleted when the JVM
1845:   process went away.
1846: * A user encountered a JVM bug where calls to System.exit were resulting in
1847:   an IllegalThreadStateException being thrown.  Added some code to trap this
1848:   and shut down the JVM using other means to avoid a hang during shutdown.
1849: * Fix a NullPointerException caused by users incorrectly implementing
1850:   an Integration Method #3 class and then calling WrapperManager.start with
1851:   a null value for the args parameter.
1852: * Update the banner displayed by the Wrapper on startup to include a
1853:   copyright notice.  Please see the license page of the documentation for
1854:   details.
1855: * Add a new 'Z' log format which will log the time to millisecond accuracy.
1856: * Fix a problem where the JVM exit code was not being set correctly when
1857:   the JVM was shutdown using WrapperManager.stopImmediate().  The exit code
1858:   of the Wrapper was being set correctly through other means however.
1859: * Fix a potential synchronization problem in the logging code if a JVM exits
1860:   with debug output enabled.
1861: * Updated the WrapperListener.stop method javadocs to better explain the
1862:   exitCode value under certain exit modes.
1863: * On UNIX versions, add a log message which records the signal that caused
1864:   the JVM process to exit when it terminates unexpectedly.
1865: * Fix a problem where the wrapper.on_exit.<n> property was not working
1866:   correctly in some cases on UNIX.  With help from Andreas Schafer.
1867: * Add support for building the Wrapper with Visual Studio 8 for Windows.
1868:   Releases will now be done using this compiler.
1869: * Fix a CRITICAL bug in the 3.2.0 and 3.2.1 Windows versions of the Wrapper
1870:   where the Wrapper would crash under rare circumstances when running as a
1871:   service.  If the service manager interrogated the service at the same
1872:   instant as the wrapper was pinging the JVM, the wrapper was sometimes
1873:   crashing due to a synchronization problem.   The problem did not exist
1874:   prior to 3.2.0.  Bug #1574537.
1875: * Fix a minor logging problem where the 'D' format was not displaying the
1876:   correct thread name for queued log messages.
1877: 
1878: 3.2.1
1879: * Fix a problem with the solaris-sparc-64 makefile.
1880: * Add a solaris-x86-64 makefile.
1881: * Merge in a patch by Hugo Weber to make it possible to configure the Wrapper
1882:   to pull the JRE from the system registry on windows.
1883: * Fix a batch file bug added in 3.2.0 where the scripts would not function
1884:   correctly if the full path to the batch file contained spaces.
1885:   Bug #1450601.
1886: * Modify the message shown when a native library fails to load so the
1887:   exception message text is now shown in the log without having to enable
1888:   debug log output.
1889: * Modify the UNIX shell script to be more informative if the script is unable
1890:   to locate a wrapper binary due to a executable bit permission problem.
1891: * Fix a minor permission problem with the build for the delta-pack.
1892: * Commit a patch by Juergen Hermann to make the error shown when realpath
1893:   fails clearer.
1894: * Add the ability to use a default wrapper.conf file that is in the same
1895:   directory as the wrapper binary.  The file will be named based on the
1896:   name of the wrapper binary.
1897: * Synchronize the command line so that both the Windows and UNIX versions
1898:   are now the same.  The old command line syntaxes are now supported
1899:   everywhere so there will be no compatibility problems.
1900: * It is no longer possible to specify arguments using the '/c' syntax.
1901:   This was undocumented so hopefully it is not being used.  The documented
1902:   '-c' syntax must now be used.  The change was necessary to synchronize
1903:   the command line between UNIX and windows platforms.
1904: * The 32-bit HP-UX 3.2.0 build was generating a libwrapper.so file rather
1905:   than libwrapper.sl.
1906: * Make the WrapperManager.setConsoleTitle, getWrapperPID, and getJavaPID
1907:   methods available through JMX.
1908: * Fix a state engine problem introduced in 3.2.0 which was causing the
1909:   wrapper.on_exit.<n> properties to be ignored in most cases.
1910: * Fix a potential problem that could have caused crashes when debug logging
1911:   was enabled.
1912: * Fix a problem where signals were not being handled correctly on some UNIX
1913:   platforms, including AIX.  This was making it impossible to shutdown the
1914:   wrapper cleanly with the TERM signal.  Bug #1477619.
1915: * Add new default environment variables which can be referenced in a
1916:   configuration file to configure platform specific directories and file
1917:   names.  WRAPPER_OS, WRAPPER_ARCH, and WRAPPER_BITS.
1918: * Add a -v argument to make it possible to request the version from a wrapper
1919:   binary.
1920: * Add support for registering the WrapperManager MBean with the
1921:   PlatformMBeanServer when run on a 1.5+ JVM.  See the JMX section in the
1922:   documentation for details.
1923: * Rework the way timeout properties are handled.  Values of 0 now actually
1924:   disable the timeouts rather than setting them to a large value.  To avoid
1925:   overflow problems when converting to internal timer ticks, timeouts are now
1926:   restricted to a maximum of 20 days, or 1728000 seconds.  Change affects the
1927:   wrapper.cpu.timeout, wrapper.startup.timeout, wrapper.ping.timeout,
1928:   wrapper.shutdown.timeout, and wrapper.jvm_exit.timeout properties.  For
1929:   values less than 20 days, there should be no change in functionality.
1930: * Add support for debuggers.  The Wrapper will now show a warning on startup
1931:   and then again the first time a timeout occurs.  But all timeouts will be
1932:   ignored.  This is to avoid problems with the Wrapper restarting a suspended
1933:   JVM in the middle of a debugging session.  The wrapper enters this mode if
1934:   the wrapper.java.command ends with the string "jdb" or "jdb.exe", or the
1935:   "-Xdebug" parameter is passed to the JVM.
1936: * Add 'athlon' to the list of supported architectures.
1937: * Fix a problem where the environment variables loaded when a service was
1938:   started were always the system environment even if the service was running
1939:   as a specific account.  The environment of a specific account will now be
1940:   loaded on top of the system environment if the USERNAME environment
1941:   variable is set by the system.  Bug #1491138.
1942: * Added new wrapper.ntservice.pausable and wrapper.ntservice.pausable.stop_jvm
1943:   properties to make it possible to pause and resume the Wrapper when installed
1944:   as a Windows service.
1945: * Added new Pause and Resume batch files as well as modified the command batch
1946:   file to support pause and resume.
1947: * Added PAUSE and RESUME commands for use by the wrapper.commandfile property.
1948: * Fix a problem with the wrapper.pidfile, wrapper.java.pidfile,
1949:   wrapper.anchorfile, wrapper.commandfile, wrapper.statusfile,
1950:   wrapper.java.statusfile, wrapper.java.idfile, and wrapper.lockfile
1951:   properties where forward slashes in paths were not being changed to back
1952:   slashes on Windows versions.
1953: * Simplify the code used to load a native library by using the
1954:   System.mapLibraryName method rather than doing the same thing manually.
1955: * Add a new wrapper.syslog.facility property which makes it possible to
1956:   specify the syslog facility on UNIX systems.  Thanks for the patch from
1957:   Bruce Pennypacker.
1958: * Removed the custom thread counting used to keep track of when the wrapped
1959:   Java application has completed.  It is now done in a different way that
1960:   will work on all Java implementations without requiring any special
1961:   consideration of the current JVM.   Deprecated the
1962:   wrapper.monitor_thread_count and wrapper.thread_count_delay properties.
1963:   Bug #1470265.
1964: * The WrapperStartStopApp helper class still requires thread counting if the
1965:   stopWait parameter is set to true.  Previous versions all hardcoded the
1966:   system thread count to 1 which worked for most JVMs.  A new system property,
1967:   org.tanukisoftware.wrapper.WrapperStartStopApp.systemThreadCount, was added
1968:   to make it possible to customize.  It currently defaults to 1.
1969: * Make it possible to extend the WrapperSimpleApp and WrapperStartStopApp
1970:   helper classes.  Feature Request #1510274.
1971: * Add warning messages if the old org.silveregg.wrapper package classes are
1972:   still being used.  They will be removed in the next release.
1973: 
1974: 3.2.0
1975: * Rework the release cycle so that the wrapper.jar file released for all
1976:   platforms is now built on the same machine.  This resolves a few
1977:   incompatibility problems caused by jars built on very new JVMs but run
1978:   on old JVMs.
1979: * Add additional output when the JVM can not be launched due to security
1980:   restrictions on Windows.
1981: * Greatly improved the performance of file logging.  On a windows test machine
1982:   3.1.2 could log 67210 lines of output in 20 seconds with a 80-15% split
1983:   between the Wrapper and JVM process CPU usage.  It now outputs 215214 lines
1984:   with a 64-34% split, also showing less load on the system process.  This is
1985:   a 220% increase in performance.  In both cases, the JVM was completely idle
1986:   other than the console output which makes the Wrapper appear to be a bit of
1987:   a CPU hog.  In fact it is the only process doing any work in this case.
1988:   This improvement was accomplished by keeping the log file open unless idle.
1989:   The idle time can be controlled using the new
1990:   wrapper.logfile.inactivity.timeout property.  The speed increase on UNIX
1991:   platforms was much smaller at around 10%.
1992: * Add a new property, wrapper.disable_restarts, which will completely disable
1993:   the Wrapper's ability to restart JVMs.
1994: * Add a pair of new properties, wrapper.port.min and wrapper.port.max, which
1995:   make it possible to define the port range used when a specific wrapper.port
1996:   is not specified.
1997: * Fix a problem where certain characters like umlauts were being stripped from
1998:   property values.  Bug #1049528.
1999: * Make the PIDs of the Wrapper and Java process easier to access by providing
2000:   a new pair os system properties; wrapper.pid and wrapper.java.pid, as well
2001:   as a new pair of methods; WrapperManager.getWrapperPID() and
2002:   WrapperManager.getJavaPID().
2003: * Add a new WrapperEventListener class which can be implemented to receive
2004:   a wide variety of events from the Wrapper.
2005: * Add a WrapperServiceControlEvent class which will report any service control
2006:   codes received by the Wrapper as it is running as an NT service.   This was
2007:   added to make it possible for other applications to sent custom codes to the
2008:   Wrapper using the Window Service Manager.
2009: * Add a WrapperManager.listServices() method which can be used to obtain the
2010:   status of all services on a Windows system.
2011: * Add a WrapperManager.sendServiceControlCode() method which makes it possible
2012:   to start, stop, pause, continue, any service on Windows systems.  It is also
2013:   possible to send custom user codes via the service manager.
2014: * Add comments in the sh script to support the chkconfig command.
2015: * Implement the ability to read from standard input via System.in.  Feature
2016:   Request #1024693.
2017: * Made the tick based timer the default by changing the default value of the
2018:   wrapper.use_system_time property to false.  Most users should see an
2019:   improvement in reliability under heavy loads with this new setting.  If you
2020:   have extended any timeouts in the past, you may wish to try going back to
2021:   defaults as they may no longer need to be extended.
2022: * Add a new wrapper.restart.reload_configuration property which causes the
2023:   Wrapper to reload its configuration file immediately before a JVM restart.
2024:   Properties which can not be reloaded have comments stating that fact in
2025:   their documentation.  Feature Request #981060.
2026: * Fix a problem in the UNIX shell script which was preventing the script from
2027:   locating the PID and anchor files when the wrapper.working.dir property was
2028:   used.
2029: * Modify UNIX versions so that the wrapper binary will now force its working
2030:   directory to the location of the wrapper binary.   This change was made to
2031:   make the UNIX version work the same way as the Windows version and thus make
2032:   configuration files that modify their working directory work correctly on
2033:   a cross platform basis.  Users which have been using the scripts supplied
2034:   with the Wrapper should not encounter any problems.  Other users may require
2035:   slight changes to their configuration file to deal with the new way that the
2036:   Wrapper deals with its initial working directory.
2037: * Add a new method WrapperManager.getProperties() which makes it possible to
2038:   access any property in the Wrapper configuration file.
2039: * Fix a problem where TERM signals were not being correctly ignored by the
2040:   JVM process on UNIX platforms even if the wrapper.ignore_signals property
2041:   was set to true.   Earlier versions of the Wrapper would generate a
2042:   WRAPPER_CTRL_SHUTDOWN_EVENT when a TERM signal was received.   On Windows
2043:   that signal should never be ignored.  To resolve this a new
2044:   WRAPPER_CTRL_TERM_EVENT was added making it possible to selectively ignore
2045:   the TERM signals.  This change may affect user implementations of the
2046:   WrapperListener.controlEvent() method.  Bug #1086344.
2047: * The Windows version has a feature which allows the user to immediately kill
2048:   the Wrapper and its Java application without waiting for a clean shutdown
2049:   by pressing CTRL-C twice.  Windows sends the CTRL-C signal to both the
2050:   Wrapper and Java processes.  Due to a rare timing problem, it was possible
2051:   for the Java process to get the signal first and initialize a shutdown
2052:   before the Wrapper could respond to the signal.  In this case the Wrapper
2053:   was interpreting this as a second CTRL-C signal even though the user only
2054:   pressed it once.
2055: * If the wrapper.anchorfile or wrapper.pidfile properties are used on Windows
2056:   they were being unintentionally deleted if the -t, -p, -i, or -r commands
2057:   were used while another Wrapper instance was running.  In the case of the
2058:   anchor file, this would result in the Wrapper being shutdown unintentionally.
2059:   This was not an issue on non-Windows versions.  Bug #1108517.
2060: * Fix a security problem where the value of the wrapper.ntservice.account
2061:   and wrapper.ntservice.password properties were being stored in plain text
2062:   within the registry if they were specified on the command line when
2063:   installing the Wrapper as a Windows service.  Bug #1110183.
2064: * Add a pair of properties wrapper.ntservice.password.prompt and
2065:   wrapper.ntservice.password.prompt.mask which which will cause the Wrapper
2066:   to prompt the user for an account password when it is being installed as
2067:   an NT service.
2068: * Added system properties to make it possible to configure whether or not
2069:   the WrapperSimpleApp and WrapperStartStopApp helper classes will wait
2070:   for the configured main methods to complete before reporting that the
2071:   application has started.  See the javadocs for these classes for more
2072:   details.
2073: * Modify the HP-UX build so that it now dynamically links with the pthread
2074:   library.  This was to make the binaries work with HP-UX 11.00.  Thanks to
2075:   Sun Kun Choi for the patch.
2076: * Add new wrapper.statusfile and wrapper.java.statusfile properties which can
2077:   be used by external applications to monitor the internal state of the Wrapper
2078:   or JVM at any given time.  These will not be useful to most users.
2079: * Add a new wrapper.commandfile property which can be used by external
2080:   applications to control the Wrapper and its JVM.
2081: * Add a new wrapper.java.idfile property which can be used by external
2082:   applications to monitor the internal state of the JVM at any given time.
2083: * Add a warning on startup if the JVM has a SecurityManager set but the
2084:   wrapper.jar has not been granted the AllPermissions permission.  Failure
2085:   to do so will almost certainly lead to the Wrapper throwing a number of
2086:   errors and this helps to point out the cause.
2087: * Add a security model which protects most Wrapper method calls when a
2088:   SecurityManager has been registered.  See the Security Model section
2089:   for more details.
2090: * Add a new pair of batch files which can be used to start and stop the
2091:   Wrapper when installed as a service.
2092: * Add new -q and -qs commands to the Windows version of the Wrapper which
2093:   make it possible to query the currently installed status of the service.
2094: * Fix a problem where the wrapper.java.library.path.append_system_path
2095:   property was not working correctly on Windows when the system PATH
2096:   contained quotes.  Bug #1238726.
2097: * Modify the usage output of the Wrapper on all platforms so the Wrapper's
2098:   version is now included.  It was not previously possible to get the version
2099:   of the Wrapper being used without launching a JVM.
2100: * Add a pair of new methods WrapperManager.stopAndReturn() and
2101:   WrapperManager.restartAndReturn() which make it possible for code to
2102:   stop or restart the JVM and then continue until the JVM is shutdown.
2103:   This can be useful for shutdowns initiated within places like servlets,
2104:   whose operation is expected to complete.
2105: * Fix a problem on UNIX where the child JVM was sometimes leaving around
2106:   zombie processes after a restart.  The SIGCHLD signal was not being handled
2107:   correctly.  Thanks to Traun Leyden for the patch.  Bug #1291201.
2108: * Implement the ability to catch control events using the WrapperEventLisener.
2109:   Feature Request #836975.
2110: * Add new wrapper.jvm.port, wrapper.jvm.port.min, and wrapper.jvm.port.max
2111:   properties which make it possible to control the port the JVM uses to open
2112:   a connection back to the JVM.  The Wrapper uses to leave this up to the
2113:   OS, but some users were having problems with the default conflicting with
2114:   other ports.
2115: * Switch from using ftime() to gettimeofday() on UNIX platforms to work around
2116:   a problem where the Wrapper would not run on new versions of OSX because
2117:   they deprecated the ftime() function call.  Thanks for the patch by
2118:   Michael Macaluso.  Bug #1313162.
2119: * Remove the shutdown timeout from the UNIX shell script.  It is not needed
2120:   and can cause a zombie JVM if the wrapper's internal shutdown timeout was
2121:   longer than that of the shell script.
2122: * Add the ability to specify integer property values in base 8 or 16 in
2123:   addition to base 10.  Base 8 values start with a '0' and base 16 values
2124:   start with a '0x'.
2125: * Make it possible to set the umask on all files created by the Wrapper
2126:   as well as the default umask of files created by the JVM.  Added new
2127:   wrapper.umask, wrapper.java.umask, wrapper.pidfile.umask,
2128:   wrapper.lockfile.umask, wrapper.java.pidfile.umask,
2129:   wrapper.java.idfile.umask, wrapper.statusfile.umask,
2130:   wrapper.java.statusfile.umask, wrapper.anchorfile.umask, and
2131:   wrapper.logfile.umask properties.
2132: * Improve the message when the native library can not be loaded to make mention
2133:   of the possibility of a 32/64 bit mismatch.
2134: * Add a new wrapper.monitor_thread_count property which makes it possible to
2135:   disable the Wrapper's counting of non-daemon threads and thus the shutting
2136:   down of the JVM when they have all completed.
2137: * Add support for BELOW_NORMAL and ABOVE_NORMAL options to the
2138:   wrapper.ntservice.process_priority property.  Feature Request #1373922.
2139: * Ignore '#' characters which are included within double quotes in the value
2140:   of a property in the configuration file.  Unquoted values must be escaped
2141:   with a second '#' characters or it will be interpreted as a comment.
2142: * Display the Wrapper banner in the JVM earlier so that it is displayed
2143:   even where there are startup errors.
2144: * Modify the WrapperSimpleApp and WrapperStartStopApp classes so that the
2145:   WrapperManager is always initialized immediately.  This makes the output
2146:   clearer in the event of startup errors.
2147: * Fix a problem where the Windows ServiceManager was not correctly reporting
2148:   a startup error if a service failed on startup.  The service was being
2149:   reported as having started even though it failed to start.
2150: * Fix a problem on UNIX versions where the Wrapper would go into a recursive
2151:   state of attempting to launch the JVM from failed child processes if there
2152:   was any problems executing the configured java process.
2153: * Rework the way the RUN_AS_USER setting in the UNIX shell script works so
2154:   the specified user is now set regardless of the command being executed.
2155:   To make sure the user never has to enter the password twice when running
2156:   the script, it now recurses after changing the user.  The script then
2157:   runs entirely as the configured user.
2158: * Improve the message that is displayed when attempting to start, stop, or
2159:   remove a windows service which is not installed.
2160: * Add new wrapper.lockfile property which makes it possible to specify a
2161:   lock file containing a pid.
2162: * Modified the sh script so it now creates a lock file on startup in the
2163:   /var/lock/subsys directory if it exists.  This is needed by fedora systems
2164:   on shutdown.
2165: * Store javadocs in tar distibutions in a nested tar file to avoid problems
2166:   with long filenames in some tar distributions.
2167: * Fix a problem with the WrapperSimpleApp and WrapperStartStopApp helper
2168:   classes where on heavily loaded systems it was possible for the Wrapper
2169:   to get a running thread count of 0 and shutdown before the main thread
2170:   had a chance to be started.
2171: * Add a new wrapper.thread_count_delay property which will force the
2172:   WrapperManager to wait the specified number of seconds before it begins
2173:   to check the number of running threads.
2174: * Fix a problem where the wrapper.java.library.path.append_system_path
2175:   property was appending the PATH rather than the LD_LIBRARY_PATH environment
2176:   variable on Unix systems.  PATH is correct for Windows systems.
2177: * Add a new wrapper.logfile.rollmode property which makes it possible to
2178:   control how and when the logfile is rolled.  Feature Requests #864463,
2179:   #1085097, and #1085850.
2180: * Fix a problem on Linux where the test for the status of the Java child
2181:   process would sometimes fail causing the Wrapper to shutdown with the
2182:   error "Critical error: wait for JVM process failed (No child processes)"
2183:   rather than restart the child JVM.  Users who encountered this problem
2184:   found it easy to reproduce, but it only happened on some systems.
2185: * Modify the way the UNIX shell script tests for the existence of a process
2186:   matching the pid in an existing pid file.  It now verifies the process
2187:   command as well as the pid to fix a system reboot problem where a stale
2188:   pid has been reused by another application, making the script think the
2189:   wrapper was already running.
2190: * Add support for the GNU libjcj JVM.  Like JRocket, it requires slightly
2191:   different thread counting.
2192: * Add support for Linux 64-bit PPC and Solaris 32-bit x86 versions.
2193: * Add a new set.default.ENV syntax to the configuration file making it
2194:   possible to environment variable values which do not overwrite existing
2195:   values, ie. to specify a default value.
2196: * Added a new wrapper.console.flush property which forces the wrapper to
2197:   explicitly flush stdout after each line of log output.
2198: * Change the error shown when the JVM shuts down prematurely during a
2199:   shutdown to a warning message.
2200: * Fix a problem where the Wrapper would show the following error message
2201:   if user code called System.exit from within the WrapperListener.stop
2202:   callback method.  This would happen if the stop class's main method
2203:   registered with the WrapperStartStopApp called System.exit.
2204:   "JVM exited unexpectedly while stopping the application."
2205:   Bug #945976.
2206: * Add a new wrapper.syslog.ident property which makes it possible to
2207:   specify the identity used in syslog entries on UNIX.  This was possible
2208:   in older versions but was set using the wrapper.ntservice.name property.
2209:   Bug #1432855.
2210: * Add support for MacOSX Universal Binary distributions.
2211: * Add support for Delta Pack distributions.  This is a distribution that
2212:   contains the binaries of multiple platforms.
2213: 
2214: 3.1.2
2215: * Modify the way boolean system properties are resolved by the WrapperManager
2216:   so it is now possible to set them to true or false rather than assuming they
2217:   are true if set.
2218: * Fix a problem where some localized error messages were not having their
2219:   tokens replaced correctly.
2220: * Fix a problem when using the WrapperStartStopApp helper class.  The usage
2221:   text was incorrectly being displayed in the console if an exception was
2222:   thrown while executing the main method of the configured stop class.  This
2223:   did not change the functionality of the application, but it did cause some
2224:   confusion.
2225: * Fix a problem on Windows where a library path or class path which ended in
2226:   a backslash was preventing the Wrapper from launching the JVM.  The Windows
2227:   OS was using the backslash to escape the quote used to close the path.  The
2228:   fix was to add a second backslash where needed.
2229: * Added a new wrapper.java.command.loglevel property which makes it possible
2230:   to control the log level of the generated java command.
2231: * Add support for escaped quotes when stripping quotes on UNIX for the
2232:   wrapper.java.additional.<n> and wrapper.app.parameter.<n> properties.
2233: * Change the default value of wrapper.jvm_exit.timeout from 5 to 15 seconds.
2234:   The old default was too fast for some applications which take a while to
2235:   exit.  Applications which were exiting promptly will not see any difference.
2236: * Fix a problem where the JVM would restart at certain times when using the
2237:   system time based timer due to an overflow error.  This problem was
2238:   introduced in 3.1.0.  Due to a separate bug in 3.1.0, the Wrapper would
2239:   shutdown rather than simply restarting the JVM as was happening in 3.1.1.
2240:   The last restart happened on Aug 21, 2004.  It will next occur Oct 10, 2004
2241:   and repeat at regular intervals.  There are no problems when using the new
2242:   Tick based timer.  Bug #1014405.
2243: * Correct the wrapper.logfile.maxsize property so that a a kilobyte is now 1024
2244:   rather than 1000, and a megabyte is a megabyte.  We aren't a hard drive
2245:   manufacturer after all.
2246: * Add try-catch blocks around all thread entry points in the Windows version.
2247:   This has always been done in the main function, but these blocks will help
2248:   to narrow down the cause of problems should they ever be encountered in
2249:   control or service handlers.
2250: * Centralize shutdown code on UNIX version in an appExit method as was already
2251:   being done for Windows versions.
2252: * Fix a problem where the build.sh was not correctly using the included ant
2253:   if an ANT_HOME environment variable was defined.
2254: * Add a new wrapper.single_invocation property which will prevent multiple
2255:   invocations of an application from being started on Windows platforms.
2256:   The shell script handles this on UNIX platforms.  Feature Request #889123.
2257: * Fix a crash problem introduced in 3.1.1, caused by a pair of uninitialized
2258:   pointers.  The crash was possible on all platforms but would only happen
2259:   if the Wrapper was started without any arguments.  It would not affect
2260:   users running the Wrapper normally.  Bug #1018481.
2261: * Fix a problem with the run as user feature of the shell script on Solaris.
2262:   Needed to be using /usr/xpg4/bin/id rather than /usr/bin/in if available.
2263:   Bug #1024008.
2264: * Replace calls to usleep with nanosleep on platforms where it is available.
2265:   This was to fix an occasional hang on a specific Solaris machine.  It would
2266:   occasionally hang on calls to usleep.  From research, it appears that usleep
2267:   has problems when signals are encountered while sleeping.  Still testing
2268:   whether or not this change solved the problem.
2269: * Upgrade the version of Ant included with source releases to 1.6.2 to fix
2270:   some problems generating jni headers when building with Java 1.4.2.
2271: * Upgrade the version of Cocoon included with source releases to 2.0.4 to
2272:   fix some problems generating documentation using Java 1.4.2.
2273: * Display a warning if the exit status of a JVM process ever returns the
2274:   STILL_ACTIVE status on Windows.  There was no known problem here, just
2275:   noticed it while looking over the code.
2276: * Display a descriptive error message on Windows if the the JVM process crashes
2277:   due to an uncaught exception in native JVM code.
2278: * Add a test for invalid jvm arguments set using the wrapper.java.additional.<n>
2279:   properties.  Invalid arguments could cause the Wrapper startup to fail in
2280:   non obvious ways if they are mistaken by the JVM as the main class.
2281: 
2282: 3.1.1
2283: * Modified the way libwrapper.so is built on Solaris and Linux so that it
2284:   no longer statically links its required libraries.
2285: * Fix a file handle leak when calling WrapperManager.getUser or
2286:   WrapperManager.getInteractiveUser on Windows platforms.
2287: * Fix a problem introduced in 3.1.0 where the JVM would not be restarted
2288:   correctly if it quit after a ping timeout to let the Wrapper resynch and
2289:   restart it.
2290: * Fix a problem where CTRL-C was not being handled correctly if the console
2291:   was configured to be shown when running as an NT service.
2292: * Fix a problem where signals fired at UNIX versions of the wrapper were
2293:   not being handled correctly when the tick timer was being used.
2294: * Fix a synchronization problem in the logging code which would
2295:   occassionally cause the Wrapper to crash with an Access Violation.
2296:   The problem was only encountered when the tick timer was enabled,
2297:   and was only seen on multi-CPU systems.  Bug #949877.
2298: * Fix a problem when using the tick timer where the Wrapper would sometimes
2299:   exit on startup due to an uncaught SIGALRM.  Only reported on multi-CPU
2300:   Solaris systems.
2301: * Fix a problem where the Wrapper would sometimes hang on shutdown if
2302:   another thread called System.exit while the Wrapper was shutting down.
2303:   Bug #955248.
2304: * Fix a problem introduced in 3.1.0 where a very very large CPU timeout
2305:   warning message was being displayed if the system time was set back
2306:   while using the default system timer.
2307: * Added a new property, wrapper.anchorfile, which makes it possible to
2308:   cause the Wrapper to shutdown by deleting an anchor file.  The UNIX sh
2309:   script has been modified to optionally make use of this feature.
2310: * Add a debug message at startup which makes it clear which timer is being
2311:   used.
2312: * A Windows user reported that using forward slashes in the path the log
2313:   file was failing.  Avoid this problem by always converting '/' to '\'
2314:   in the wrapper.logfile property on Windows.
2315: * Fix a problem where it was not possible disable the wrapper log file as
2316:   documented in the wrapper.logfile property.  Most likely broken way back
2317:   in version 2.2.5.
2318: * Add some additional error checks after calls to control the pipe between
2319:   the JVM and Wrapper as well as improving the messages around other socket
2320:   related error messages.
2321: * Fix a problem on some HP-UX systems were not working correctly because
2322:   the EAGAIN and EWOULDBLOCK constants are not equal with some compilers.
2323: * Change some of the defaults in the src/conf/wrapper.conf.in file which
2324:   ships with the Wrapper to avoid confusion with new users.
2325: * Rewrote the routine which reads and logs console output from the JVM
2326:   for Windows versions.  Internal buffers are now scaled dynamically,
2327:   fixing a problem where long lines were being wrapped at 1024 characters.
2328:   This rewrite also resulted in a 4 fold increase in speed when the JVM is
2329:   sending large quantities of output to the console.
2330: * Increase debug output on UNIX platforms when a signal is caught.  When
2331:   possible, information about where the signal came from is now logged.
2332: * Modified the way log output from within signal handlers is handled so it
2333:   is now queued and then logged by the main event loop.
2334: * Back out a 3.1.0 change where a JVM that had failed to exit cleanly was
2335:   sent a SIGTERM prior to a SIGKILL.  The SIGTERM made no difference and
2336:   slowed down the forced shutdown.  A modification to the event loop made
2337:   the functionality more difficult to implement.
2338: * Add the ability to set the user that the Wrapper and its JVM will run as
2339:   from within the sh script on UNIX platforms.
2340: * Add an icon resource to the Wrapper binary on Windows versions.
2341: * Fix a typo in the UNIX sh script which caused an extra slash to be included
2342:   in the path of the pid file.  Was not causing any known problems.
2343: * Added support for 64-bit HP-UX.  Big thanks to Venkatesh Sellappa for
2344:   supplying the patch.
2345: * Fix a deadlock problem introduced in 3.1.0 with some FreeBSD systems.  Not
2346:   all users were experiencing it, but those who did were able to reliably
2347:   reproduce the problem.  The problem appears to have been caused by
2348:   FreeBSD bug #kern/64313.
2349: * Make the signal handling variables in the wrapper native library volatile.
2350:   Directly this was to fix a compiler warning on HP-UX64 systems but it
2351:   should also make the calls more efficient.
2352: 
2353: 3.1.0
2354: * The license was revised for this version to include a copyright omission.
2355:   This change is to be retroactively applied to all versions of the Java
2356:   Service Wrapper starting with version 3.0.0.  The changes should have
2357:   no effect on users.
2358: * The Online documentation and web site were both reworked.  The logo has
2359:   been updated so that Duke is no longer used.  The new online site now
2360:   has the ability for users to logon and append comments to any page.
2361: * Added a new batch file which accepts commands like the UNIX shell script.
2362:   The new file is offered as an alternative to the default batch files, and
2363:   can be found at src/bin/AppCommand.bat.in.  Thanks to Mike Castle for
2364:   donating the new script.
2365: * The Windows version of the Wrapper was not correctly registering that it
2366:   would accept SHUTDOWN messages when running as a service.  The Wrapper
2367:   was getting the message anyway so this should not change functionality.
2368:   Thanks to Jason Tishler for noticing this and sending in a patch.
2369: * Add a new property, wrapper.native_library, which can be used to specify
2370:   the base name of the native library which is loaded by the WrapperManager
2371:   class.
2372: * Modify the WrapperManager class so it now stores references to System.out
2373:   and System.err on initialization and always writes to those stored streams.
2374:   This makes sure that all Wrapper console output always goes to the
2375:   wrapper.log file even if user code overrides those streams with calls to
2376:   System.setOut and System.setErr.  This was necessary to prevent deadlocks
2377:   in such user code from affecting the functionality of the Wrapper.
2378: * Fixed a problem where some environment variables where not being correctly
2379:   loaded from the system registry when running as an NT service.  Big thanks
2380:   to Eric Smith for tracking this down and submitting a patch.  It turns out
2381:   that the putenv function was not being used correctly.
2382: * Modified the way the wrapper.conf file is loaded so it will now read the
2383:   contents correctly even if the line feeds in the file are incorrect for
2384:   the current platform.  Windows line feeds had been causing problems when
2385:   used on UNIX platforms.  Feature Request #829896.
2386: * Added a new property, wrapper.ntservice.console, which allows a console to
2387:   be displayed when running as an NT service.
2388: * Fixed a problem where the request thread dump on failed JVM exit feature
2389:   had never worked when running as an NT service.  Bug #831775.
2390: * Add a new property, wrapper.console.title, which makes it possible to set
2391:   the title of the console in which the Wrapper is currently running.  This
2392:   currently only works on Windows platforms.
2393: * Added a new method, setConsoleTitle, to the WrapperManager class which
2394:   enables the application to dynamically set the console title.  Like the
2395:   wrapper.console.title property, this only works on Windows platforms.
2396: * Improved the algorithm of the request thread dump on failed JVM exit feature
2397:   so that extremely large thread dumps will not be truncated when the JVM
2398:   is killed.
2399: * Fix a problem where CTRL-C was being ignored by the WrapperManager if a
2400:   WrapperListener is never registered.  This is not possible if the Wrapper
2401:   is being used correctly but never the less a user did come across it.
2402: * Add some additional debug output to help identify the cause of problems
2403:   loading the native library.
2404: * The WrapperManager class now checks to make sure that its current version
2405:   matches the version of the native library and Wrapper.  If there are any
2406:   discrepancies found then appropriate warnings will be displayed, but the
2407:   Application will still be allowed to start.  This was added to make obvious
2408:   the cause of problems resulting from mismatched versions.
2409: * Added a new property wrapper.use_system_time system time.  By setting this
2410:   property to false, the Wrapper will start using a new experimental timer
2411:   which uses a background thread to manage time rather than the system time.
2412:   This has a number of advantages over using the system time and should give
2413:   most users even more reliable behavior when the system is under high load
2414:   or there are changes being made to the system time.  The timer is very
2415:   critical to the operation of the Wrapper so the old behavior is left as
2416:   the default for the time being until this feature has had the chance to be
2417:   "time" tested.  If all goes well then this will be enabled as the default
2418:   in a future version of the Wrapper.
2419:   A pair of related properties, wrapper.timer_fast_threshold and
2420:   wrapper.timer_slow_threshold were also added to aid in debugging.
2421: * Rework the logging code so it is now thread safe.  The addition of the
2422:   timer thread means that there is now more than a single thread accessing
2423:   that code.  This was causing problems as the two threads tried to use the
2424:   same buffers.  As part of this change, a new format variable 'D' was added
2425:   to display the thread which is doing the logging.
2426: * Fix a problem where a thread dump would be invoked if the request thread
2427:   dump on failed JVM exit was enabled and the user forced an immediate
2428:   shutdown by pressing CTRL-C more than once.
2429: * Add getUser and getInteractiveUser methods to the WrapperManager class to
2430:   make it possible for user code to query information about the user running
2431:   Wrapper or the user who is interacting with the Wrapper and its JVM.
2432:   Feature Request #812175.
2433: * The Wrapper will now always exit with the exit code used to terminate the JVM
2434:   whether System.exit is used or WrapperManager.stop.  When running as an NT
2435:   service the Wrapper now correctly returns the correct exit code to the
2436:   service manager so failure recovery tools should now work correctly.
2437:   Feature Request #852491.
2438: * Add a status command to the UNIX shell script which can be used to find out
2439:   whether or not the wrapper is currently running.  Patch submitted by
2440:   Joseph Benavidez.
2441: * Modify the WrapperSimpleApp and WrapperStartStopApp so that the main method
2442:   of a class is located even if it exists in a parent class rather than the
2443:   class specified.
2444: * To make debugging classpath problems easier, the Wrapper now verifies all
2445:   classpath entries before launching a JVM and logs debug level warnings for
2446:   any entries that do not exist.
2447: * Fix a problem where it was possible to define a zero length filter that would
2448:   trigger on any output.
2449: * Add some additional debug output to make it easier to debug startup,
2450:   shutdown and restart problems.
2451: * Modify the way the Wrapper forcibly kills a frozen JVM on UNIX platforms so
2452:   that it now sends a SIGTERM, waits up to 5 seconds, then sends a SIGKILL.
2453: * Add a new wrapper.java.library.path.append_system_path property which will
2454:   cause the Wrapper to append the system path to the generated library path.
2455:   Feature Request #917902.
2456: * Fix a problem where spaces around the '=' character of a property definition
2457:   were rendering the property invisible to the Wrapper.  Bug #916001.
2458: * Fix a problem where the first ping timeout after the JVM was started was
2459:   still hard coded at 30 seconds.  This was causing a combination of large
2460:   values of wrapper.ping.interval and wrapper.ping.timeout to fail.
2461: * Fix a problem where the JVM would fail to shutdown cleanly if the Wrapper
2462:   was asked to stop too soon after launching a JVM.  This was leading to the
2463:   JVM being killed after the shutdown timeout expired.  Bug #917281.
2464: * Added an adviser which will print out explanatory messages to the console
2465:   and wrapper log file when the Wrapper encounters a commonly made
2466:   configuration mistake.  This is designed to cut down on support requests
2467:   by new users.  Can be disabled using the wrapper.adviser property.
2468: * The bash script and the realpath utility have been deprecated since version
2469:   3.0.3.  They have been removed in this release.  The sh script is recommended
2470:   on all UNIX platforms, and the realpath utility which was used by pre-3.0.3
2471:   bash and sh scripts has not been used since.
2472: * Add the wrapper.startup.delay property along with console and service
2473:   specific variants which make it possible to configure a delay between the
2474:   Wrapper being launched and the first JVM being launched.
2475: * Promote the wrapper.debug property back from being "deprecated".  It has
2476:   continued to be useful and deserved documentation and official status.
2477: * Add wrapper.on_exit.<n> properties to control what happens when a exits
2478:   based on the exit code.
2479: * Modify the way calls to System.in.read() are handled so that they now block
2480:   rather than throwing an exception.  Currently, System.in can not be used with
2481:   the Wrapper because of the way I/O is passed between the Wrapper and JVM.
2482: * Modified the Windows batch files to fix a problem where the path to the
2483:   Wrapper.exe contained more than one "/bin".  The new batch files are much
2484:   simpler and should be easier to customize if needed.  Bug #925308.
2485: * Modified the wrapper.java.initmemory and wrapper.java.maxmemory properties
2486:   so that they now default to a value of 0 which causes the -Xms and -Xmx
2487:   parameters to be omitted from the command used to launch Java.  This
2488:   will cause the JVM to use its own default values and also makes it possible
2489:   to specify the memory parameters using the wrapper.java.additional.<n>
2490:   properties.
2491: * Added a pair of environment variables, WRAPPER_FILE_SEPARATOR and
2492:   WRAPPER_PATH_SEPARATOR, whose values are set to either '/' and ':' or
2493:   '\' and ';' on startup.  They can be used in the wrapper.conf file
2494:   to construct platform independent property values.
2495: * Add a new wrapper.working.dir property which makes if possible to change
2496:   the Wrapper and JVM's working directory to a location other than the
2497:   location of the Wrapper binary. Feature Request #738160.
2498: 
2499: 3.0.5
2500: * Added support for SGI Irix.  Big thanks to Andreas Wendt for supplying the
2501:   patch.
2502: * Due to a bug in the build, the native library was not included in the 3.0.3
2503:   or 3.0.4 binary releases for OSX, building from source was working correctly.
2504:   This has been fixed and the build greatly simplified to avoid such problems
2505:   in the future. Bug #791755.
2506: * Changed the default location of the pid file generated by the sh script to
2507:   exist in the same directory as the sh script rather than in the /var/run.
2508:   This can be changed by setting the PIDDIR variable in the sh script used to
2509:   launch the Wrapper.
2510: * Added support for the wrapper.pidfile property on the Windows platform.
2511: * Added the wrapper.java.pidfile property which will cause the pid of the
2512:   java process to be written to a specified file.
2513:   (WINDOWS USERS) If you are using a wrapper.conf file that was created prior
2514:   to version 3.0.0 of the Wrapper, then you may have this property defined in
2515:   your configuration file.  You will get an error on startup if the specified
2516:   path does not exist.
2517: * Stop clearing the file creation mask when the Unix version of the Wrapper is
2518:   run as a daemon process.  The file creation mask will not be inherited from
2519:   the process which launches the Wrapper.  Bug #788849.
2520: * Modify the sh script so it works on Linux, then deprecate the bash script.
2521:   This means that all Unix platforms can now use the same script to control
2522:   the Wrapper. Thanks to Mike Castle for the patch.  The bash script can still
2523:   be found in the release, but it is deprecated and will be removed in a
2524:   future version.
2525: * Modified the sh script so it is now possible to set the nice priority in the
2526:   script configuration block.
2527: * Remove output to System.out in the WrapperManager.requestThreadDump() method.
2528:   If some JVM threads were hung while accessing the System.out object,
2529:   attempting to do a thread a dump would cause the calling thread to hang as
2530:   well.  Thanks to Thomas Hart for the patch.
2531: * Make it obvious in the log whether or not the Wrapper was started as a
2532:   daemon process on UNIX systems.
2533: * Modify the way restarts requested from the JVM, or caused by a filter are
2534:   handled.  The Wrapper will no longer reset the restart count in either of
2535:   these cases.  If an application runs for longer than the
2536:   wrapper.successful_invocation_time timeout then the count will still be
2537:   reset back to 0.
2538: * Added a new wrapper.ignore_signals property which makes it possible to
2539:   configure the Wrapper so it will ignore CTRL-C, HALT and INT signals.
2540: * Modify the WrapperManager.isLaunchedAsService() method on UNIX systems so it
2541:   now returns true if the Wrapper was launched with the wrapper.daemonize flag
2542:   set.
2543: * Added a pair of MBean interfaces which allow the Wrapper to be controlled
2544:   using JMX.  See the new JMX section in the documentation for details.
2545:   Thanks to Sal Ingrilli for help with testing.
2546: * Modify the Windows build so the Wrapper.exe and Wrapper.dll files can now
2547:   be built from Ant if MSVC is installed.
2548: * Added a new wrapper.ping.interval property which lets users control the
2549:   frequency that the Wrapper pings the JVM.  Feature Request #607768.
2550: * When a JVM refuses to shutdown, the Wrapper can be configured to request a
2551:   thread dump using the wrapper.request_thread_dump_on_failed_jvm_exit
2552:   property.  The Wrapper was then waiting 1 second before the process was
2553:   killed.  This was not always long enough, resulting in a truncated thread
2554:   dump.  Increased the pause to 3 seconds.  Feature Request #633761.
2555: * Fix a bug where wrapper.app.parameter.<n> and wrapper.java.additional.<n>
2556:   properties declared from the Windows command line were not correctly
2557:   handling spaces in their values.  Support Request #802139.
2558: 
2559: 3.0.4
2560: * Fix a problem on UNIX systems where requesting a second thread dump any time
2561:   during the life of a single Wrapper process would cause the Wrapper and JVM
2562:   to shutdown rather than perform the thread dump.
2563: * Fix a problem where a, user without permission, attempting to stop an
2564:   application was able to delete the pid file even though they were unable
2565:   to stop the application itself.  This would make the scripts think that
2566:   the application was stopped when was actually still running.
2567: * Fix a problem where an application was being killed prematurely if it took
2568:   longer than 6 seconds to exit on its own.  The scripts now make sure that
2569:   an application always has enough time to shutdown cleanly.
2570: * Improve the debug output so that packet codes are now shown using a name
2571:   rather than a raw number.
2572: * Reduce the frequency of "Waiting to stop..." messages displayed when removing
2573:   an NT service that is currently running.  Decreased frequency from once per
2574:   second to once every five seconds.
2575: * Fix a minor problem where the hour in the date returned by
2576:   WrapperInfo.getBuildTime() was not base 24.
2577: * Added -t and -p command line options to the Windows version of the Wrapper
2578:   to sTart and stoP the Wrapper as an NT service.  This can be used in place
2579:   of "net start" and "net stop", which do not always work correctly when a
2580:   service takes a long time to start up or shutdown.  See the Launching Your
2581:   Application (Win32) section for more details.
2582: * Add a new method WrapperManager.stopImmediate which will cause the JVM to
2583:   exit immediately without calling any stop methods or shutdown hooks.
2584: * Add a new class, WrapperActionServer, which makes it easy to remotely control
2585:   the Wrapper remotely by opening a socket and sending commands.  See the
2586:   javadocs of the class for more details.
2587: * Fix bug #744801.  A Java GUI was not being displayed when the application was
2588:   run in either console mode or as a service with wrapper.ntservice.interactive
2589:   enabled.  This problem was introduced in Version 3.0.0 when using 1.2.x or
2590:   1.3.x versions of Java.  To use interactive services with 1.2.x or 1.3.x
2591:   versions of java, please review the documentation for the
2592:   wrapper.ntservice.interactive property.
2593: * Fix a problem where the JVM was not receiving CTRL-C and CTRL-CLOSE events
2594:   when running under the Wrapper on Windows.  This was not a problem in most
2595:   cases as the Wrapper was taking care of the processing of the events.  But
2596:   the WrapperListener.controlEvent() method was not being called as documented.
2597: * Changed the way the WrapperSimpleApp and WrapperStartStopApp respond to
2598:   control events so that the JVM will respond and call WrapperManager.stop()
2599:   even when being controlled by the Wrapper.
2600: * Modified the suggested behavior of the WrapperListener.controlEvent() method.
2601:   Users who have implemented the WrapperListener interface themselves should
2602:   review the Javadocs.  The changes are not required and applications will
2603:   continue to function as they did before.
2604: * Added support for DEC OSF1 (Alpha).  Big thanks to Andreas Wendt for
2605:   supplying the patch.
2606: * Fix a problem where the sh and bash scripts were failing if the path to the
2607:   script contained spaces.
2608: * Fix a problem where the JVM would sometimes hang when trying to shutdown if
2609:   the wrapper.key parameter was passed to the JVM while not being controlled
2610:   by the Wrapper.  This would happen if a user copied the command from the
2611:   Wrapper's debug output and attempted to run it as is without first removing
2612:   the wrapper.key parameter.
2613: * Implement the ability to specify an NT service's load order group in response
2614:   to feature request #764143.  See the javadocs for the new
2615:   wrapper.ntservice.load_order_group property for details.
2616: * Improve the error message displayed when the NT EventLog is full in response
2617:   to feature request #643617.  The EventLog output will now be disabled if any
2618:   errors are encountered while logging events.  This prevents the error from
2619:   repeating.
2620: * Improve the error message displayed on Windows when the configured Java
2621:   command can not be executed or does not exist.
2622: * Fix a problem where the Wrapper was leaving a pipe unclosed each time the JVM
2623:   was restarted on all UNIX platforms.  This was causing the Wrapper to run out
2624:   of file handles.   Bug #767267, discovered and patched by David Wong.
2625: * Fix a problem where the '#' character, which signifies a comment, could not
2626:   be included in property values.  A double hash, '##' will now resolve into a
2627:   '#' within the property value.  Bug #777303.
2628: * Added support for FreeBSD.  Big thanks to Alphonse Bendt for supplying the
2629:   patch.
2630: * Make the wrapper.port property optional.
2631: * Changed the way environment variables are loaded from the registry on Windows
2632:   platforms so users will no longer get warning messages about not being able
2633:   to handle very large environment variables.  Prior versions could only handle
2634:   environment variables whose expanded value was less than 2048 characters in
2635:   length.
2636: * Fix a problem on UNIX platforms where a shell used to start the Wrapper
2637:   running as a detached process would hang when the user attempted to exit
2638:   the shell.  Thanks to Mike Castle for this patch.
2639: 
2640: 3.0.3
2641: * Added support for Mac OS X.  Big thanks to Andy Barnett for supplying the
2642:   patch.
2643: * Fix a segmentation fault on UNIX systems when the first console output
2644:   from the JVM was an empty line.  Thanks to Mike Castle for finding this.
2645: * Fix a problem where a 0 length malloc was being called if there were no
2646:   configured filters.  This was fine on most platforms but caused a crash
2647:   on MAC OS X.
2648: * Rework the initialization of the bash and sh scripts so that they will
2649:   work correctly when referenced as symbolic links.  Thanks go out to Richard
2650:   Emberson for the code to resolve symbolic links.
2651: * Deprecated the realpath binary in the *NIX distributions as it is no longer
2652:   used by the bash or sh scripts.  It is being left in for now so as not to
2653:   break the build scripts of other projects, but it will be removed after a
2654:   couple more releases.
2655: * Added a test to make sure that wrapper.ntservice.interactive is not set to
2656:   TRUE when an account is specified using wrapper.ntservice.account.
2657: 
2658: 3.0.2
2659: * Modified the sh and bash scripts so that console log output is disabled by
2660:   default when the scripts are launched with the 'start' action.  Running with
2661:   the 'console' action will still send output to the console.  Logging to the
2662:   file is still enabled.
2663: * Modified the wrapper.ping.timeout property so it also controls the ping
2664:   timeout within the JVM.  Before the timeout on responses to the Wrapper
2665:   could be controlled, but the ping timeout within the JVM was hardcoded to
2666:   30 seconds.
2667: * In the last release, some work was done to avoid false timeouts caused by
2668:   large quantities of output.  On some heavily loaded systems, timeouts were
2669:   still being encountered.  Rather than reading up to 50 lines of input, the
2670:   code will now read for a maximum of 250ms before returning to give the main
2671:   event loop more cycles.
2672: * Fix a problem where the values of environment variables set in the
2673:   configuration file were not correct when those values included references
2674:   to other environment variables.
2675: * Fix a potential buffer overflow problem if configuration properties
2676:   referenced extremely large environment variables.
2677: * Fix a potential problem where the inability to expand very large environment
2678:   variables would have led to an access violation when run as an NT service.
2679: * Add some extra checks in the event where the native library can not be loaded
2680:   so that the WrapperManager can differentiate between the library missing and
2681:   not being readable due to permission problems.
2682: * Remove the wrapper.ntservice.process_priority from the default wrapper.conf
2683:   because its use can produce unexpected results if used improperly.  Please
2684:   see the property documentation for details.
2685: * Fix a problem where environment variables in the registry which had no value
2686:   were causing the Wrapper to crash with an access violation.  This was
2687:   introduced in version 3.0.0 with the feature to load environment variables
2688:   from the registry.  The offending registry entry was WV_GATEWAY_CFG which
2689:   appears to be related to Oracle.
2690: 
2691: 3.0.1
2692: * Fix a problem with the wrapper.disable_shutdown_hook.  Due to a typo in the
2693:   source, the property was being ignored.  This was broken in the 3.0.0
2694:   release.
2695: * Fix a problem with the HP-UX release build reported by Ashish Gawarikar.
2696: * Add the ability to set environment variables from within the configuration
2697:   file or from the command line.
2698: * Fix a problem on HP-UX and AIX machines where the stop() function in the
2699:   shell scripts was causing a syntax error due to a conflict with a like named
2700:   shell command on those platforms.  This appears to be an issue with the
2701:   Korn shell on all platforms.
2702: * Fix a problem where very heavy output from the JVM can cause the Wrapper to
2703:   give a false timeout.  The Wrapper now only reads 50 lines of input at a time
2704:   to guarantee that the Wrapper's event loop always gets cycles.
2705: * Fix a problem on UNIX versions where extra line breaks would sometimes be
2706:   added to the logged output when there was large amounts of output being
2707:   sent from the JVM.
2708: * Fix a problem where a large number of calls to WrapperManager.log()
2709:   immediately before the JVM exits could lead to the Wrapper incorrectly
2710:   reporting that the JVM exited unexpectedly.
2711: 
2712: 3.0.0
2713: * Deprecated the com.silveregg.wrapper package in favor of
2714:   org.tanukisoftware.wrapper.  The classes and interfaces in the silveregg
2715:   package will continue to function, but migration to the new package should
2716:   be done when possible. See the project history for details.
2717: * On Windows systems change any forward slashes in the wrapper.java.command
2718:   property to back slashes.  Some users had reported having problems on
2719:   Windows XP.
2720: * Implemented feature request #633178.  Added WrapperManager.requestThreadDump()
2721:   to force the current JVM to immediately perform a thread dump.
2722: * Fixed bug where wrapper.logfile.maxsize was being set to 0 if the 'k' or 'm'
2723:   unit was omitted.
2724: * Add the ability to specify an account name and password when installing an
2725:   NT service.
2726: * Add a property, wrapper.ntservice.interactive, which makes it possible to
2727:   control whether or not the Java process can gain access to the desktop while
2728:   it is running as an NT service.
2729: * Add limited support for 1.2.x versions of Java.  Shutdown hooks are
2730:   supported until Java 1.3 so those functions will be disabled.  If the
2731:   application displays a GUI then Java 1.3 should be used as the GUI can not
2732:   currently be displayed when using Java 1.2.x.
2733: * Made it possible to use the wrapper.pidfile property on all *nix platforms.
2734:   Please notice that the property has been removed from the default
2735:   wrapper.conf file.  The property is not needed when the wrapper is launched
2736:   with the bash shell script.  The sh shell script will set the wrapper.pidfile
2737:   when the wrapper is launched.  If either of the scripts provided with the
2738:   Wrapper distribution are used then the wrapper.pidfile should always be
2739:   removed from your wrapper.conf file.
2740: * Added a new wrapper.daemonize property which, when set, will form the wrapper
2741:   process to be a detached non-session group leader.  This makes it possible to
2742:   launch the wrapper in such a way that it will not be terminated when the user
2743:   launching the process logs out.  This had been a problem on Solaris systems
2744:   when using the sh shell.  The default sh and bash scripts both make use of
2745:   this in the default.  Please update your scripts for use with this version.
2746:   Thanks to Rajiv Subrahmanyam for the patch.
2747: * Fix a problem where the Wrapper was incorrectly counting the number of
2748:   non-daemon threads in BEA's JRockit Virtual Machine.  This was causing the
2749:   application to shutdown when the non-daemon thread count dropped to 1.
2750: * Added support for building the wrapper on AIX and HP-UX systems.  Thanks for
2751:   the patches involved go out to Ashish Gawarikar and William Lee.
2752: * Implement feature request #653131 to force the JVM to immediately exit when
2753:   the user presses CTRL-C multiple times.
2754: * Added a 'console' action to the bash and sh scripts to make it possible to
2755:   launch the Wrapper in the current shell process.  The 'start' task will launch
2756:   the Wrapper as a spawned daemon process.
2757: * Fixed a problem where missing environment variables specified in classpath
2758:   or library path properties were not being handled correctly.
2759: * Implemented feature request #676599 to enable the filtering of JVM output to
2760:   trigger JVM restarts or Wrapper shutdowns.  See the new
2761:   wrapper.filter.trigger.n and wrapper.filter.action.n properties.
2762: * Modify the Win32 version of the Wrapper so that Environment Variables are
2763:   always read from the system registry when the Wrapper is run as a service.
2764:   By doing this, it makes it possible to change or add the system environment
2765:   variables and have them take effect without having to first reboot the
2766:   machine.
2767: * Implemented cascading configuration files.
2768: * Changed the default value for the wrapper.java.initmemory property to be 3Mb.
2769:   The default on Windows and Linux JVMs is 2Mb, but the Solaris JVM requires
2770:   a minimum of 3Mb.  The minimum value accepted by the Wrapper was changed
2771:   from 8Mb to 1Mb to make it possible to reduce the footprint of applications
2772:   to what is possible without using the wrapper.
2773: * Improve the parsing of configuration files so that leading and trailing white
2774:   space is now correctly trimmed.  It is also now possible to have comments at
2775:   the end of a line containing a property.
2776: * Modify the way exceptions thrown by an application's main method are
2777:   presented to the user by the WrapperSimpleApp and WrapperStartStopApp so
2778:   they no longer look like a problem with Wrapper configuration.
2779: 
2780: 2.2.9
2781: * Added a new property, wrapperper.restart.delay, which allows the user to control
2782:   the amount of time to pause between a JVM exiting and a new JVM being
2783:   launched.
2784: * Fixed bug #611024. The Wrapper would sometimes fail to start if
2785:   wrapper.max_failed_invocations is set to 1.
2786: * Fix a problem where the number of non-daemon threads was not being calculated
2787:   in some cases.
2788: * Implemented feature request #491443.  Environment variables referenced in the
2789:   wrapper.conf file will now be evaluated as the file is loaded.  The windows
2790:   syntax for environment variables is used on all platforms to make them
2791:   platform independent.
2792: * Fixed a problem where the wrapper.conf was being open with both read and
2793:   write locks when a read lock is all that is needed.  Made the wrapper fail
2794:   on startup if another application held a read lock on the conf file.
2795: * Modified the message displayed when the native library could not be found,
2796:   so that it is much more descriptive.  Hopefully it will cut down on questions
2797:   caused by configuration problems.
2798: * Implemented feature request #613539. Modified the wrapper.java.library.path
2799:   to function like the wrapper.java.classpath.n properties so that multiple
2800:   directories can be specified in the library path in a platform independent
2801:   way.  The old property is still supported, but deprecated.
2802: * Fix Bug #632215.  The WrapperManager.isLaunchedAsService() method was always
2803:   returning false, even when run as a service under Windows.  On linux, the
2804:   Wrapper is always run as a console app, so this method will always return
2805:   false.
2806: * Improve the message thrown when user code attempts to access System.in from
2807:   within a JVM being controlled by the Wrapper.  System.in will not work
2808:   because the JVM is a spawned process.
2809: 
2810: 2.2.8
2811: * Fixed a compiler problem on Solaris some systems.
2812: * Added a new property, wrapper.cpu.timeout, which allows the user to control
2813:   how much time without receiving any CPU the Wrapper will tolerate before
2814:   displaying a warning message.  The CPU timeout feature was added in 2.2.7
2815:   but the default timeout of 10 seconds was not configurable.
2816: * The Wrapper was only allowing 5 seconds between the JVM informing the
2817:   Wrapper that it was going to exit and the JVM process actually exiting.
2818:   This would cause the Wrapper to terminate the process prematurely in
2819:   cases where an application shutdown thread took longer than 5 seconds to
2820:   complete.  The Wrapper now allows wrapper.jvm_exit.timeout seconds for
2821:   the JVM process to exit on its own before being forcibly terminated.
2822: * When there is a configuration problem or a resource is unavailable, a JVM
2823:   will sometimes exit abnormally very shortly after being launched.  This
2824:   can lead the the JVM being infinitely restarted due to a simple class
2825:   path misconfiguration.  To work around this, the Wrapper has always had
2826:   a hard limit of 5 restarts within a short period of time.  If the JVM
2827:   has been running for more than a few minutes, then the count was reset.
2828:   In this version, a new property. wrapper.max_failed_invocations was added
2829:   to allow the max value to be set.   The time period which the JVM must
2830:   now be running for the JVM launch to have been considered a success for
2831:   restart purposes is set using the new wrapper.successful_invocation_time
2832:   property.
2833: * The number of advanced properties which most users do not need has been
2834:   increasing as the Wrapper has been made more and more flexible.  This
2835:   has been causing confusion in their usage by people who play with them
2836:   without first reading the documentation.  To solve this, the advanced
2837:   properties were removed from the default configuration file.  They still
2838:   function.  But users must now read to the advanced configuration
2839:   documentation to learn about their existence.  Added quite about to the
2840:   descriptions of these properties to hopefully clear up any confusion
2841:   about their usage.
2842: * When the JVM exits abnormally, the Wrapper will pause for a few seconds
2843:   before starting another JVM.  If the user pressed CTRL-C during this
2844:   pause, a new JVM would still be launched.  The new JVM was exiting
2845:   immediately but it was a waste of time.  The Wrapper now recognizes the
2846:   event and aborts launching the new JVM.
2847: * Added a page to the documentation which shows inline javadocs.  This
2848:   will hopefully make it easier to navigate them as part of the full
2849:   documentation set.
2850: * Added a new method to the WrapperManager which enables user code to
2851:   log at any log level.
2852: * Added a new Helper class WrapperStartStopApp which allows users to easily
2853:   integrate applications like Tomcat which use a separate class to stop
2854:   the application.
2855: * Added a samples section to the documentation.  Just includes Tomcat 4
2856:   for now.
2857: 
2858: 2.2.7
2859: * Fix a problem where the JVM was trying to reconnect the Wrapper as it was
2860:   being shutdown.  This was causing problems if the JVM was being restarted.
2861: * Added support for the system being suspended to RAM or disk.  Also improved
2862:   wrapper performance when a system is under 100% load.  See the new example
2863:   output in the example section. 
2864: * Fix a problem where the log output was not being directed to a file called
2865:   wrapper.log in the same directory as the Wrapper binary in the event that the
2866:   configured wrapper log file could not be accessed.
2867: * Fix a problem where the Wrapper was not shutting down the JVM correctly when
2868:   all non daemon threads completed.   Normally a JVM will exit when all of its
2869:   non daemon threads have completed so this was causing some problems.
2870:   (Thanks to Jung Tamas)
2871: * Added the ability to set the priority of the Wrapper and its JVM when run
2872:   as an NT service or console application.  The same thing can be better
2873:   achieved on Unix systems by using "nice" in the shell script used to launch
2874:   the Wrapper.  See the documentation for for details.
2875: * JVM information was not being displayed correctly when the Wrapper native
2876:   library could not be loaded.
2877: * Added a new property to cause the wrapper to attempt to request a thread dump
2878:   when the JVM does not exit on request.
2879: * Improved the documentation of the WrapperSimpleApp and WrapperListener
2880:   classes.
2881: * Adding a new property wrapper.shutdown.timeout to allow the user to extend
2882:   the length of time that an application is allowed to take shutting down.
2883: * Rework the way the shutdown process works so that System.exit will never be
2884:   called before the stop method in WrapperListener has had a chance to complete.
2885: * Add a Restart button to the TestWrapper application.
2886: * Fix a problem on Unix versions where '%' characters in Java output would
2887:   sometimes cause the wrapper to crash.  Somehow missed getting this into the
2888:   last release.
2889: * Added a test to make sure that WrapperManager.stop is not called recursively.
2890: * Added support for building under Windows XP.  Prebuilt installations had
2891:   already been working. 
2892: 
2893: 2.2.6
2894: * Fix a problem where '%' characters in Java output would sometimes cause the
2895:   wrapper to crash.  (Thanks to Frode Moe)
2896: * Added support for requesting a Java thread dump without shutting down the
2897:   Java process.
2898: * Fixed a problem on windows where the java command was looking in the windows
2899:   system and system32 directories for the java executable before checking the
2900:   path when the full path to the java executable was not specified in the
2901:   configuration file.  This could lead to different JVM being run from the
2902:   Wrapper than was run if java -version was run from the command line.  The
2903:   Wrapper will now attempt to resolve the full java path using the PATH
2904:   environment variable.
2905: * Added debug output showing Java version information when the JVM first
2906:   starts.
2907: * Modified c source to use /* */ style comments rather than // style comments.
2908:   Some people were having problems with some compilers.
2909: 
2910: 2.2.5
2911: * Added support for service descriptions for Win2k and XP.
2912: * Fixed bug issue when reading configuration files from Windows on Unix.
2913: * Deprecated the wrapper.debug property in favor of loglevels.
2914: * Added new logger functionality includes the following features:
2915:   Loglevels like Log4j, NT Eventlog support, UNIX syslog support and rolling
2916:   log files.
2917: * Added wildcard support for classpath entries in wrapper.conf.
2918: * Added the ability to specify configuration properties from the command line.
2919: * Changed the way NT services are installed so that a patched version of the
2920:   Wrapper.exe file no longer needs to be created to reference the
2921:   wrapper.conf file.
2922: 
2923: 2.2.4
2924: * The value of APP_NAME in the bash or sh scripts no longer needs to be the
2925:   same as the script.
2926: * Added the ability to format and/or disable file logging and output to the
2927:   console.
2928: * Set mode of executables in binary release tar files so that they can be run
2929:   without modification after being extracted.
2930: * Fixed line feeds in release so that bat files are always CRLF, unix scripts
2931:   are always LF.  Other source files are always CRLF in ZIP archives and LF
2932:   in tar.gz archives.
2933: * Make the build fail if Wrapper.exe or Wrapper.dll do not exist for Windows
2934:   builds.
2935: * Added an empty wrapper.log to the releases so that the TestWrapper example
2936:   program runs out of the box.
2937: 
2938: 2.2.3
2939: * Added template scripts and conf files for ease of integration with other
2940:   applications.
2941: * Cleaned up the build.
2942: * The WrapperSimpleApp method of launchine applications was not working 
2943:   correctly with applications whose main method did not return.
2944: * Add sample scripts and wrapper.conf files in the bin and lib directories.
2945:   These scripts are used to start a sample application which runs out of the
2946:   box.  See the new example.html page in the documentation for more details.
2947: * Get rid of the platform specific directories in the bin and lib directories.
2948: * Enable relative paths for Windows version.  In previous versions of Wrapper,
2949:   it was necessary to always use absolute paths because the working directory 
2950:   of the wrapper would be then NT System32 directory when run as a service.
2951: * On the windows version, the wrapper always sets the current working
2952:   directory to the location of the wrapper executable immediately after
2953:   startup.
2954: * Improvements to the documentation / web page.
2955: 
2956: 2.2.2
2957: * Added HTML based documentation.
2958: 
2959: 2.2.1
2960: * Added Linux and Solaris build files.
2961: * Added Linux and Solaris documentation.
2962: 
2963: 2.2.0
2964: * Initial Public Release.
2965: 
2966: 
旧リポジトリブラウザで表示