Java Service Wrapper Changelog

What's new in Java Service Wrapper 3.5.30

Jul 15, 2016
  • Add new properties wrapper.ntservice.preshutdown and wrapper.ntservice.preshutdown.timeout to allow Windows services with a long shutdown time to stop cleanly before the system starts its shutdown process. The first property specifies that the service will accept PRESHUTDOWN notifications. The second property tells the service control manager how long to wait until the service stops. These properties are not supported on Windows Itanium or Windows XP and lower.
  • Fix a memory leak on Fedora 21 and lower. This issue was fixed for RHEL, CentOS and Amazon Linux AMI on version 3.5.28, but was still happening on Fedora when rolling the log file in size mode.
  • Fix a bug where, under certain conditions, a white square appeared briefly on the screen just before the splashscreen was drawn (wrapperw).
  • Change name of the architecture for Linux PPC. Since 3.5.29 the Wrapper is available on Linux PPC little-endian and big-endian. To avoid confusion 'linux ppc' is now 'linux ppcbe' and 'linux ppc64le' becomes 'linux ppcle'.
  • In the script file, add the variable FILES_TO_SOURCE which should contain a list of files to source prior to executing any commands.
  • Add two tokens, 'W' and 'J', to the logging format to display the Wrapper process id and the Java process id.
  • Fix a bug where the Wrapper stopped to log messages coming from the Java application, or one of its child process, when it encountered a null character (). It also resulted in a memory leak if the Java application was logging messages at a frequency higher than the value specified with wrapper.log.lf_delay.threshold.
  • Fix a wrong implementation of the property 'wrapper.log.lf_delay.threshold'. The amount of time specified by this property was counted from the last log output received instead of the last line feed received.
  • If the Wrapper is unable to write to the configured wrapper.logfile, it would fall back to a default log file in the working directory. If this would also fail, the log file will be disabled and logging will only continue in the console, syslog or EventLog. From 3.5.30, the Wrapper will resume logging into the configured file as soon as it is available again. If the log file had been disabled and the configured log file would still be locked, then it will try to resume the logging in the default log file.
  • Fix a bug where a RESTART or a PAUSE action specified with wrapper.on_exit. (or wrapper.on_exit.default) would abort a SHUTDOWN triggered by an event, a filter, a timer, a deadlock, a ping timeout or failures of mounted shares.
  • Improve the output when querying the status of a service on Unix. It will show whether the service is installed or not, and which system is used if there are several possibilities for the current OS (init.d, systemd, etc.).
  • Fix a bug where the daemon was not reloaded when the Wrapper was installed using systemd and a custom service file.
  • When installing a daemon with systemd or upstart, the Wrapper will now check for a previous install like it does for the other init systems. This implies that the service should first be removed to force reinstallation.
  • Add the ability to log the properties each time the Wrapper loads or reloads the configuration file. A new wrapper.properties.dump.loglevel property was created to control at which level they will be logged.
  • fixed a bug happening when launching multiple instances of the shell script in a short time interval. If one instance was starting the Wrapper while another attempted to stop it, the PID file of the new Wrapper process might eventually be deleted. Running without a PID file could cause some issues and would leave open the possibility for a second instance of the Wrapper to run simultaneously even though wrapper.pidfile.strict would be set to TRUE.
  • Standard / Professional Edition:
  • Improve the logging messages when using the IANA timezones introduced in version 3.5.29 and add a new property, wrapper.timezone.debug_timestamps, to display additional information (offset to GMT and whether DST is in effect) in the timestamps of the log outputs.Improve the behavior when the Wrapper fails to parse the timezone file or fails to resolve daylight saving time. Any error on startup will cause the Wrapper to fall back to system time. If an error would occur during a time change, the Wrapper will continue with the current time.
  • Professional Edition:
  • Improve the logging messages when the action 'KILL_RESTART' is specified for the 'wrapper.event..command.block.action' property. Depending on the event, RESTART is not always applicable, but the Wrapper always notified that a new JVM was going to be launched. Now it will clearly inform when the restart is not applicable.

New in Java Service Wrapper 3.5.28 (Jan 14, 2016)

  • Fix a problem where boolean configuration properties were not assigned their default values if a wrong value was set. The Wrapper always resolved unknown values to FALSE even though the default value should be TRUE. (Standard / Professional Edition)
  • With single invocation mode, it is now possible to specify that the Wrapper will focus the foreground window of the running Java Application instead of launching it a second time. If no window can be found, the focus will be set to the Wrapper monitoring the application. This can be used in combination with the event handling to activate any window that was brought to the front.
  • Add new system property to WrapperStartStopApp (integration method #2) to handle passthrough parameters. These parameters can be passed to the start and/or stop method of your Java application. By default the passthrough parameters are ignored (see the javadocs of the WrapperStartStopApp class for details). (Standard / Professional Edition)
  • Add two new values for the wrapper.lang property: 'DESKTOP' and 'SYSTEM'. These values are used on Windows and ignored on other systems. The first, which is the default, specifies that the language of the Wrapper will be resolved according to the UI language. The second will cause it to use the system language. Before, the Wrapper used the language of the Region Format settings. (Standard / Professional Edition)
  • Improve the error message if there are any problems initializing the backend pipe or socket.
  • Fix a bug where actions specified by wrapper.ping.timeout.action were only performed the first time the JVM became hung. All subsequent hangs were ignored. With the default configuration, this would mean the Wrapper could only restart a hung JVM once. Since 3.5.16.

New in Java Service Wrapper 3.5.27 (Jan 14, 2016)

  • Add new configuration file directives (#properties.on_overwrite.loglevel and #properties.on_overwrite.exit) to better control how the Wrapper should behave when detecting duplicate property definitions.
  • Improve the display of the available HostIds when calling 'wrapper -h'.
  • Fix the console flicker bug. Happened when wrapper.ntservice.generate_console was set to TRUE, which is required for thread dumping. (Standard / Professional Edition)
  • Modify the Community Edition license to allow the Wrapper to be integrated and distributed with Products released under either the GPL version 2 or GPL version 3 licenses.
  • Include the PID of the Wrapper and Java processes in debug output.
  • Fix a problem where the wrapper.jvm.port.min and wrapper.jvm.port.max properties were being ignored. This meant that the defaults were always being used. Since 3.5.26.
  • Modify the wrapper.pausable and wrapper.pausable.stop_jvm properties so they are no longer reloaded when wrapper.restart.reload_configuration=TRUE.
  • Fix a bug when the child process printing the JVM version became a zombie after completion (problem known on CentOS). Add property wrapper.java.version.timeout to let the user set a timeout for the child process to print the JVM version before being terminated.
  • Fix a problem on HP-UX when listing HostIds. If several HostIds were available on the machine, the Wrapper could only get the first one and reported DLPI errors when attempting to get the others.
  • Fix path to remove files when uninstalling the Wrapper daemon process on HPUX.
  • Added Linux Itanium binaries in the "Delta Pack". It was removed since version 3.5.18. (Professional Edition)
  • Fix an encoding conversion error when sending email on HP-UX.
  • On MacOSX, set the launchd KeepAlive key to "false" by default as recommended by Apple. However, it is possible to set it to "true" by editing the new MACOSX_KEEP_RUNNING variable in the script file.

New in Java Service Wrapper 3.5.26 (Apr 29, 2015)

  • mprove the log messages when a JVM restart is requested when the Wrapper is in a state that it will be ignored.
  • (Standard / Professional Edition)
  • Add an additional debug message when a deadlock sweep completes. No functional change but this was added to make it easy to tell how long the sweep takes on a given application.
  • Clean up the internal tracking of where environment variables were set. No functional changes.
  • When detecting Cygwin with 'uname -o' in the script file, some OS's (Solaris, MacOS, etc.) show an error message because '-o' is not a valid parameter. Now we hide this error message to avoid confusion and we can guess that Cygwin is not running.
  • Add the ability to control running the service with systemd using the script file.
  • On Mac OS X, fix a typo, add another alternative way to find Java to set the JAVA_HOME environment variable, and use the full path to execute sysctl in case it's not in the path. Thanks to Dannes Wessels for pointing this out.
  • Fix a problem on newer versions of Windows when customizing the Wrapper. The certificate was not removed when creating the target. This was leading to an error when trying to sign the target with a new certificate.
  • Add missing support in the shell script for restarting/stopping the Wrapper service with launchctl on Mac OS X.
  • Add missing support in the shell script for restarting/stopping the Wrapper service with Upstart.
  • Add the ability to set the path of the 'su' command as well as the ability to specify additional arguments in the Wrapper shell script using new SU_BIN and SU_OPTS variables.
  • Fix a problem in the WrapperSimpleApp, WrapperStartStopApp, and WrapperJarApp helper classes where command line problems that resulted in the JVM exiting on startup looked like unexpected exits. This meant that the Wrapper would try to relaunch the JVM again rather than giving up on the first attempt.
  • Modified the WrapperSimpleApp, WrapperStartStopApp, and WrapperJarApp helper classes so that their usage banners will only now be shown for command line related problems. Issues with the specified classes, methods, or jar files are still logged as errors, but showing the user the usage in these cases was confusing.
  • Correct the WrapperResources.getString() method that has no replacement arguments so that its processing of the raw string is handled the same as methods which have replacement arguments. Now all strings are processed by the MessageFormat class before being returned. Previous versions were not consistent about the need to escape single quotes.
  • Added optional key validation to make sure that strings passed in to the WrapperResources.getString() method are formatted correctly. See the WrapperResources class for information how to enable.
  • Add new options for property wrapper.backend.type: AUTO, SOCKET, SOCKET_IPv4, SOCKET_IPv6, PIPE. When set to AUTO, the Wrapper will try to open a socket ipv4 and fallback to ipv6 and to pipe in case of error.
  • Fix bug when converting from multibyte to wide char without setting the locale at startup (Unix only). Thanks to Bert.
  • Add a 'CLOSE_BACKEND' alias to 'CLOSE_SOCKET' as a test command for the wrapper.commandfile property. This is because there have been multiple options for the backend connection for some time and the name is more portable.
  • Fix a problem on Mac when running OS X Yosemite where the script was failing to correctly compare versions '10.10' to '10.5.0'. This was leading to the script thinking that only 32-bit binaries could be run. This was only an issue if the delta pack naming of the wrapper binaries was being used.
  • Add a new wrapper.java.classpath.missing.loglevel property which makes it possible to control how the Wrapper logs warnings about missing classpath elements. Previously this was always logged as debug output and could not be disabled.
  • If there are any low level problems launching the Java process that are not related to configuration or the JVM itself, the Wrapper will no longer try again as such retries were meaningless.
  • Windows system APIs have a problem that cause a process to crash if it attempts to set an environment variable over 32767 characters in length. The Wrapper now checks for this and logs an error rather than setting the variable. This was a problem if very large classpaths were used when the wrapper.java.classpath.use_environment property was TRUE.
  • Windows does not allow a command line to be longer than 32766 characters in length. Different versions of Windows handle it differently when such a long command is provided. The Wrapper now does its own check and shows an error in a consistent way.
  • Improve the error message on UNIX platforms when the command line is longer than the system maximum. This maximum varies greatly by platform and environment and is difficult to calculate reliably, so the maximum length is not currently shown in the message.
  • Fix a problem on UNIX platforms where a very large configuration file could cause the WrapperManager to fail to startup. This was caused by the partial transfer of the configuration file to the WrapperManager via the backend connection. This would happen regardless of the backend type used. The size of the configuration file that would cause a problem varied greatly based on the specific system.
  • Fix a problem on Windows platforms where a very large configuration file would fail to be sent to the WrapperManager on startup when the wrapper.backend.type property was set to PIPE. The only problem was that the WrapperManager.getProperties() method would be empty.
  • (Professional Edition)
  • Add checks to the WrapperManager.exec() methods on Windows for the maximum command line length of 32766, and maximum environment variable name-value pair length of 32767.
  • (Professional Edition)
  • Fix a problem where a free of a NULL pointer was being done as part of the cleanup process of a WrapperManager.exec() call. This is not known to have caused any issues.
  • Added getStdOut(), getStdErr(), and getStdIn() methods to the WrapperProcess class as aliases to the getInputStream(), getErrorStream(), and getOutputStream() methods to help avoid confusion.
  • Fix a problem on Windows 7 where long log lines got corrupted after 31397 characters when wrapper.console.direct was true. This seems to be a problem with the underlying Windows API and was only a display issue. Reduced the maximum number of characters that can be written with a single API call to 30000 to work around the issue. This change is internal and there is still no limit on the length of logged lines.
  • Fix a deadlock if the Wrapper failed to write to the backend when the wrapper.backend.type property was PIPE. Found by code review and is not known to have actually happened.
  • From Mac OSX 10.5.0, the script file will use the key 'KeepAlive' in the launchctl configuration file. Prior versions of Mac OSX will continue to use the same key 'OnDemand'. Thanks to Robin for pointing this out.
  • (Standard / Professional Edition)
  • Disallow the use of hostids tied to Apple Bluetooth devices when running on a virtualized Windows system hosted on an OS X system.
  • Fix a problem where WrapperManager.log() was not working correctly when multi-byte messages were logged.
  • In the debug output the full configuration properties packet is suppressed from the log output because it is huge and can contain sensitive data. Add a size to the abbreviated output to assist with debugging.
  • Fix a memory leak on UNIX platforms whenever an error message was reported. This was only a problem if the message was logged repeatedly.
  • Correct a couple other potential memory leaks found through code review. Not known to have been causing any actual problems.

New in Java Service Wrapper 3.5.25 (Dec 16, 2014)

  • (Professional Edition) - Improve the wrapper.timer..interval property so it is now possible to specify ranges and lists of values as well as offsets for interval values to more precisely control when timers are fired.
  • (Professional Edition) - Fix a problem with the wrapper.timer..interval property where timers would not fire during an interval the system time was set back. Also fixed a problem where timers would stop firing permanently if the system time was set forward by more than the value of the wrapper.timer.max_catchup property and a timer had been scheduled to be fired during that interval. Both of these issues were most likely during daylight savings time.
  • Fix a problem where signals received by the JVM were not being logged in debug output correctly if the wrapper.ignore_signals property is set to true. We now also log debug output even if a user event listener consumes the signal event.
  • Fix a problem on Gentoo Linux where the shell script was not correctly detecting the system architecture. This may also be a problem on other distributions whose 'uname -p' returns a detailed architecture.
  • In the shell script, when the flag to use systemd (USE_SYSTEMD) is set, the shell script generates a ".service" file in /etc/systemd/system/ when installing the Wrapper as a daemon.
  • In the shell script, add a function to validate the size of APP_NAME when installing or removing the daemon on AIX.
  • It was possible to disable the logging of the Java command line even when debug output was enabled by setting the wrapper.java.command.loglevel property to NONE. This made it difficult to debug problems and is no longer possible.
  • When the wrapper.java.version.output property is set to true, add debug log output to show the actual command line used.
  • Fix a problem on Windows when the wrapper.java.version.output property is true where it was possible that java executable being run to get the version could be different than that used to run the application if the java executable was being located on the default system PATH as well as the PATH defined in the environment. The Wrapper now looks once and uses the same fully resolved path in both places. For clarity, both java command lines are now included in debug log output when the version is requested. (Bug #288)
  • Change the timing of the logging of the Java command line on UNIX so it is consistent with Windows.
  • Improve the error message text thrown when a native feature is not available from Java to be more clear about whether the problem is that the native library could not be loaded versus the wrong edition being used.
  • On Windows, detect when the Wrapper is running under Cygwin and set the default value for wrapper.console.flush to TRUE. On other platforms, the script will display a message and stop running.
  • (Professional Edition) - Add support for WRAPPER_EVENT_TIME_* and WRAPPER_EVENT_RAND_* variable references so event times can be used when events are fired.
  • Fix a buffer overflow problem on AIX which caused crashes or deadlocks on startup for some users. This had been an issue since 3.5.0 but only reported recently.
  • Remove output debug messages on UNIX when the wrapper.port.address property was set.
  • Clean up code when converting multibyte characters to wide characters. Some error checks were not implemented correctly. Found during a code review and is not known to have actually caused any problems.

New in Java Service Wrapper 3.5.24 (Jun 16, 2014)

  • Fix a problem where the message source of remote syslog messages from the JVM were being logged as "jvm %d" rather than "jvm 1".
  • Add a new wrapper.syslog.split_messages property which controls whether or not multi-line messages will be logged as is or first split into individual lines.
  • Fix a problem on Windows Vista and above where the wrapper.single_invocation property was not correctly identifying Wrapper instances running in different sessions under some circumstances.

New in Java Service Wrapper 3.5.23 (Dec 7, 2013)

  • Standard / Professional Edition:
  • When an unknown license type is encountered, include the unknown type in the error message to help with debugging.
  • Fix a memory corruption problem on z/OS when the language was set to a double byte locale like Japanese.
  • Go through and make the Wrapper much more durable when badly encoded double byte characters are encountered.
  • Preofessional Edition:
  • Modify the exception thrown when WrapperManager.exec() is called while the Wrapper is shutdown so it now says that rather than saying that the native library is not loaded.
  • The Wrapper is now more careful to make sure that the backend is never closed while a child process is being launched to ensure that the Wrapper knows about all child processes launched.
  • Add a warning message in case the Wrapper is not notified of a launched child process due to the backend connection being closed.
  • Fix a potential NPE that could be thrown while reading stdout or stderr output from a child process while the Wrapper was shutting down and after the child process exited.
  • Fix a problem on UNIX platforms where we were getting stuck trying to cleanup after a process which was currently blocking on a read from stdout or stderr.
  • Fix a problem on UNIX platforms where a timeout attempting to obtain an internal lock of the child process list was causing an internal counter to get out of sync, leading to a other terminated child processes being left as defunct zombies until the Java process terminated.
  • Fix a problem on UNIX platforms where pipe file descriptions used to communicate with child processes were being incorrectly passed to all child processes. They were not growing over time.
  • Fix a problem on FreeBSD systems where the wrapper.lang.encoding was not resolving to UTF-8 correctly when the LANG environment variable was not set.
  • Fix a potential synchronization problem calling WrapperProcess.waitFor() or WrapperProcess.exitValue().
  • Add additional debug log output showing the various timeout values to help with debugging user issues.
  • Fix a problem where the shell script was not correctly detecting the OS version with Mac OSX Maverick.
  • Add warnings about undefined environment variables in include file references in the configuration file.
  • Add support for environment variable expansion in files specified with the wrapper.java.additional_file and wrapper.app.parameter_file properties.
  • Correct the integer formatting in the WrapperUNIXGroup.toString() method so it is consistent with the rest of the Wrapper.
  • Fix a problem where the iconv library requirement couldn't be satisfied in FreeBSD 10. We now locate the library dynamically by looking for /usr/local/lib/libiconv.so, /usr/local/lib/libbiconv.so, or /lib/libkiconv.so.4 in that order.
  • Fix a the WrapperPrintStream.println() method so strings containing linefeeds will correctly have each line prepended with the configured header.

New in Java Service Wrapper 3.5.22 (Oct 16, 2013)

  • Standard / Professional Edition:
  • Fix a crash in native code behind WrapperResources instances which could happen if the system was very low on memory. Since version 3.5.7.
  • Fix a problem where the value of wrapper.lang.folder was not being recognized if a wrapper.lang value was not set.
  • Fix a small memory leak resolving the language to run the Wrapper with.
  • Professional Edition:
  • Fix a couple slow memory leaks in the native code involved with launching and checking on the status of child processes.
  • Fix a problem where an attempt to throw a WrapperJNIError within native code on Z/OS would result in a ClassNotFoundException being thrown.
  • Reviewed the native JNI code and fixed a few potential crashes and memory leaks which could occur under low memory conditions.
  • Modify the way the wrapper.console.direct property works so the Wrapper will now always downgrade itself to using piped console writing as soon as it has determined that a physical console does not exist. In 3.5.21 we tried to predict when the console would not exist and disabling it in advance. There were cases where this was not correct, resulting in error messages in the console output.
  • Fix a problem where operations like installing a service on Windows 7 and above which need to be elevated were resulting in an error that the Wrapper could not write to the console. The actual operation was working correctly but the console output was incorrect. Since 3.5.21.
  • Move the check that the jar and wrapper versions match earlier in the startup process so we guarantee that a warning will always be displayed. There were some errors which could abort the startup process before this warning was logged.
  • Fix a potential buffer overlow reading data from a child process stderr or stdout if the amount of data available in the pipe is larger than the buffer length passed in to WrapperProcessInputStream.read(byte b[], int off, int len).
  • Fix a problem where reads from a WrapperProcessInputStream were consuming too much CPU while blocking for data on Windows. Now correctly being done asynchronously.
  • Fix a problem where JVM cleanup, including cleanup of child processes, was not always being done completely if the user requested an immediate shutdown by pressing CTRL-C twice.

New in Java Service Wrapper 3.5.21 (Oct 11, 2013)

  • Add a new 'R' log format which will track the number of milliseconds since the previous JVM log output. Useful for simple performance checks. See the wrapper.console.format, wrapper.event.default.email.maillog.format, wrapper.logdialog.format, and wrapper.logfile.format properties.
  • When the ACCESS_VIOLATION testing command of the wrapper.commandfile was used to kill the Wrapper some log output was not making it into the wrapper.log file. Add a forced flush just before crashing the Wrapper to make sure everything makes it into the log file.
  • Add a new wrapper.javaio.buffer_size property which makes it possible to control the size of the internal buffer used to process console output from the JVM. Also increased the default from the system default to 65536 bytes.
  • Renamed the wrapper.use_javaio_thread property to wrapper.javaio.use_thread. The old property still exists as a deprecated alias.
  • Added a new wrapper.console.direct property on Windows which tells the Wrapper to use Windows APIs to render log output to the console rather than writing to stdout and stderr. This results in a major speed improvement. The drawback is that this removes the ability to pipe the output to another program on the command line. We chose to enable this by default so the majority of users can take advantage of the speed improvement. If your application takes advantage of piping on Windows, you will need to disable this property to regain the old behavior.
  • Add a new "wrapperm" logging source on Windows to help differentiate which log entries are coming from Wrapper invocations used to control the Wrapper as a service such as starting, stopping, installing, etc. Previously the log entries from the Wrapper service process and launching process both used a "wrapper" logging source, which could be confusing.
  • On UNIX, modify the way we keep track of whether the process is daemonized or not. This was done to clean up a bit, but should not effect how the Wrapper works.
  • Fix a potential problem where internally queued log entries could fail to be logged on shutdown. The log queue is now always processed as part of the shutdown process.
  • Modify UNIX shell script to remove all existing run level rc files for the application on both install and remove, rather than only the ones for the currently configured run level to avoid unexpected behavior due to old rc files being left around. This only affects platforms which make use of rc files.
  • Add a new RUN_LEVEL variable to the UNIX shell script to make it easy to configure the run levels when installing as a daemon on various platforms.
  • Add new wrapper.logfile.close.timeout and wrapper.logfile.flush.timeout properties, and deprecate the wrapper.logfile.inactivity.timeout property, to increase control over when and how the logfile is flushed and closed.
  • Add a new PIDFILE_CHECK_PID setting in the UNIX shell script which makes it possible to control whether or not the script double checks that the pid in an existing pidfile is actually the pid of the application's Wrapper. This property makes it possible to disable this check so multiple applications can be tied to the same pid file.
  • Go through and make sure that none of the Wrapper native JNI methods are called after the WrapperManager shutdown has completed. Doing so was causing a JVM crash on some Linux JVMs. This was happening when a WrapperResources instance was finalized by the garbage collector on shutdown.
  • Professional Edition:
  • Fix a problem where processes created by calling the WrapperManager.exec() functions could fail to be registered with the Wrapper for cleanup if the call was made as the JVM was shutting down. This was resolved by making sure that JNI calls can not be called after the WrapperManager shutdown has completed.
  • Modify the internal WrapperManager tick thread so it is allowed to complete once the WrapperManager has fully shutdown. This was the only remaining reference to the WrapperManager class.
  • Add a new wrapper.property_warning.loglevel property which controls the log level at which the Wrapper will log warnings about undefined but referenced environment variables, as well as invalid boolean or integer values.
  • Update the way environment variables withing property values are parsed to make it possible to report those are not defined. Each pair of '%'s is now expected to be part of a variable reference. For example "�A�B�C%", previosly if "AAA" was not defined, "BBB" would be located, but now only "AAA" and "CCC" will be recognized as variables.
  • Fix a problem on Windows where a non-existent wrapper.working.dir directory was causing multiple error messages in the log file.
  • Modify the way the wrapper.environment.dump property works so it will now log at the INFO level with the rest of Wrapper output when set to true. When false however, the output will be logged as DEBUG output if enabled. Previous versions always logged the output to the INFO log level in either case.
  • Added new "jvm_ping_timeout", "jvm_ping_slow", and "jvm_ping_response_slow" events to help respond to ping related issues.
  • Fix a problem where a value of 0 for wrapper.ping.alert.threshold was not correctly disabling ping threshold alerts.
  • Fix a problem where the thread that handles events would permanently get stuck if the event queue filled up. This was very unlikely but not impossible if a large number of filter events were triggered in a very short time. Corrected the problem so it now recovers correctly, but also increased the queue size to make the overflow even more unlikely.
  • Standard / Professional Edition:
  • Fix a problem where console output of a wrapperw.exe processes launched when the wrapper.ntservice.console property was TRUE was not being shown correctly. This issue was introduced in 3.5.19.

New in Java Service Wrapper 3.5.20 (Sep 17, 2013)

  • Further improvements to the memory footprint of the Wrapper to minimize the memory required when logging JVM output consisting of very long lines.
  • Fix a minor potential buffer overflow, which could occur if the path of the first classpath element is larger than 1024 characters. This overflow was detected during a code review and we have no reports that it actually ever caused any problems.
  • Improve the error message displayed when the Wrapper's configuration file could not be loaded so that it now includes the name of the file.
  • Work around a libc system library bug on some HPUX platforms in which calls to vswprintf can cause a crash if the expanded string does not fit into the buffer. Worked around the problem with the help of HP support by making sure the buffer length followed a rule so that its length was 1+N where N is a multiple of 8.
  • Fix a problem on HPUX platforms where the JVM would sometimes get stuck on shutdown, when the shutdown was initiated within the JVM, leading to the Wrapper having to forcibly kill it. This was caused by the Wrapper attempting to close the backend socket when another read was blocking attempting to read from the same socket. This was introduced in version 3.5.8.
  • Fix a potential log corruption when queued log messages were larger than the internal buffer size. Found during a code review and is not known to have actually caused any problems.
  • Fix a typo in the shell script which was breaking the 'install' command on Solaris platforms.
  • Fix a potential crash on HPUX platforms if the value of the wrapper.port.address property had an encoding problem.

New in Java Service Wrapper 3.5.19 (Sep 17, 2013)

  • Fix a problem in the batch file, where a space in the path to the Wrapper.exe file would cause the script to locate the Wrapper.exe file. Introduced in 3.5.18.
  • When running as Windows service with hiding the console of the Wrapper will cause the Wrapper to disable unnecessary logging to the console in order to enhance performance.

New in Java Service Wrapper 3.5.18 (Sep 17, 2013)

  • Fix a problem, where an unclosed percentage character '%' was opening the chance of a dangling pointer in the additional java parameters. The '%' character is a special character, specifying an environment variable. Thanks and credits go to Geoff.
  • Added variable _WRAPPER_DIR the batch files to make it possible to specify any other directory where the Wrapper binary file is located. Until now the batch file and exe file had to be in the same location.
  • Added property wrapper.port.address, which makes it possible to specify a different address to bind the socket to when using the socket backend connection between the Wrapper and the JVM. Until now, the socket was always bound to the localhost loopback interface.
  • The script will from now on also use update-rc.d for installing an application as daemon on Debian. Thanks and credits go to Haifeng.
  • Whenever the Wrapper is causing the JVM to be forcibly terminated, the Wrapper will make sure the JVM has actually been terminated. If it wasn't after wrapper.jvm_terminate.timeout seconds, a pending restart will be canceled and the Wrapper exit.
  • Reworked the way the Wrapper is processing output from the JVM, in order to increase performance on huge output on a single line and also reduce memory usage.

New in Java Service Wrapper 3.5.8 (May 8, 2011)

  • (Standard / Professional Edition) Starting with version 3.5.5, we invalidated the use of all 00ff* hostids on Windows to avoid problems with changing hostids when users have a Juniper Network Connect network adapter on their system. This turned out to be too restrictive as Guest OSs running under Parallels also make use of this hostid range. The Wrapper is now more careful to only invalidate actual Juniper Network Connect hostids.
  • (Standard / Professional Edition) Improve the message shown to the user when the Wrapper is unable to locate any hostids for a system.
  • Fixed a problem with the Wrapper script on Solaris, where the option -F was not available for grep.
  • Added Windows version information on the Wrapper debug output.
  • Added a wrapper.log.warning.threshold property which makes the Wrapper show a warning whenever it detects that the Wrapper took a long time to record a log message. This was added to test a reported issue caused by slow IO on very heavily loaded systems.
  • Fix a problem where a filter that requested the JVM to restart would be ignored if the JVM exited on its own immediately. The Wrapper is now more consistent so that restart requests from within the JVM or filters will always take priority over such exit requests. External shutdown requests, or those from other actions will still behave as they did in the past and continue to shutdown the Wrapper. The Wrapper also logs messages in debug output if an outstanding restart request is being preserved or ignored.
  • Fixed a problem in the AppCommand.bat batch file which could occur on some Windows platforms with certain multi-byte system encodings. The script has been rewritten and questionable parts have been simplified. The functionality of the script has been preserved.
  • Added the environment variable WRAPPER_CONF_DIR, which can be used for the configuration properties. (Feature Request 3160644)
  • Made the script exit with the right exit code received when running the script as different user, specified in RUN_AS_USER. (Bug Report 3185281)
  • Fix an access violation which could happen when the code signing certificate has failed to been verified.
  • Log an error if the backend socket is forcibly closed externally. It had been getting logged at a debug log level. The message is "An existing connection was forcibly closed by the remote host. (0x2746)". Because the message was only logged if debug output was enabled, the JVM would be restarted with no clear explanation as to what happened. The source of the socket closure is under investigation.
  • (Professional Edition) Added the Java call fireUserEvent to the WrapperManager API. This enables to fire user event mails, actions without the filter trigger. Please also find more details about the security model for this call at the security page.
  • Fix a warning on Mac versions if the configured java command was not a universal binary. A check was added in 3.4.0 to make sure that the wrapper.java.command pointed directly to an executable to avoid unexpected behavior when running a script. The message is only a warning and the Wrapper continues regardless. Standard ppc, ppc_64, x86_64, i386, as well as the universal binaries will now all work correctly without a warning.
  • The default value of the wrapper.*.umask properties is using the current umask the process has. Before the default value was always 0022.
  • Add a new wrapper.backend.type property that is used to control whether the Wrapper communicates with the JVM using the traditional "SOCKET" or new experimental "PIPE". This was added as a workaround to a rare problem where some Windows machines are closing the socket at an OS level. This was only ever seen on Windows 2003, but could exist on other Windows versions as well.
  • Add a new experimental wrapper.use_javaio_thread property which causes the Wrapper to handle all java console output in a dedicated thread.
  • Add a new WrapperManager.isNativeLibraryOk() method which lets user code easily test whether or not the native library was loaded and initialized on startup.
  • Add a new PAUSE_THREAD command to the wrapper.commandfile property which makes it possible to test how the Wrapper behaves when various threads block or freeze. This was used to simulate and reproduce issues on heavily IO bound servers.
  • Improve the way the Java side of the Wrapper behaves when the Wrapper fails to ping the JVM for an extended period of time. The JVM used to exit to let itself resync itself with the JVM. This was causing problems on systems which were heavily IO bound because the Wrapper could block for a while while trying to write to the log file and the JVM was exiting. The JVM will now never exit under such circumstances. The JVM will never become orphaned because it will still exit almost immediately if the backend socket or pipe with the Wrapper is ever closed.
  • Deprecate the WrapperManager.appearOrphan() method as it is used to simulate a failure mode which is no longer possible with the Wrapper.
  • Changed the way the Wrapper is handling certificate errors regarding the code signing/timestamping certificate. The Wrapper will now only shutdown itself if the signature of the binary was not successfully verified because the binary or signature has been malformed but not if any problem with the counter-signer has been found. Starting with 3.5.7, the Windows Wrapper binaries are signed. Some users with locked down Windows 2008 systems had problems with the Wrapper refusing to start because the Comodo certificate had been disabled on their system.
  • Add a new wrapper.java.detach_started property which makes it possible to use the Wrapper as a simple tool to launch Java applications. When enabled, the Wrapper terminates immediately and the JVM is left to run on its own.
  • When running the Wrapper as a specified User Account, through the wrapper.ntservice.account property, the Wrapper will add permission for the account to log on as service automatically upon install. (Feature Request #3286491)

New in Java Service Wrapper 3.5.7 (May 4, 2011)

  • Changed the way the script is installing the daemon gets installed on an AIX system. The script now uses inittab & SRC.
  • Fix a problem in the shell script that was preventing the script from starting the Wrapper correctly if a file or directory existed in the current working directory which was one character in length. This was only a problem when the delta-pack naming of the Wrapper was used. This was easy to reproduce on AIX systems on system restart because a "u" directory exists in the root directory by default. This had been a problem since 3.4.0 when it was introduced as a fix to a Solaris problem. The root cause was a missing set of quotes in the tr command.
  • Fix a problem in the shell script that was preventing the script from finding the running Wrapper process when it was started when the working directory was in the same directory as the Wrapper binary, but queried later from another location. It would also fail if it was started from another location, but then queried from the location of the Wrapper. This was introduced in 3.5.6 when the script stopped changing the working directory in the script.
  • Add a new GC action that will cause the JVM to immediately perform a full garbage collection sweep. See the wrapper.commandfile, wrapper.filter.action., wrapper.check.deadlock.action, and wrapper.timer..action properties for details.
  • (Professional Edition) Modify the wrapper.event..command.block.action property slightly so it will now correctly warn if an unknown action is encountered. It had been defaulting to CONTINUE silently.
  • Modify the timing of the message shown when an #encoding directive is missing from the top of a configuration file. It was only being logged if debug output was enabled. It will now also be logged if the #include.debug directive is specified.
  • Fix the indentation of warning messages about encoding or include problems in configuration files.
  • (Standard / Professional Edition) Fix a problem where include file problems could cause the shell script to have errors due to invalid translated output from the Wrapper.
  • Add a warning when the maximum include depth is reached and include debugging is enabled. The Wrapper had always just silently skipped the include.
  • Fix a problem where #include.required directive was not correctly preventing startup if the include file was missing but the required include was in a nested include.
  • Fix a problem where the cause of some fatal include problems were not being logged correctly, resulting in a simple, non-informative message only that the configuration file failed to be loaded. This was a problem since 3.5.5.
  • Fix a Windows problem where the Wrapper could fail to start as a service if a defined environment variable would expand to a length larger than the 32k limit specified in the ExpandEnvironmentStrings system function. This was a problem on all Windows platforms prior to 3.5.5, but only on Windows 2000 since then, when the code used to reload the environment from the registry was disabled for newer versions of Windows. We now simply skip the expansion of the problem variable and continue with a warning. Bug #3103776.
  • Add a set of optional system properties that the WrapperSimpleApp, WrapperStartStopApp, and WrapperJarApp helper classes are aware of to tell them to ignore uncaught exceptions thrown within the main methods of the user application. The exceptions will still be logged, but they can now be configured so that the main method is just allowed to end without causing the Wrapper to shutdown in an error state. Java on its own will stay running in such a case as long as it has launched at least one non-daemon thread prior to the uncaught exception being thrown. This does not affect most users, but an application was found that was having problems because of this difference in behavior. See the javadocs of the helper classes for details.
  • (Professional Edition) Fix a problem when looking for the correct exit code to use for the wrapper.event..command.on_exit. property. The Wrapper now searches for a value as follows: wrapper.event..command.on_exit., wrapper.event..command.on_exit.default, wrapper.event.default.command.on_exit., then wrapper.event.default.command.on_exit.default. The third pattern had been getting skipped in previous versions since it was added in 3.3.0.
  • (Professional Edition) Add logic to report a warning if an unexpected value is specified for the wrapper.event..command.on_exit. property.
  • (Professional Edition) Clean up the message log levels so the output is as expected when using the wrapper.event..command.loglevel property.
  • (Professional Edition) Improve the wrapper.event..command.on_exit. property so the configured action will now work even if the command exits after the block time out has expired. In previous versions, there was no way to make the Wrapper do anything other than continue.
  • (Professional Edition) Fix a problem where the Wrapper was failing to detect a JVM exit correctly if an event command had been fired first. The only problem was that the Wrapper was always reporting a JVM exit code of 0 rather than the actual exit code.
  • Fix a buffer overflow on Windows when either installing as a service, or updating an existing service. The problem only occurred when properties containing spaces, or Java passthrough arguments containing spaces were specified on the command line. The running service did not have any problems. This was introduced in 3.5.0.
  • (Standard / Professional Edition) Improve the error message logged when an unlicensed version of the Wrapper's native library is used.
  • (Standard / Professional Edition) Fix a buffer overflow problem on Windows when creating a customized Wrapper binary if the target binary name did not include the ".exe" extension. This problem existed since its intruduction in 3.3.7.
  • The wrapper.exe, wrapperw.exe and wrapper.dll binaries are now being signed on Windows making it possible to verify that valid Tanuki Software binaries are being used.
  • Implemented a way to install, remove, start, stop, etc., the Wrapper as a Windows service from a non-elevated (UAC) console. The Wrapper is elevated transparently using a child process. This is needed starting with Windows Vista and 2008 for smooth interaction with the Windows Service Manager.
  • (Standard / Professional Edition) Fix a problem where the wrapperjni_*.mo localized files were not being loaded correctly. These messages are only shown when debug output is enabled. Application and Wrapper localization was working fine. Introduced in 3.5.5.
  • (Standard / Professional Edition) Enhanced the ability to run with localizations other than the system language on Windows. The Wrapper process locale was not being set correctly. So Japanese text was not always showing correctly if the wrapper.lang property was set when the OS was English or German. The Java process still has an issue where it will always start with the system default value for the file.encoding system property. This can still cause problems writing Japanese text when the file.encoding is German for example.
  • Added support in the shell script for starting/installing the Wrapper on system boot with upstart.
  • Fix a problem in the shell script where it would fail to recognize a running Wrapper if the Wrapper command line or path contained a square bracket.
  • Modify the way we test for the existance of the temp directory so we now generate our own file name rather than using File.createTempFile. On some systems createTempFile was taking a long time because it requires that Java initialize its internal entropy. We discovered that large numbers of files in the java.tmpdir directory makes Java's entropy initialization code very slow. This has been a potential issue since 3.5.0.
  • Fixed a problem on Windows where passthrough arguments after a "--" which contained spaces were not being passed through to the JVM intact, they were being split at the spaces into multiple arguments.
  • Fix a problem on Windows where the Wrapper could sometimes crash on shutdown if more than one thread got into the cleanup code at the same time. This did not affect running applications and was only an issue on shutdown. It was more likely if a language pack was loaded. Introduced in 3.5.3.

New in Java Service Wrapper 3.5.6 (Oct 18, 2010)

  • Fix a problem on UNIX platforms where the log file path was being calculated incorrectly if an absolute path was specified for wrapper.logfile, and the file did not already exist. A warning message was being displayed but the Wrapper would continue using the default log file. There was a problem in the message displayed which caused a crash on some platforms include Mac OSX. Introduced in version 3.5.5.
  • Fix a problem on Windows platforms where the Wrapper would crash if it could not access the directory of the configured wrapper.logfile. Introduced in version 3.5.5. Bug #3087424.
  • Improve the way warnings are logged when there are problems writing to the configured wrapper.logfile so that the message will now be logged into the log file that the Wrapper ends up using in case it is successful in falling back to a default log file.
  • Fix a problem on Windows platforms where wrapper.java.additional. properties that were specified on the command line, and contained spaces, were not being requoted correctly when building up the Java command line. Introduced in version 3.3.6.
  • Fix a problem where the warning message logged for invalid values of the wrapper.java.additional. property, contained corrupted text. Introduced in version 3.3.6.
  • Fix a problem on UNIX platforms where an invalid value for the wrapper.java.additional. property was correctly being reported and then skipped, but the resulting command line to launch the JVM had a blank value that was causing the JVM to fail to launch. An invalid value is any value that does not begin with a "-" character.
  • Add a new WRAPPER_INIT_DIR environment variable which can be used to reference the working directory from which the Wrapper was launched. This is needed for certain applications because the Wrapper always changes its working directory to the location of the Wrapper binary.
  • Modify the UNIX shell script so it no longer changes the current working dir to the location of the script. This is no longer needed because the Wrapper has been changing the working directory to its own location since version 3.2.0.
  • Add a new wrapper.request_thread_dump_on_failed_jvm_exit.delay property to control how long the Wrapper will wait after doing a thread dump before killing the Java process. This delay has always been hardcoded to 5 seconds.
  • Clean up the text of several warning messages about invalid configuration values to make them more consistent.
  • (Professional Edition): Add a new wrapper.jvm_kill.delay property which makes it possible to control the amount of time to allow between the jvm_kill event being fired and the JVM actually being killed. Useful if an external event command is fired that needs to do something with the JVM process first.
  • (Professional Edition): Fix a problem where the output of the wrapper.event..message and wrapper.event..loglevel properties were not displaying correctly on UNIX platforms.
  • (Professional Edition): Fix a problem on UNIX platforms where the Java side of the Wrapper was not being correctly notified if a large number of child processes that had been launched with WrapperManager.exec(), exited at the same instant. Some of them were going into a defunct state until the next child exited, at which point they would be cleaned up. This was mainly an issue on JVM shutdown if the user code was calling WrapperProcess.waitFor() as part of its shutdown process. WaitFor calls at any point were getting stuck and would remain so until another child exited. As part of this fix, there were also several changes to the Windows implementation to bring the two code bases into sync.
  • (Professional Edition): Fix a problem on Windows when multiple threads were creating Childobjects, Handles could have been unintendedly get inherited by another Child Process, causing problems on reading/writing to the Input/Output/Errorstream.
  • (Professional Edition): Fix a problem on solaris and AIX when errno calls were not thread safe due to a compiler switch.
  • Fix a problem where debug level warning output while loading the Wrapper configuration was being displayed on startup. This could be fixed because the Wrapper actually loads the configuration twice, and such output is now only logged on the second call.
  • (Standard / Professional Edition): Remove the undocumented ability to define a single file share mapping without the index. This would cause confusion if used, and complicated the code.
  • (Standard / Professional Edition): Fix a byte alignment problem caused by a bad compiler directive on Windows platforms. It was known to cause a crash when defining mapped drives on 64-bit Windows versions. The problem was in the source since version 3.3.7, but is not known to cause any other issues.
  • (Standard / Professional Edition): Modify the messages displayed when network shares are mapped or fail for some reason. Also add messages about them being unmapped on shutdown.
  • On some Windows platforms, a failure to delete a rolled log file was not being reported correctly. The system function to delete a file was returning success even if it had failed. We now double check.
  • Fix a deadlock in the code that is used to send data to the Java process. It was only possible if debug level output was enabled and log file rolling was enabled. Introduced in 3.3.7.
  • Fix a problem where the WrapperManager.getWrapperLogFile() was not returning the accurate log file name until the first time the log file was rolled after each JVM invocation. This was only noticeable if the wrapper.logfile contained either the "ROLLNUM" or "YYYYMMDD" tokens.
  • Correct an error message that was displayed on UNIX platforms when the configured java binary could not be accessed. The message referenced a buffer whose contents were undefined on some platforms.

New in Java Service Wrapper 3.5.5 (Oct 4, 2010)

  • Add new wrapper.filter.trigger. action, "SUCCESS". If this gets triggered then the Wrapper will treat the current JVM invocation as a success, and reset its internal failed invocation counter. This is useful for applications that need to be restarted frequently.
  • (Standard / Professional Edition) Ignore Juniper Network Connect hostIds as they change on each reboot and are thus unreliable as hostIds.
  • Added a PASS_THROUGH setting to the UNIX shell script and Windows AppCommand.bat.in files which tells them to pass any extra arguments directly on to the JVM when it is launched.
  • Added a FIXED_COMMAND setting to the UNIX shell script and Windows AppCommand.bat.in files to make it possible to run either without specifying a command. Mainly useful in conjunction with PASS_THROUGH.
  • (Standard / Professional Edition) Added a --passthrough option to the exe customization, in order to tell the wrapper to precede the whole command line through to the application in the JVM.
  • (Standard / Professional Edition) Added a --conf option to change the default conf file, the wrapper tries opening when no conf file was explicitly specified.
  • Added the wrapper.ntservice.account.prompt property. If set to TRUE the wrapper will prompt for all account details (domain, account name, password) before installing the app as service.
  • Fix a minor issue in #include file declarations where a leading space was not required.
  • Add a new #include.required directive which works the same as the #include directive except that it will output an error and prevent the loading of the configuration if the included file does not exist. Normally include files are optional by design.
  • Modify the error messages displayed when configuration files fail to load so they now provide more information about where specifically the problem was.
  • Disabled the forced reloading of the SYSTEM (and if set to a specific account, the user) registry before launching the Wrapper as a service on Windows. This was done originally in Windows NT because changes to the configured environment were not being reflected when running a service unless the system was first rebooted. Microsoft appears to have solved this problem in Windows XP and 2003. In Windows 7 and 2008, this was actually causing a problem because the SYSTEM registry contains a setting "USERNAME=SYSTEM" by default that was overwriting the USERNAME when run as specific user. It was decided to disable this registry loading for Windows versions starting with XP and 2003. Of the supported versions, only 2000 is now reloading its environment. The only difference from version 3.5.4 and earlier that could be found is that when running as the SYSTEM user on Windows 7 or 2008, the USERNAME environment variable will now be set to the host name followed by a dollar sign rather than SYSTEM. This is actually how all other services work. But just in case this is a problem, it can we resolved by adding a "set.USERNAME=SYSTEM" property into the Wrapper configuration file. Bug #3061490.
  • (Standard / Professional Edition) Fix a problem for Solaris and HP-UX where the send and receive timeout properties for the email notifications were ignored.
  • (Standard / Professional Edition) Added wrapper.ntservice.recovery. properties to define system level actions in the event that the Wrapper process itself has a failure.
  • (Standard / Professional Edition) Fixed a problem in the WrapperProcess.waitFor() and WrapperProcess.returnValue() call, where it would fail to return when called after the Wrapper had initiated the shutdown of the JVM.
  • (Standard / Professional Edition) Add WrapperProcessConfig.setSoftShutdownTimeout(int) method to tell the Wrapper how long to wait after nicely asking the child process to shutdown cleanly when calling WrapperProcess.destroy(). Once the timeout has ellapsed, the child process will be forcibly terminated. This timeout had been hard coded to 5 seconds in earlier versions.
  • Add more detailed usage output to the UNIX shell script.
  • Make it possible to 'pause' and 'resume' the JVM from the UNIX shell and Windows batch scripts.
  • (Professional Edition) Fix a minor memory memory leak while initializing timers.
  • Fix a memory leak which could happen if there were any invalid strings in localization resources.
  • (Professional Edition) Fix a bug where the wrapper.event..command.argv. properties were not correctly parsed on Windows. This issue was introduced in version 3.5.0.
  • (Professional Edition) Add the ability to define wrapper.event.default.command.argv. properties that will be used if the event specific specific commands are not defined. Mainly useful for testing.
  • Fix a problem occuring when the wrapper failed to roll the log file causing to write to the wrapper's default log (wrapper.log) file rather than continuing to write to the current logfile.
  • (Standard / Professional Edition) Fix a put problem in the internal hash map implemenation used for localization where values could be lost. This was not a visible issue because of the data used.
  • Add new wrapper.filter.allow_wildcards. property and make it possible to specify wrapper.filter.trigger. patterns which contain '*' and '?' wildcards.
  • Add a commented alternative in the default OutOfMemoryError filter configuration to make it more specific to only trigger on uncaught exception stack traces. This is to avoid output like that from the -XX:+PrintClassHistogram JVM argument from causing the JVM to restart with a false out of memory warning. See wrapper.filter.trigger. OutOfMemoryError example for more details.
  • Localize the default filter message.
  • Added ISO-8859-* encoding support and a few other encodings. For a full overview, please refer to the Internationalization / Localization page.
  • (Standard / Professional Edition) Fix a problem on UNIX versions, parsing dates in license keys that was introduced in version 3.5.0. Windows verisons did not have this problem. All license upgrade terms and lease terms which contained "08" or "09" as either a month or day were being parsed incorrectly. This was leading the Wrapper to interpret those date components as "00". If the number was the date, then this would cause the date to be set to the last day of the previous month. If it was the month however, it would cause the date to be set to December of the previous year. For example "2010-08-20" was being interpreted as "2009-12-20", and "2010-10-08" was being interpreted as "2009-09-30". This would have prevented some licenses from being able to start because the upgrade terms were in effect prior to the Wrapper's release date. Some trial licenses could also have stopped early because their lease term end was earlier that it should may have been. For normal licenses, his will have no effect on installations once they are up and running because they do not use the lease term.
  • Fix a problem on Windows when a service received several service control codes in rapid succession. Since version 3.5.1, the Wrapper was only to process a single control code in each cycle of its main loop. This was resulting in messages like "Previous control code (4) was still in queue, overwriting with (4)." in the logs. The Wrapper can now handle up to 25 control codes per 10ms cycle.
  • Fix a problem where it was not possible to send passthrough arguments to the JVM when installing or updating a Windows Service. Passthrough using the "--" argument was added in 3.5.2.
  • Add a new wrapper.pause_on_startup property which makes it possible to tell the Wrapper to go directly into a paused state without ever launching a JVM.
  • Fix a problem where the STOP command set in a command file was being ignored if the Wrapper was currently in a paused state.
  • Make it possible to specify DEFAULT for the configuration file encoding. This will cause the file to be loaded using the default system encoding. We added this by request, but recommend using a portable encoding like UTF-8 to ensure that the configuration file will load correctly on all systems.

New in Java Service Wrapper 3.5.4 (Aug 31, 2010)

  • Add optional support for custom public static methods in the WrapperSimpleApp and WrapperStartStopApp helper classes. Feature Request #2812276.
  • Add a new special configuration file directive "#properties.debug" which enables debug output about the properties as they are loaded by the configuration file. This can be useful to tell if and why certain properties are being overwritten. Feature Request #3042959.
  • Fix a minor problem where the "#include.debug" configuration file directive was sticky so it would be enabled when the configuration file was reloaded even if the reloaded configuration file no longer had the directive set. This was only an issue if the wrapper.restart.reload_configuration property was set.
  • Messages about missing included configuration files that were output when the "#include.debug" configuration file directive was active were being logged at the ERROR level even though they were not problems.
  • Fix a minor problem where the WRAPPER_JAVA_HOME environment variable was not correctly being set to final when it was set internally by Wrapper. This could lead to unexected results if the user overwrote it later in their configuration file.
  • Fix a problem on AIX and z/OS, when running the Wrapper without any arguments. The Wrapper was attempting to use the default wrapper.conf file but the check for the file was failing causing the Wrapper to continue even though the file did not exist. This caused a confusing error message to be displayed, but was otherwise harmless.
  • Clean up some debug code associated with sleeping where log output was being queued when it did not need to be.
  • (Standard / Professional Edition) Consolidate some redundant code associated with waiting for interfaces on startup.
  • (Professional Edition) Fix a problem in the email feature of the Wrapper where a subject of more than 27 bytes in length when encoded as UTF-8. This was caused by a miscalculation in the Base64 conversion of the subject.
  • (Professional Edition) Fix a problem when the WrapperManager.exec method which takes an array of command elements was called on Windows. The command elements need to be combined into a single command line, but if any of the elements contained spaces, the resulting command line was not being correctly quoted.
  • Add a new wrapper.java.command.resolve property to control whether or not the Wrapper tries to resolve any symbolic links in the Java command, specified with the wrapper.java.command property. Historically, it has always done so, but some jvm started applications like run-java-tool on Gentoo will fail if it is run directly as they have a check to make sure it is launched via a symbolic link.
  • Fix a problem on Windows versions where a path to the Wrapper binary, including the Wrapper binary itself, which was more than 100 characters would cause a buffer overflow when installing the service. A second similar problem would happen if the same path was more than 128 characters, whenever the Wrapper was launched. These were both very old issues and only happened on 32-bit versions of Windows XP and 2000. Microsoft documentation says that the issue should also exist on the 64-bit versions, but we were unable to reproduce it there. Newer versions of Windows are all fine.

New in Java Service Wrapper 3.5.3 (Aug 4, 2010)

  • Fix a typo in the UNIX shell scripts that was causing "command not found" errors to be shown when running the Community Edition.
  • Add new wrapper.console.fatal_to_stderr, wrapper.console.error_to_stderr, and wrapper.console.warn_to_stderr properties to control whether the output at the FATAL, ERROR, and WARN log levels go to stdout or stderr. In the past they all went to stdout. With this change, FATAL and ERROR log levels now default to stderr output.
  • Fix a problem where the shell script would produce unexpected results if the Standard or Professional Edition shell scripts were used with the Community Edition Wrapper. Fix was in Wrapper binary by changing the default ERROR and FATAL log level console output to stderr rather than stdout.
  • (Standard / Professional Edition) Fix a problem where script error message output was not being shown if the wrapper.conf file specified in the script did not exist.
  • Fix a problem where errors from failed forks on Windows were always being flushed immediately rather than honoring the value of the wrapper.console.flush property.
  • Fix a problem on Windows 2000 systems where a new feature added in 3.5.2 was preventing the Wrapper from running because the API used was too new.
  • (Standard / Professional Edition) Change the font of the wrapperw dialog in order to have prettier output of multibyte characters.
  • Add a line feed after the first message when starting the Wrapper from the UNIX script.
  • Add a note in the debug output so the configured java temporary directory is always logged to help with debugging.
  • Add a workaround for a bug in both Sun and IBM JVMs which cause an invalid exception to be thrown when a socket is already bound. It had been causing the Wrapper to report: "Unexpected exception opening backend socket: java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind": Bug #6965962.
  • Change the encoding of the subjects in the event mails to be always UTF-8 Base-64 encoded.
  • (Professional Edition) Add new wrapper.event..email.smtp.auth.type, wrapper.event..email.smtp.auth.userid, and wrapper.event..email.smtp.auth.password properties which make it possible to do LOGIN and PLAIN connection authorizations. Currently SSL (STARTTLS) connections to the mail are server are not yet supported.
  • Fix a buffer overflow while loading the configuration file on Mac OSX versions. Introduced in 3.5.0.
  • Fix a several memory leaks on UNIX versions that were added in 3.5.0, as well as a few others on all platforms, some from quite early versions.
  • Fix some places where a resolved path of exactly MAX_PATH characters in length could have resulted in a buffer overflow.
  • (Standard / Professional Edition) Fix a memory leak disposing language packs.
  • Go through and increase the consistency of text strings.
  • Fix a problem on HP-UX where the Wrapper was logging a warning that the configured JVM was invalid if it was a PA-RISC 2.0 binary. Bug #3037317.
  • Fix a problem where the WrapperManager was failing to trap and hide errors initializing the MBean server on some JVMs that did not support it.

New in Java Service Wrapper 3.5.2 (Jul 21, 2010)

  • Added new command line argument "--" . All arguments following will be preceded and passed to the java application. The arguments are attached after the arguments used in wrapper.app.parameter.
  • Fixed a problem in the shell script which could lead to report failed starts of a daemon incorrectly on the command line.
  • Implemented some small logic in the wrapper script which tries to change the permissions of the wrapper binary to executable if it wasn't set.
  • The Demo Application had problems locating the right conf file on Unix platforms and failed to launch the internal demonstration wrapper process.
  • Improved the error message logged if the Windows version of the Wrapper exits with an internal error. It now logs more information about the internal state of the Wrapper as well as saving a mini dump file which can be sent to support to make it easier to diagnose the cause of the problem.
  • Fix a problem where the names and displayNames in WrapperWin32Service instances were corrupted. List affected the WrapperManager.listServices(), WrapperManager.sendServiceControlCode(), and WrapperManager.setConsoleTitle(), methods. Introduced in 3.5.0.
  • Fix a problem on Windows where wildcards would sometimes fail to be resolved or cause the Wrapper to crash. This affected the generation of classpaths and logfile rolling. Introduced in 3.5.0.
  • Fix a problem where invalid characters in configuration files that did not declare an encoding could cause the Wrapper to crash on startup. This could be issue for users upgrading from versions prior to 3.5.0 as older versions did not do any character set translations and would not have had a problem.
  • Fix a problem in code to check whether a drive was a mapped network drive or not was failing. This would sometimes lead to a false warning that the drive could not be identified. Introduced in 3.5.0.

New in Java Service Wrapper 3.4.1 (May 18, 2010)

  • Fix a problem where the wrapper.app.parameter.1 property was always being set to an empty string when launched from launchd on Mac OSX. It worked correctly with the testwrapper application, but would fail or most user applications.
  • (Professional Edition): Fix a potential synchronization problem in the log output of the tick timer, event command and event email code. This had been in the code since 3.3.0 without any reports of problems.
  • Improve the error message displayed when the configured wrapper.java.command can not be found on the path.
  • Log the name of the signal in the logs when a SIGSEGV is detected from the JVM. It had been logged as Unknown.
  • Add some comments to the wrapper.conf.in template to help users get started with a new license key file.
  • Add some default properties to the wrapper.conf.in template file to make it easier to get up and running with out of memory checks, as well as sending out alert emails.
  • Add a small debug message when running wrapperw.exe so it is clear which wrapper binary is being used.
  • (Professional Edition): Fix a problem in the WrapperProcess.destroy() function, where the function was failing to forcibly kill the child process.
  • (Standard / Professional Edition): Add a new GetHostID.bat file for Windows platforms. This file will open a dialog displaying the HostId of the machine to help new users get up and running.
  • Add a new WrapperManager.appearOrphan() method which can be used to test how the WrapperManager shuts down the JVM in the event that the Wrapper process ever crashes or freezes. This was not due to any particular problem and was added to fill out our test coverage.
  • Fix a problem where the wrapper.logfile.maxfiles was not being applied on startup when the current log file did not yet exist. This was true for any wrapper.logfile value which contained a unique value like a PID.
  • (Professional Edition): Fix a bug leaving an event command being defunct after its execution.
  • (Professional Edition): Add wrapper.event..command.block.action property, with which the bahaviour of the wrapper towards a command which has ellapsed can be specified. Possible values are KILL or CONTINUE, the default value is CONTINUE.
  • (Professional Edition): Fix a problem where event commands were being left in a defunct state after execution on UNIX platforms.
  • Fix a potential problem on 64-bit versions where the internal tick timer was not rolling over in the same way as the 32-bit versions. This has been in all previous versions but is not known to have caused any problems. It was fixed for consistency.
  • Modify the WrapperManager class so it will now request a JVM hard exit only after 4 times the ping timeout in seconds since the last contact with the JVM. This had been 90 seconds more than the ping timeout, which was not always long enough when the wrapper.ping.timeout was very large.
  • Shift the initial start point of the tick counter so it will roll over 50 seconds after startup. This shouldn't be noticeable to the user, but makes sure that this roll over is much better tested as it always happens the first time on startup.
  • Add a new wrapper.java.classpath.use_environment property which makes it possible to set the classpath using the CLASSPATH environment variable rather than including it on the Java command line.
  • Fix a problem where requests to shutdown the Wrapper when in the state where it was just about to launch a JVM would being ignored. This was fixed in all editions, but was only an issue in the Professional Edition when the wrapper.event.jvm_prelaunch.command.on_exit.=SHUTDOWN property was being used with the wrapper.event.jvm_prelaunch.command.block=TRUE property and the command exited with a code that triggered the SHUTDOWN.
  • (Professional Edition): Add a new wrapper.event..command.block.action property to control how the Wrapper behaves when a command does not complete execution within the configured timeout. Accepted values are CONTINUE, KILL, KILL_SHUTDOWN and KILL_RESTART. Default value is CONTINUE.
  • (Professional Edition): Made it possible to use the "default" event type with the wrapper.event..command.loglevel, wrapper.event..command.block, wrapper.event..command.block.timeout, wrapper.event..command.on_exit., and wrapper.event..command.on_exit.default properties.
  • Fixed a single byte buffer overflow which takes place just before the JVM is launched Windows platforms. This was introduced in 3.4.0.
  • Add a message pointing the user to the Wrapper's log file when the service fails to start after it has been launched.
  • Update the debug message displayed when attempting to open the backend socket if the port is unavailable so it doesn't seem like a problem. It will retry with another port.
  • Work around an issue on some Solaris problems where the shell script would fail if /usr/ucb/ps wasn't installed.
  • Fix a problem on UNIX versions where the Wrapper would fail to resolve the correct location of java if it was located using the sytem PATH, and that PATH element pointed to a binary via a relative symbolic link. This was introduced in 3.4.0.

New in Java Service Wrapper 3.3.9 (Nov 30, 2009)

  • Modify the way JNI functions are called from within the native library so they work correctly on platforms which are not ASCII based.
  • Add support for IBM z/OS 390 servers. This is still an alpha release and will be made available on request.
  • Improve the message displayed when a server license key is used on a different server.
  • Add a minimum max file size of 1024 bytes to the wrapper.logfile.maxsize property to avoid the log file rotating too often if the user enters a very small value.
  • Add a message that shows up in the console when the Wrapper fails to write to the configured log file. As with previous versions, it will then fall back to writing to wrapper.log in the current working directory.
  • On UNIX platforms, automatically set the wrapper.disable_console_input property when wrapper.daemonize is set.
  • Fix a problem introduced in 3.3.8 where relative configuration file includes were failing to resolve correctly when the wrapper.working.dir and wrapper.daemonize properties were used together. The wrapper.daemonize property causes the configuration to be loaded twice on startup and the working directly was not being reset correctly before it was loaded the second time.
  • Fix a problem introduced in 3.3.8 where wildcard selection of files on Windows failed in some cases.
  • Fix a problem introduced in 3.3.8 where setting the wrapper.logfile.maxfiles property to 0 was causing all log files to be deleted rather than none when the ROLLNUM file pattern was used.
  • Revert the way rolled log files are deleted when using the ROLLNUM file pattern to the functionality used in versions 3.3.7 and earlier. Files such as wrapper.log.bak or other files manually created with the same log file base name were also being deleted with 3.3.8.
  • Fix a problem where the close window button in the title of the WrapperW log dialog was not correctly cancelling the dialog.
  • Fix a problem where the WrapperW log dialog would sometimes fail to show itself on top of other windows if the splashscreen had been displayed on startup.
  • Fix a problem on 32-bit Windows versions where starting with he Wrapper, the WrapperManager.getUser() and getInteractiveUser() methods were always returning null. This problem was introduced in version 3.3.6.
  • Fix a buffer overflow when sending alert emails to multiple addresses. This did not appear to cause any crashes, but some platforms would report it because they have overflow checking enabled.

New in Java Service Wrapper 3.3.7 (Oct 21, 2009)

  • (Standard / Professional Edition)
  • Added the ability to customize the wrapper.exe and wrapperw.exe binaries on Windows with a user specified icon and splash screen.
  • (Standard / Professional Edition)
  • Added a new wrapper.splashscreen.mode property to control how long the splashscreen is visible.
  • Fix a problem on SELinux where a strict security policy could lead the Wrapper fail to load the libwrapper library. Thanks to Jean for the hint.
  • (Standard / Professional Edition)
  • Fixed a problem in the obfuscated license date, which caused a license to be reported as invalid if run in a timezone west of Japan. This feature was implemented in 3.3.6, but disabled on the site until the release of version 3.3.7. Thanks to Leo for the hint.
  • Fix issue about SELinux where strict security policy could lead the wrapper fail to load the libwrapper library. Thanks to Jean for the hint.
  • Added a new WRAPPER_PID environment variable. Feature Request #2870136.
  • Added a new WrapperManager.getWrapperLogFile() method and WrapperLogFileChangedEvent class that can be used to receive notifications of changes to the Wrapper log file currently in use. Feature Request #2870133.
  • (Professional Edition)
  • Improved the wrapper.event..email.to property so it now supports the ability to specify multiple recipients.

New in Java Service Wrapper 3.3.6 (Sep 1, 2009)

  • (Standard / Professional Edition)
  • Introduce the wrapper.timezone property. This property allows to set the timezone in which the wrapper will be executed.
  • Fix a potential problem on Windows platforms where a failure to register the control handler was not being logged. If this happened, user logoffs would not be trapped correctly but no other problems would have occurred.
  • Fixed a small problem in the shell script on Solaris platforms where a deep directory structure would cause the script to incorrectly report that the Wrapper was not running. That could lead to multiple zombie copies of the Wrapper and its application running in memory. Bug #1664303.
  • Fixed a problem in the shell script on HP-UX platforms where a deep directory structure would cause the script to incorrectly report that the Wrapper was not running. That could lead to multiple zombie copies of the Wrapper and its application running in memory. Bug #2812207.
  • Improve the error message displayed when there are problems initializing the main class specified for the WrapperSimpleApp, WrapperStartStopApp, or WrapperJarApp helper classes.
  • (Professional Edition)
  • dd new wrapper.event..loglevel and wrapper.event..message properties which can be used to output a customizable message like "Event: " to the logs at an arbitrary log level.
  • Add debug output in the Windows version to log the full path of the native library.
  • Add a new wrapper.java.detect_debug_jvm property which will control whether or not the Wrapper disabled timeouts when java's debugger is in use. The Wrapper has automatically disabled timeouts in this case since version 3.2.1. Thanks to Ruslan Gainutdinov for the patch.
  • Fix a buffer overflow problem for values of wrapper.ntservice.name.
  • Fix a problem with where the wrapper.syslog.ident property was not working as documented. It had been necessary to use wrapper.ntservice.name in its place.
  • Add a new wrapper.ignore_sequence_gaps property which makes it possible to have non sequential numbered property values. This affects the wrapper.app.parameter., wrapper.event..command.argv., wrapper.filter.trigger., wrapper.java.additional., wrapper.java.classpath., wrapper.java.library.path., wrapper.ntservice.dependency., and wrapper.timer..interval, properties. The default value maintains past functionality. Feature Request #1930298.
  • (Professional Edition)
  • Fix a problem where the Event Handler Variables were not being set correctly in the values of the wrapper.event..command.argv. properties.
  • (Professional Edition)
  • Fix a potential access violation if memory allocations fail while sending event mails or executing event commands.
  • Add a new WRAPPER_HOSTNAME default environment variable as an alias of the existing WRAPPER_HOST_NAME variable.
  • (Professional Edition)
  • Deprecate the use of the wrapper.event..set_environment property. It will remain in the product for compatibility but its use is discouraged as it does not always work correctly when the configuration file is reloaded. See the property's documentation for more details.
  • Add a new DUMP action to the wrapper.filter.action. property to make it possible to invoke a thread dump in response to a specific string in the JVM's console output.
  • Fix a problem where the WrapperManager.stopAndReturn method was dead locking if called when the JVM was being run in standalone mode without the Wrapper. Bug #2711872.
  • (Standard / Professional Edition)
  • Modify the way the licensing times work so the Wrapper compares the License Upgrade Term to an official release date rather than the build date. This makes it possible to release additional platforms at a later date while keeping the use of a license consistent.
  • (Standard / Professional Edition)
  • Make it possible to obfuscate the upgrade term in License Key files for development licenses so it is not visible to an end user what the development license holder's upgrade term is. This feature is accessed from the License Management Page when downloading a new or existing License Key file.

New in Java Service Wrapper 3.3.3 (Mar 9, 2009)

  • Modify the wrapper.ignore_signals property so it now takes the values WRAPPER, JAVA, and BOTH, in addition to TRUE and FALSE.
  • Modify the WrapperManager so it is now careful never to poll the native library once the JVM is flagged as being ready to shutdown. This is to make sure that the JVM never exits in the middle of a call as that could lead to the JVM crashing.
  • Add a pair of methods to allow threads to request and release locks which will prevent the Wrapper from letting the JVM exit while certain operations are in progress. See WrapperManager.requestShutdownLock() and WrapperManager.releaseShutdownLock().
  • Fix a problem where interactive services would sometimes leave a console window visible when after starting up. The Wrapper is now more resilient about closing the window even if it fails to do so initially.
  • Add a new integration method (#4), which makes it easy to configure the Wrapper to execute an executable jar file.
  • Fix a problem where the random generator was not being seeded correctly before naming the Wrapper's console window when running as a Windows service. This was leading to problems identifying the wrapper's console when more than one service was running on the same machine.

New in Java Service Wrapper 3.3.0 (Apr 2, 2008)

  • Add a new wrapper.ping.interval.logged property which makes it possible to reduce the debug output caused by ping transactions between the Wrapper and JVM.
  • Fix a problem on Windows where the Windows Service Manager was not waiting the full configured time of the wrapper.jvm_exit.timeout and wrapper.shutdown.timeout properties. This was leading to the net stop command timing out and the system shutting down without the java application having fully stopped. Bug #1582568.
  • If internal firewalls were preventing the backend socket from being created, it was not being made clear what the cause was. It was also possible that the JVM would deadlock on shutdown. This second problem was recovered from when the Wrapper killed the JVM.
  • Rework the console output from all Wrapper classes to make it much more obvious that that is their source.
  • Submit a patch to the UNIX sh script by Chris Dance which makes it possible to tell the shell to wait a few seconds for the wrapper to start up. Also includes some modifications to work correctly on older Debian and RedHat systems.
  • Fix a problem where the local copy of ant was not always being used correctly on UNIX systems which have a default copy of any installed. Thanks to Robey Pointer for the patch.
  • Add the -lm to the command line when building Linux 32 and 64 bit versions of the wrapper on Linux. This is to support building on recent Debian and Ubuntu versions. Thanks to Robey Pointer for the patch.
  • Add support for the SIGUSR1 and SIGUSR2 signals so they can now trigger a shutdown, restart or be forwarded to the JVM for custom functionality. See the wrapper.signal.mode.usr1 and wrapper.signal.mode.usr2 properties. Based on a patch by Robey Pointer. Note that the JVM process does not trap SIGUSR1 or SIGUSR2 signals as they are used internally by the JVM as part of the garbage collection process.
  • Fix a problem where the WRAPPER_OS, WRAPPER_ARCH, and WRAPPER_BITS environment variables were not being initialized correctly for the various unix platforms.
  • Removed the 4096Mb upper limit set on the wrapper.java.initmemory and wrapper.java.maxmemory properties. 64bit users need to go way beyond that.
  • Fix a problem where relative include file references in the configuration file were not working correctly if the wrapper.working.dir was used to change the working directory. The working directory is now always reset to its original value as the configuration file is being loaded.
  • Added a new wrapper.registry.java_home property which makes it possible to specify the location of java within the registry.
  • Set a new WRAPPER_JAVA_HOME environment variable if the JAVA_HOME is located in the Windows registry.
  • Modify the way properties are looked up so that any unreplaced environment variable references will be reevaluated in case they were set after the property was originally set. This is possible with some WRAPPER_* environment variables or depending on the placement of set.* properties in the configuration file.
  • Set any unset properties to their default values internally. This is necessary so the WrapperManager.getProperties() method returns the correct set of active properties.
  • Fix an occasional crash with 64-bit UNIX caused by a native synchronization problem when system signals are trapped. Bug #1614010.
  • Fix a problem on Solaris versions, where the Wrapper was not correctly recovering and attempting another back end port when the first was already in use. Bug #1594073.
  • Fix a problem on Solaris and AIX where the RUN_AS_USER feature of the shell script was not working due to lack of support for the "-m" option of su. The shell script now uses "su -". Bug #1590168.
  • Add HP-UX Makefiles for building with make. Fix some problems in the shell script to make the script work better on HP-UX. Thanks to David Brown and Nicolas Varney for the patches.
  • Fix a problem where any signals received by the JVM and triggering a SIGCHLD signal in the Wrapper were being interpretted as the JVM having stopped. This was not always true. Bug #1643666.
  • The Wrapper is now able to detect when the JVM process is stopped and continued. It will still timeout if stopped, but a descriptive warning is now logged.
  • Increase the maximum number of log entries which can be queued to avoid losing them. These are only used for log entries outside of the primary thread.
  • Fix a problem in the shell script which was making it impossible to stop the Wrapper or query its status on OSX.
  • Add support for 64 bit AIX. Thanks to Nicolas Varney for supplying a Makefile.
  • Correct the AIX library extension to be ".a".
  • Rename the UNIX Makefiles so it is more obvious which tool must be used to build with them.
  • Fix a problem where the HP-UX native library would not be located correctly for some processor types if the file had a platform specific name.
  • Internally rename the WRAPPER_JSTATE_LAUNCH state to WRAPPER_JSTATE_LAUNCH_DELAY for clarity.
  • Fix a problem where the UNIX versions of the Wrapper would shutdown rather than restarting a frozen JVM if the arrival of the SIGCHLD signal from the old JVM process was delayed by more than a second or two.
  • Rework the Windows build so it now uses nmake and a Makefile rather than vcbuild. This is probably not as clean, but it was needed to get the 64-bit build working.
  • Fix a problem on Windows versions where quoted values specified from the command line were not always being requoted correctly when generating the java command line.
  • Add validation checks for Windows versions to make sure that all additional parameters, application arguments, the classpath, and library path all contain values which are quoted correctly. Incorrectly quoted values will now result in a warning message that will help resolve the problem.
  • Fix a memory leak when calling WrapperManager.listServices() on Windows. Bug #1665947.
  • Fix a buffer overflow problem if the Wrapper was launched without explicitly specifying a configuration file.
  • Add tests of the return values of all malloc calls to catch out of memory errors and recover as gracefully as possible. Bug #1649880.
  • Modify the WrapperManager.signalStarting and signalStopping methods so that they will never have the effect of shortening the existing timeout.
  • Updated the javadocs of both methods so they more accurately reflect what the methods do.
  • Move the Wrapper Copyright banner into the Wrapper process so it will be output more consistently.
  • Branch the code to support Community, Standard, and Professional Editions of the Java Service Wrapper.
  • Add WRAPPER_BIN_DIR and WRAPPER_WORKING_DIR environment variables which are now available for use within the wrapper.conf file as well as by any child processes.
  • Add documentation to the integration pages about existing system properties that be used to control the way the WrapperSimpleApp and WrapperStartStopApp handle application startup.
  • Remove support for native PPC and x86 distributions of the Wrapper for MAC OSX in favor of the universal X-Code distribution. This appears to be the standard for the market and saves lots of time on testing.
  • Add a new '-it' command to the Windows version which makes it possible to install and start a service as a single command.
  • Fix a problem where the PATH environment variable was not being set correctly on Windows versions when run as a service if the wrapper.ntservice.account was set and a PATH was set for both the SYSTEM and user accounts. Bug #1702274.
  • Modify the shell script to set JAVA_HOME to the default JVM location on OSX systems if it is not already set. OSX always places the JVM in a known location so this is possible. Thanks to Andrew Williams for the patch.
  • Fix a problem where the UNIX shell script would fail if the APP_NAME was set to a value containing spaces. Thanks to Andrew Williams for the patch. Bug #1695678.
  • Fix a problem where the DIST_ARCH was not being resolved correctly on HP-UX systems. Thanks to Matej Kraus for the patch. Patch #1697421.
  • Log output from the timer thread was not being queued correctly, this could have lead to timing problems if there were any delays writing to disk.
  • Add partial support for OS/400 into the build file. Still needs a Makefile.
  • Fix a problem where the WrapperActionServer would deadlock in its stop method if the JVM shutdown was initiated by a call to the shutdown or restart actions.
  • Add support for wrapper.console.title on UNIX platforms. Add a set of wrapper.console.title. properties which make it possible to set the title based on the platform.
  • Fix a problem where the wrapper.ntservice.account and wrapper.ntservice.password properties were being stored in the system registry if the they were specified on the command line when the Wrapper was installed as a service. This was broken in version 3.2.2. Bug #1538725.
  • Fix a problem where the DUMP command was not working with the wrapper.commandfile property when run as a service on Windows. Bug #1644421.
  • Fix a problem where wildcards like "*.*" or "*" in a classpath property were including the "." and ".." files on Windows versions. Bug #1517928.
  • Modify the debug log output when the Wrapper is attempting to load its native library in an attempt to make the expected failures less threatening.
  • Commit a patch by Rob Oxspring which adds the start_msg and stop_msg commands to the shell script. These are expected by init scripts on HP-UX. Patch #1750027.
  • Add a DETAIL_STATUS flag to the UNIX shell script which will cause the status, start_msg, and stop_msg commands to display the current internal status of both the Wrapper and Java processes.
  • Commit a patch by Rob Oxspring which adds an init block to the UNIX shell script to make it work with install_initd and remove_initd scripts used by SUSE linux. Patch #1750028.
  • Commit a patch by Travis Carlson, ia64 systems were being grouped as "x86" systems. They now are assigned the name "ia" which makes it possible to create a distribution for them. Patch #1663887.
  • Add a new #include.debug declaration in the wrapper configuration file which makes it much easier to debug problems with cascading include files.
  • Add -l and -controlcode commands to the Windows version which make it easy to send user defined control codes to the Wrapper running as a service.
  • Fix a synchronization problem in the logging code which could result in data corruption or access violations.
  • Add version numbers to the bat and sh scripts to make them easier to support.
  • Make the wrapper.ntservice.name, wrapper.ntservice.displayname, and wrapper.ntservice.description properties aliases of new wrapper.name, wrapper.displayname, and wrapper.description properties as they are now used on UNIX platforms as well as Windows.
  • Fix a problem where the wrapper would sometimes fail to send a packet to the JVM because the sending of the packet would block. Thanks to Peter Gorgon for the patch.
  • Fix a problem where CPUs identifying themselves as 'ia64n' or 'ia64w' were not correctly being categorized as 'ia'. Thanks to Stirling Chow for the patch. Patch #1859412.
  • Add -d and --dump commands to the Windows version which make it possible to send thread dump requests to the Wrapper when running as a service. Works in association with the new wrapper.thread_dump_control_code property. Feature Request #1118110.
  • Fix a problem where the default configuration file name was being corrupted by a buffer overrun. Thanks to Rob Joyce for the patch. Patch #1879049.
  • Fix a problem where the WrapperManager would sometimes attempt to unregister its shutdown hook after the shutdown hook had been initiated. Bug #1799489.
  • Fix a problem where log files were limited to 2GB on Linux systems. Bug #1881038.