Google

Locations of visitors to this page

Hosted by:
SourceForge

Java Service Wrapper Release Notes
Java Service Wrapper Release Notes
Version 3.3.0: Changes and bug fixes
  • 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.

  • (Professional Edition)

    Development and testing of the new Windows 64-bit version required the purchase of 64-bit hardware and software. We have decided to delay the release of the Windows 64-bit Community edition until these costs have been recouped.

  • (Professional Edition)

    Add support for Server (Fixed) as well as Development (OEM based) licenses.

  • (Professional Edition)

    Add event handling callbacks for Wrapper start/stop, JVM start/stop, JVM started/stopped, JVM restart, JVM killed, and JVM unexpected exit events.

  • (Professional Edition)

    Add the ability to send emails in response to any event callback.

  • (Professional Edition)

    Add the ability to execute a a user configured command in response to any event callback.

  • 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.<platform> 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.

  • (Professional Edition)

    Add new wrapper.java.initmemory.percent and wrapper.java.maxmemory.percent properties which make it possible to set the initial and maximum memory values relative to the amount of physical memory on the system. Feature Request #1741051.

  • 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.

  • (Professional Edition)

    Add wrapper.timer.<n>.interval and wrapper.timer.<n>.action properties which make it possible to schedule Wrapper shutdowns, JVM restarts and thread dumps at arbitrary times.

  • 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.

Version 3.2.3: Changes and bug fixes
  • Add support for x86 Mac OS X distributions.

  • The 3.2.2 Windows version was accidentally released with its MFC libraries dynamically linked. This meant that anyone who did not have VS8 installed were not able to run the Wrapper due to missing DLLs. This version fixes that snafu by correctly using statically linked libraries as was done in previous versions built with VS6. Bug #1578554.

Version 3.2.2: Changes and bug fixes
  • Correct a typo in the usage output of the WrapperStartStopApp. Thanks to Michael Giroux for pointing it out.

  • Fix a problem on OSF1 systems where the backend socket was not listening correctly due to a backlog of 0. This was broken in 3.2.0. Thanks to Phillip Gussow for supplying a patch.

  • Remove the com.silveregg.wrapper package classes that were deprecated in version 3.0.0.

  • Fix a potential problem in the UNIX script where the lock file permissions were not being set correctly if the LOCKFILE and RUN_AS_USER variables are specified but the group of the specified user could not be resolved.

  • Fix a problem where the exit code returned by WrapperListener.stop was being ignored in some cases.

  • Fix a problem where the shell script would not work correctly when the wrapper or its configuration files were located in a directory path containing spaces.

  • Apply a series of patches by Michael Saya to get the Windows 64 bit build working.

  • Fix a problem in UNIX versions where the TERM signal handler was being disabled when a CHLD signal was received.

  • Added support in UNIX versions for the HUP signal.

  • Added a new wrapper.signal.mode.hup property to let the user control what happens when the Wrapper process receives an HUP signal

  • Migrated the source to Subversion from CVS. Did a bunch of cleanup in the source, removing CVS specific tags.

  • Fix a problem in UNIX versions were the pid file specified by the wrapper.java.pidfile property contained the wrapper pid rather than the jvm pid. Bug #1565011.

  • Fix a problem in UNIX versions where the file specified by the wrapper.java.pidfile property was not always being deleted when the JVM process went away.

  • A user encountered a JVM bug where calls to System.exit were resulting in an IllegalThreadStateException being thrown. Added some code to trap this and shut down the JVM using other means to avoid a hang during shutdown.

  • Fix a NullPointerException caused by users incorrectly implementing an Integration Method #3 class and then calling WrapperManager.start with a null value for the args parameter.

  • Update the banner displayed by the Wrapper on startup to include a copyright notice.

  • Add a new 'Z' log format which will log the time to millisecond accuracy.

  • Fix a problem where the JVM exit code was not being set correctly when the JVM was shutdown using WrapperManager.stopImmediate(). The exit code of the Wrapper was being set correctly through other means however.

  • Fix a potential synchronization problem in the logging code if a JVM exits with debug output enabled.

  • Updated the WrapperListener.stop method javadocs to better explain the exitCode value under certain exit modes.

  • On UNIX versions, add a log message which records the signal that caused the JVM process to exit when it terminates unexpectedly.

  • Fix a problem where the wrapper.on_exit.<n> property was not working correctly in some cases on UNIX. With help from Andreas Schafer.

  • Add support for building the Wrapper with Visual Studio 8 for Windows. Releases will now be done using this compiler.

  • Fix a CRITICAL bug in the 3.2.0 and 3.2.1 Windows versions of the Wrapper where the Wrapper would crash under rare circumstances when running as a service. If the service manager interrogated the service at the same instant as the wrapper was pinging the JVM, the wrapper was sometimes crashing due to a synchronization problem. The problem did not exist prior to 3.2.0. Bug #1574537.

  • Fix a minor logging problem where the 'D' format was not displaying the correct thread name for queued log messages.

Version 3.2.1: Changes and bug fixes
  • Fix a problem with the solaris-sparc-64 makefile.

  • Add a solaris-x86-64 makefile.

  • Merge in a patch by Hugo Weber to make it possible to configure the Wrapper to pull the JRE from the system registry on windows.

  • Fix a batch file bug added in 3.2.0 where the scripts would not function correctly if the full path to the batch file contained spaces. Bug #1450601.

  • Modify the message shown when a native library fails to load so the exception message text is now shown in the log without having to enable debug log output.

  • Modify the UNIX shell script to be more informative if the script is unable to locate a wrapper binary due to a executable bit permission problem.

  • Fix a minor permission problem with the build for the delta-pack.

  • Commit a patch by Juergen Hermann to make the error shown when realpath fails clearer.

  • Add the ability to use a default wrapper.conf file that is in the same directory as the wrapper binary. The file will be named based on the name of the wrapper binary.

  • Synchronize the command line so that both the Windows and UNIX versions are now the same. The old command line syntaxes are now supported everywhere so there will be no compatibility problems.

  • It is no longer possible to specify arguments using the '/c' syntax. This was undocumented so hopefully it is not being used. The documented '-c' syntax must now be used. The change was necessary to synchronize the command line between UNIX and windows platforms.

  • The 32-bit HP-UX 3.2.0 build was generating a libwrapper.so file rather than libwrapper.sl.

  • Make the WrapperManager.setConsoleTitle, getWrapperPID, and getJavaPID methods available through JMX.

  • Fix a state engine problem introduced in 3.2.0 which was causing the wrapper.on_exit.<n> properties to be ignored in most cases.

  • Fix a potential problem that could have caused crashes when debug logging was enabled.

  • Fix a problem where signals were not being handled correctly on some UNIX platforms, including AIX. This was making it impossible to shutdown the wrapper cleanly with the TERM signal. Bug #1477619.

  • Add new default environment variables which can be referenced in a configuration file to configure platform specific directories and file names. WRAPPER_OS, WRAPPER_ARCH, and WRAPPER_BITS.

  • Add a -v argument to make it possible to request the version from a wrapper binary.

  • Add support for registering the WrapperManager MBean with the PlatformMBeanServer when run on a 1.5+ JVM. See the JMX section in the documentation for details.

  • Rework the way timeout properties are handled. Values of 0 now actually disable the timeouts rather than setting them to a large value. To avoid overflow problems when converting to internal timer ticks, timeouts are now restricted to a maximum of 20 days, or 1728000 seconds. Change affects the wrapper.cpu.timeout, wrapper.startup.timeout, wrapper.ping.timeout, wrapper.shutdown.timeout, and wrapper.jvm_exit.timeout properties. For values less than 20 days, there should be no change in functionality.

  • Add support for debuggers. The Wrapper will now show a warning on startup and then again the first time a timeout occurs. But all timeouts will be ignored. This is to avoid problems with the Wrapper restarting a suspended JVM in the middle of a debugging session. The wrapper enters this mode if the wrapper.java.command ends with the string "jdb" or "jdb.exe", or the "-Xdebug" parameter is passed to the JVM.

  • Add 'athlon' to the list of supported architectures.

  • Fix a problem where the environment variables loaded when a service was started were always the system environment even if the service was running as a specific account. The environment of a specific account will now be loaded on top of the system environment if the USERNAME environment variable is set by the system. Bug #1491138.

  • Added new wrapper.ntservice.pausable wrapper.ntservice.pausable.stop_jvm properties to make it possible to pause and resume the Wrapper when installed as a Windows service.

  • Added new Pause and Resume batch files as well as modified the command batch file to support pause and resume.

  • Added PAUSE and RESUME commands for use by the wrapper.commandfile property.

  • Fix a problem with the wrapper.pidfile, wrapper.java.pidfile, wrapper.anchorfile, wrapper.commandfile, wrapper.statusfile, wrapper.java.statusfile, wrapper.java.idfile, and wrapper.lockfile.umask properties where forward slashes in paths were not being changed to back slashes on Windows versions.

  • Simplify the code used to load a native library by using the System.mapLibraryName method rather than doing the same thing manually.

  • Add a new wrapper.syslog.facility property which makes it possible to specify the syslog facility on UNIX systems. Thanks for the patch from Bruce Pennypacker.

  • Removed the custom thread counting used to keep track of when the wrapped Java application has completed. It is now done in a different way that will work on all Java implementations without requiring any special consideration of the current JVM. Deprecated the wrapper.monitor_thread_count and wrapper.thread_count_delay properties. Bug #1470265.

  • The WrapperStartStopApp helper class still requires thread counting if the stopWait parameter is set to true. Previous versions all hard coded the system thread count to 1 which worked for most JVMs. A new system property, org.tanukisoftware.wrapper.WrapperStartStopApp.systemThreadCount, was added to make it possible to customize. It currently defaults to 1.

  • Make it possible to extend the WrapperSimpleApp and WrapperStartStopApp helper classes. Feature Request #1510274.

  • Add warning messages if the old org.silveregg.wrapper package classes are still being used. They will be removed in the next release.

Version 3.2.0: Changes and bug fixes
  • Rework the release cycle so that the wrapper.jar file released for all platforms is now built on the same machine. This resolves a few incompatibility problems caused by jars built on very new JVMs but run on old JVMs.

  • Add additional output when the JVM can not be launched due to security restrictions on Windows.

  • Greatly improved the performance of file logging. On a windows test machine 3.1.2 could log 67210 lines of output in 20 seconds with a 80-15% split between the Wrapper and JVM process CPU usage. It now outputs 215214 lines with a 64-34% split, also showing less load on the system process. This is a 220% increase in performance. In both cases, the JVM was completely idle other than the console output which makes the Wrapper appear to be a bit of a CPU hog. In fact it is the only process doing any work in this case. This improvement was accomplished by keeping the log file open unless idle. The idle time can be controlled using the new wrapper.logfile.inactivity.timeout property. The speed increase on UNIX platforms was much smaller at around 10%.

  • Add a new property, wrapper.disable_restarts, which will completely disable the Wrapper's ability to restart JVMs.

  • Add a pair of new properties, wrapper.port.min and wrapper.port.max, which make it possible to define the port range used when a specific wrapper.port is not specified.

  • Fix a problem where certain characters like umlauts were being stripped from property values. Bug #1049528.

  • Make the PIDs of the Wrapper and Java process easier to access by providing a new pair os system properties; wrapper.pid and wrapper.java.pid, as well as a new pair of methods; WrapperManager.getWrapperPID() and WrapperManager.getJavaPID().

  • Add a new WrapperEventListener class which can be implemented to receive a wide variety of events from the Wrapper.

  • Add a WrapperServiceControlEvent class which will report any service control codes received by the Wrapper as it is running as an NT service. This was added to make it possible for other applications to sent custom codes to the Wrapper using the Window Service Manager.

  • Add a WrapperManager.listServices() method which can be used to obtain thestatus of all services on a Windows system.

  • Add a WrapperManager.sendServiceControlCode() method which makes it possible to start, stop, pause, continue, any service on Windows systems. It is alsopossible to send custom user codes via the service manager.

  • Add comments in the sh script to support the chkconfig command.

  • Implement the ability to read from standard input via System.in. Feature Request #1024693.

  • Made the tick based timer the default by changing the default value of the wrapper.use_system_time property to false. Most users should see an improvement in reliability under heavy loads with this new setting. If you have extended any timeouts in the past, you may wish to try going back to defaults as they may no longer need to be extended.

  • Add a new wrapper.restart.reload_configuration property which causes the Wrapper to reload its configuration file immediately before a JVM restart. Properties which can not be reloaded have comments stating that fact in their documentation. Feature Request #981060.

  • Fix a problem in the UNIX shell script which was preventing the script from locating the PID and anchor files when the wrapper.working.dir property was used.

  • Modify UNIX versions so that the wrapper binary will now force its working directory to the location of the wrapper binary. This change was made to make the UNIX version work the same way as the Windows version and thus make configuration files that modify their working directory work correctly on a cross platform basis. Users which have been using the scripts supplied with the Wrapper should not encounter any problems. Other users may require slight changes to their configuration file to deal with the new way that the Wrapper deals with its initial working directory.

  • Add a new method WrapperManager.getProperties() which makes it possible to access any property in the Wrapper configuration file.

  • Fix a problem where TERM signals were not being correctly ignored by the JVM process on UNIX platforms even if the wrapper.ignore_signals property was set to true. Earlier versions of the Wrapper would generate a WRAPPER_CTRL_SHUTDOWN_EVENT when a TERM signal was received. On Windows that signal should never be ignored. To resolve this a new WRAPPER_CTRL_TERM_EVENT was added making it possible to selectively ignore the TERM signals. This change may affect user implementations of the WrapperListener.controlEvent() method. Bug #1086344.

  • The Windows version has a feature which allows the user to immediately kill the Wrapper and its Java application without waiting for a clean shutdown by pressing CTRL-C twice. Windows sends the CTRL-C signal to both the Wrapper and Java processes. Due to a rare timing problem, it was possible for the Java process to get the signal first and initialize a shutdown before the Wrapper could respond to the signal. In this case the Wrapper was interpreting this as a second CTRL-C signal even though the user only pressed it once.

  • If the wrapper.anchorfile or wrapper.pidfile properties are used on Windows they were being unintentionally deleted if the -t, -p, -i, or -r commands were used while another Wrapper instance was running. In the case of the anchor file, this would result in the Wrapper being shutdown unintentionally. This was not an issue on non-Windows versions. Bug #1108517.

  • Fix a security problem where the value of the wrapper.ntservice.account and wrapper.ntservice.password properties were being stored in plain text within the registry if they were specified on the command line when installing the Wrapper as a Windows service. Bug #1110183.

  • Add a pair of properties wrapper.ntservice.password.prompt and wrapper.ntservice.password.prompt.mask which which will cause the Wrapper to prompt the user for an account password when it is being installed as an NT service.

  • Added system properties to make it possible to configure whether or not the WrapperSimpleApp and WrapperStartStopApp helper classes will wait for the configured main methods to complete before reporting that the application has started. See the javadocs for these classes for more details.

  • Modify the HP-UX build so that it now dynamically links with the pthread library. This was to make the binaries work with HP-UX 11.00. Thanks to Sun Kun Choi for the patch.

  • Add new wrapper.statusfile and wrapper.java.statusfile properties which can be used by external applications to monitor the internal state of the Wrapper or JVM at any given time. These will not be useful to most users.

  • Add a new wrapper.commandfile property which can be used by external applications to control the Wrapper and its JVM.

  • Add a new wrapper.java.idfile property which can be used by external applications to monitor the internal state of the JVM at any given time.

  • Add a warning on startup if the JVM has a SecurityManager set but the wrapper.jar has not been granted the AllPermissions permission. Failure to do so will almost certainly lead to the Wrapper throwing a number of errors and this helps to point out the cause.

  • Add a security model which protects most Wrapper method calls when a SecurityManager has been registered. See the Security Model section for more details.

  • Add a new pair of batch files which can be used to start and stop the Wrapper when installed as a service.

  • Add new -q and -qs commands to the Windows version of the Wrapper which make it possible to query the currently installed status of the service. See the Query Service Status section for more details.

  • Fix a problem where the wrapper.java.library.path.append_system_path property was not working correctly on Windows when the system PATH contained quotes. Bug #1238726.

  • Modify the usage output of the Wrapper on all platforms so the Wrapper's version is now included. It was not previously possible to get the version of the Wrapper being used without launching a JVM.

  • Add a pair of new methods WrapperManager.stopAndReturn() and WrapperManager.restartAndReturn() which make it possible for code to stop or restart the JVM and then continue until the JVM is shutdown. This can be useful for shutdowns initiated within places like servlets, whose operation is expected to complete.

  • Fix a problem on UNIX where the child JVM was sometimes leaving around zombie processes after a restart. The SIGCHLD signal was not being handled correctly. Thanks to Traun Leyden for the patch. Bug #1291201.

  • Implement the ability to catch control events using the WrapperEventLisener. Feature Request #836975.

  • Add new wrapper.jvm.port, wrapper.jvm.port.min, and wrapper.jvm.port.max properties which make it possible to control the port the JVM uses to open a connection back to the JVM. The Wrapper uses to leave this up to the OS, but some users were having problems with the default conflicting with other ports.

  • Switch from using ftime() to gettimeofday() on UNIX platforms to work around a problem where the Wrapper would not run on new versions of OSX because they deprecated the ftime() function call. Thanks for the patch by Michael Macaluso. Bug #1313162.

  • Remove the shutdown timeout from the UNIX shell script. It is not needed and can cause a zombie JVM if the wrapper's internal shutdown timeout was longer than that of the shell script.

  • Add the ability to specify integer property values in base 8 or 16 in addition to base 10. Base 8 values start with a '0' and base 16 values start with a '0x'.

  • Make it possible to set the umask on all files created by the Wrapper as well as the default umask of files created by the JVM. Added new wrapper.umask, wrapper.java.umask, wrapper.pidfile.umask, wrapper.lockfile.umask, wrapper.java.pidfile.umask, wrapper.java.idfile.umask, wrapper.statusfile.umask, wrapper.java.statusfile.umask, wrapper.anchorfile.umask, and wrapper.logfile.umask properties.

  • Improve the message when the native library can not be loaded to make mention of the possibility of a 32/64 bit mismatch.

  • Add a new wrapper.monitor_thread_count property which makes it possible to disable the Wrapper's counting of non-daemon threads and thus the shutting down of the JVM when they have all completed.

  • Add support for BELOW_NORMAL and ABOVE_NORMAL options to the wrapper.ntservice.process_priority property. Feature Request #1373922.

  • Ignore '#' characters which are included within double quotes in the value of a property in the configuration file. Unquoted values must be escaped with a second '#' characters or it will be interpreted as a comment.

  • Display the Wrapper banner in the JVM earlier so that it is displayed even where there are startup errors.

  • Modify the WrapperSimpleApp and WrapperStartStopApp classes so that the WrapperManager is always initialized immediately. This makes the output clearer in the event of startup errors.

  • Fix a problem where the Windows ServiceManager was not correctly reporting a startup error if a service failed on startup. The service was being reported as having started even though it failed to start.

  • Fix a problem on UNIX versions where the Wrapper would go into a recursive state of attempting to launch the JVM from failed child processes if there was any problems executing the configured java process.

  • Rework the way the RUN_AS_USER setting in the UNIX shell script works so the specified user is now set regardless of the command being executed. To make sure the user never has to enter the password twice when running the script, it now recurses after changing the user. The script then runs entirely as the configured user.

  • Improve the message that is displayed when attempting to start, stop, or remove a windows service which is not installed.

  • Add new wrapper.lockfile property which makes it possible to specify a lock file containing a pid.

  • Modified the sh script so it now creates a lock file on startup in the /var/lock/subsys directory if it exists. This is needed by fedora systems on shutdown.

  • Store javadocs in tar distibutions in a nested tar file to avoid problems with long filenames in some tar distributions.

  • Fix a problem with the WrapperSimpleApp and WrapperStartStopApp helper classes where on heavily loaded systems it was possible for the Wrapper to get a running thread count of 0 and shutdown before the main thread had a chance to be started.

  • Add a new wrapper.thread_count_delay property which will force the WrapperManager to wait the specified number of seconds before it begins to check the number of running threads.

  • Fix a problem where the wrapper.java.library.path.append_system_path property was appending the PATH rather than the LD_LIBRARY_PATH environment variable on Unix systems. PATH is correct for Windows systems.

  • Add a new wrapper.logfile.rollmode property which makes it possible to control how and when the logfile is rolled. Feature Requests #864463, #1085097, and #1085850.

  • Fix a problem on Linux where the test for the status of the Java child process would sometimes fail causing the Wrapper to shutdown with the error "Critical error: wait for JVM process failed (No child processes)" rather than restart the child JVM. Users who encountered this problem found it easy to reproduce, but it only happened on some systems.

  • Modify the way the UNIX shell script tests for the existence of a process matching the pid in an existing pid file. It now verifies the process command as well as the pid to fix a system reboot problem where a stale pid has been reused by another application, making the script think the wrapper was already running.

  • Add support for the GNU libgcj JVM. Like JRocket, it requires slightly different thread counting.

  • Add support for Linux 64-bit PPC and Solaris 32-bit x86 versions.

  • Add a new set.default.ENV syntax to the configuration file making it possible to environment variable values which do not overwrite existing values, ie. to specify a default value.

  • Added a new wrapper.console.flush property which forces the wrapper to explicitly flush stdout after each line of log output.

  • Change the error shown when the JVM shuts down prematurely during a shutdown to a warning message.

  • Fix a problem where the Wrapper would show the following error message if user code called System.exit from within the WrapperListener.stop callback method. This would happen if the stop class's main method registered with the WrapperStartStopApp called System.exit. "JVM exited unexpectedly while stopping the application." Bug #945976.

  • Add a new wrapper.syslog.ident property which makes it possible to specify the identity used in syslog entries on UNIX. This was possible in older versions but was set using the wrapper.ntservice.name property. Bug #1432855.

  • Add support for MacOSX Universal Binary distributions.

  • Add support for Delta Pack distributions. This is a distribution that contains

Version 3.1.2: Changes and bug fixes
  • Modify the way boolean system properties are resolved by the WrapperManager so it is now possible to set them to true or false rather than assuming they are true if set.

  • Fix a problem where some localized error messages were not having their tokens replaced correctly.

  • Fix a problem when using the WrapperStartStopApp helper class. The usage text was incorrectly being displayed in the console if an exception was thrown while executing the main method of the configured stop class. This did not change the functionality of the application, but it did cause some confusion.

  • Fix a problem on Windows where a library path or class path which ended in a backslash was preventing the Wrapper from launching the JVM. The Windows OS was using the backslash to escape the quote used to close the path. The fix was to add a second backslash where needed.

  • Added a new wrapper.java.command.loglevel property which makes it possible to control the log level of the generated java command.

  • Add support for escaped quotes when stripping quotes on UNIX for the wrapper.java.additional.<n> and wrapper.app.parameter.<n> properties.

  • Change the default value of wrapper.jvm_exit.timeout from 5 to 15 seconds. The old default was too fast for some applications which take a while to exit. Applications which were exiting promptly will not see any difference.

  • Fix a problem where the JVM would restart at certain times when using the system time based timer due to an overflow error. This problem was introduced in 3.1.0. Due to a separate bug in 3.1.0, the Wrapper would shutdown rather than simply restarting the JVM as was happening in 3.1.1. The last restart happened on Aug 21, 2004. It will next occur Oct 10, 2004 and repeat at regular intervals. There are no problems when using the new Tick based timer. Bug #1014405.

  • Correct the wrapper.logfile.maxsize property so that a a kilobyte is now 1024 rather than 1000, and a megabyte is a megabyte. We aren't a hard drive manufacturer after all.

  • Add try-catch blocks around all thread entry points in the Windows version. This has always been done in the main function, but these blocks will help to narrow down the cause of problems should they ever be encountered in control or service handlers.

  • Centralize shutdown code on UNIX version in an appExit method as was already being done for Windows versions.

  • Fix a problem where the build.sh was not correctly using the included ant if an ANT_HOME environment variable was defined.

  • Add a new wrapper.single_invocation property which will prevent multiple invocations of an application from being started on Windows platforms. The shell script handles this on UNIX platforms. Feature Request #889123.

  • Fix a crash problem introduced in 3.1.1, caused by a pair of uninitialized pointers. The crash was possible on all platforms but would only happen if the Wrapper was started without any arguments. It would not affect users running the Wrapper normally. Bug #1018481.

  • Fix a problem with the run as user feature of the shell script on Solaris. Needed to be using /usr/xpg4/bin/id rather than /usr/bin/in if available. Bug #1024008.

  • Replace calls to usleep with nanosleep on platforms where it is available. This was to fix an occasional hang on a specific Solaris machine. It would occasionally hang on calls to usleep. From research, it appears that usleep has problems when signals are encountered while sleeping. Still testing whether or not this change solved the problem.

  • Upgrade the version of Ant included with source releases to 1.6.2 to fix some problems generating jni headers when building with Java 1.4.2.

  • Upgrade the version of Cocoon included with source releases to 2.0.4 to fix some problems generating documentation using Java 1.4.2.

  • Display a warning if the exit status of a JVM process ever returns the STILL_ACTIVE status on Windows. There was no known problem here, just noticed it while looking over the code.

  • Display a descriptive error message on Windows if the the JVM process crashes due to an uncaught exception in native JVM code.

  • Add a test for invalid jvm arguments set using the wrapper.java.additional.<n> properties. Invalid arguments could cause the Wrapper startup to fail in non obvious ways if they are mistaken by the JVM as the main class.

Version 3.1.1: Changes and bug fixes
  • Modified the way libwrapper.so is built on Solaris and Linux so that it no longer statically links its required libraries.

  • Fix a file handle leak when calling WrapperManager.getUser or WrapperManager.getInteractiveUser on Windows platforms.

  • Fix a problem introduced in 3.1.0 where the JVM would not be restarted correctly if it quit after a ping timeout to let the Wrapper resynch and restart it.

  • Fix a problem where CTRL-C was not being handled correctly if the console was configured to be shown when running as an NT service.

  • Fix a problem where signals fired at UNIX versions of the wrapper were not being handled correctly when the tick timer was being used.

  • Fix a synchronization problem in the logging code which would occassionally cause the Wrapper to crash with an Access Violation. The problem was only encountered when the tick timer was enabled, and was only seen on multi-CPU systems. Bug #949877.

  • Fix a problem when using the tick timer where the Wrapper would sometimes exit on startup due to an uncaught SIGALRM. Only reported on multi-CPU Solaris systems.

  • Fix a problem where the Wrapper would sometimes hang on shutdown if another thread called System.exit while the Wrapper was shutting down. Bug #955248.

  • Fix a problem introduced in 3.1.0 where a very very large CPU timeout warning message was being displayed if the system time was set back while using the default system timer.

  • Added a new property, wrapper.anchorfile, which makes it possible to cause the Wrapper to shutdown by deleting an anchor file. The UNIX sh script has been modified to optionally make use of this feature.

  • Add a debug message at startup which makes it clear which timer is being used.

  • A Windows user reported that using forward slashes in the path the log file was failing. Avoid this problem by always converting '/' to '\' in the wrapper.logfile property on Windows.

  • Fix a problem where it was not possible disable the wrapper log file as documented in the wrapper.logfile property. Most likely broken way back in version 2.2.5.

  • Add some additional error checks after calls to control the pipe between the JVM and Wrapper as well as improving the messages around other socket related error messages.

  • Fix a problem on some HP-UX systems were not working correctly because the EAGAIN and EWOULDBLOCK constants are not equal with some compilers.

  • Change some of the defaults in the src/conf/wrapper.conf.in file which ships with the Wrapper to avoid confusion with new users.

  • Rewrote the routine which reads and logs console output from the JVM for Windows versions. Internal buffers are now scaled dynamically, fixing a problem where long lines were being wrapped at 1024 characters. This rewrite also resulted in a 4 fold increase in speed when the JVM is sending large quantities of output to the console.

  • Increase debug output on UNIX platforms when a signal is caught. When possible, information about where the signal came from is now logged.

  • Modified the way log output from within signal handlers is handled so it is now queued and then logged by the main event loop.

  • Back out a 3.1.0 change where a JVM that had failed to exit cleanly was sent a SIGTERM prior to a SIGKILL. The SIGTERM made no difference and slowed down the forced shutdown. A modification to the event loop made the functionality more difficult to implement.

  • Add the ability to set the user that the Wrapper and its JVM will run as from within the sh script on UNIX platforms.

  • Add an icon resource to the Wrapper binary on Windows versions.

  • Fix a typo in the UNIX sh script which caused an extra slash to be included in the path of the pid file. Was not causing any known problems.

  • Added support for 64-bit HP-UX. Big thanks to Venkatesh Sellappa for supplying the patch.

  • Fix a deadlock problem introduced in 3.1.0 with some FreeBSD systems. Not all users were experiencing it, but those who did were able to reliably reproduce the problem. The problem appears to have been caused by FreeBSD bug #kern/64313.

  • Make the signal handling variables in the wrapper native library volatile. Directly this was to fix a compiler warning on HP-UX64 systems but it should also make the calls more efficient.

Version 3.1.0: Changes and bug fixes
  • The license was revised for this version to include a copyright omission. This change is to be retroactively applied to all versions of the Java Service Wrapper starting with version 3.0.0. The changes should have no effect on users.

  • The Online documentation and web site were both reworked. The logo has been updated so that Duke is no longer used. The new online site now has the ability for users to append comments to any page.

  • Added a new batch file which accepts commands like the UNIX shell script. The new file is offered as an alternative to the default batch files, and can be found at src/bin/AppCommand.bat.in. Thanks to Mike Castle for donating the new script. See the new Command-Based Script section for more information.

  • The Windows version of the Wrapper was not correctly registering that it would accept SHUTDOWN messages when running as a service. The Wrapper was getting the message anyway so this should not change functionality. Thanks to Jason Tishler for noticing this and sending in a patch.

  • Add a new property, wrapper.native_library, which can be used to specify the base name of the native library which is loaded by the WrapperManager class.

  • Modify the WrapperManager class so it now stores references to System.out and System.err on initialization and always writes to those stored streams. This makes sure that all Wrapper console output always goes to the wrapper.log file even if user code overrides those streams with calls to System.setOut and System.setErr. This was necessary to prevent deadlocks in such user code from affecting the functionality of the Wrapper.

  • Fixed a problem where some environment variables where not being correctly loaded from the system registry when running as an NT service. Big thanks to Eric Smith for tracking this down and submitting a patch. It turns out that the putenv function was not being used correctly.

  • Modified the way the wrapper.conf file is loaded so it will now read the contents correctly even if the line feeds in the file are incorrect for the current platform. Windows line feeds had been causing problems when used on UNIX platforms. Feature Request #829896.

  • Added a new property, wrapper.ntservice.console, which allows a console to be displayed when running as an NT service.

  • Fixed a problem where the request thread dump on failed JVM exit feature had never worked when running as an NT service. Bug #831775.

  • Add a new property, wrapper.console.title, which makes it possible to set the title of the console in which the Wrapper is currently running. This currently only works on Windows platforms.

  • Added a new method, setConsoleTitle, to the WrapperManager class which enables the application to dynamically set the console title. Like the wrapper.console.title property, this only works on Windows platforms.

  • Improved the algorithm of the request thread dump on failed JVM exit feature so that extremely large thread dumps will not be truncated when the JVM is killed.

  • Fix a problem where CTRL-C was being ignored by the WrapperManager if a WrapperListener is never registered. This is not possible if the Wrapper is being used correctly but never the less a user did come across it.

  • Add some additional debug output to help identify the cause of problems loading the native library.

  • The WrapperManager class now checks to make sure that its current version matches the version of the native library and Wrapper. If there are any discrepancies found then appropriate warnings will be displayed, but the Application will still be allowed to start. This was added to make obvious the cause of problems resulting from mismatched versions.

  • Added a new property wrapper.use_system_time system time. By setting this property to false, the Wrapper will start using a new experimental timer which uses a background thread to manage time rather than the system time. This has a number of advantages over using the system time and should give most users even more reliable behavior when the system is under high load or there are changes being made to the system time. The timer is very critical to the operation of the Wrapper so the old behavior is left as the default for the time being until this feature has had the chance to be "time" tested. If all goes well then this will be enabled as the default in a future version of the Wrapper. A pair of related properties, wrapper.timer_fast_threshold and wrapper.timer_slow_threshold were also added to aid in debugging.

  • Rework the logging code so it is now thread safe. The addition of the timer thread means that there is now more than a single thread accessing that code. This was causing problems as the two threads tried to use the same buffers. As part of this change, a new format variable 'D' was added to display the thread which is doing the logging.

  • Fix a problem where a thread dump would be invoked if the request thread dump on failed JVM exit was enabled and the user forced an immediate shutdown by pressing CTRL-C more than once.

  • Add getUser and getInteractiveUser methods to the WrapperManager class to make it possible for user code to query information about the user running Wrapper or the user who is interacting with the Wrapper and its JVM. Feature Request #812175.

  • The Wrapper will now always exit with the exit code used to terminate the JVM whether System.exit is used or WrapperManager.stop. When running as an NT service the Wrapper now correctly returns the correct exit code to the service manager so failure recovery tools should now work correctly. Feature Request #852491.

  • Add a status command to the UNIX shell script which can be used to find out whether or not the wrapper is currently running. Patch submitted by Joseph Benavidez.

  • Modify the WrapperSimpleApp and WrapperStartStopApp so that the main method of a class is located even if it exists in a parent class rather than the class specified.

  • To make debugging classpath problems easier, the Wrapper now verifies all classpath entries before launching a JVM and logs debug level warnings for any entries that do not exist.

  • Fix a problem where it was possible to define a zero length filter that would trigger on any output.

  • Add some additional debug output to make it easier to debug startup, shutdown and restart problems.

  • Modify the way the Wrapper forcibly kills a frozen JVM on UNIX platforms so that it now sends a SIGTERM, waits up to 5 seconds, then sends a SIGKILL.

  • Add a new wrapper.java.library.path.append_system_path which will cause the Wrapper to append the system path to the generated library path. Feature Request #917902.

  • Fix a problem where spaces around the '=' character of a property definition were rendering the property invisible to the Wrapper. Bug #916001.

  • Fix a problem where the first ping timeout after the JVM was started was still hard coded at 30 seconds. This was causing a combination of large values of wrapper.ping.interval and wrapper.ping.timeout to fail.

  • Fix a problem where the JVM would fail to shutdown cleanly if the Wrapper was asked to stop too soon after launching a JVM. This was leading to the JVM being killed after the shutdown timeout expired. Bug #917281.

  • Added an adviser which will print out explanatory messages to the console and wrapper log file when the Wrapper encounters a commonly made configuration mistake. This is designed to cut down on support requests by new users. Can be disabled using the wrapper.adviser property.

  • The bash script and the realpath utility have been deprecated since version 3.0.3. They have been removed in this release. The sh script is recommended on all UNIX platforms, and the realpath utility which was used by pre-3.0.3 bash and sh scripts has not been used since.

  • Add the wrapper.startup.delay property along with console and service specific variants which make it possible to configure a delay between the Wrapper being launched and the first JVM being launched.

  • Promote the wrapper.debug property back from being "deprecated". It has continued to be useful and deserved documentation and official status.

  • Add wrapper.on_exit.<n> properties to control what happens when a exits based on the exit code.

  • Modify the way calls to System.in.read() are handled so that they now block rather than throwing an exception. Currently, System.in can not be used with the Wrapper because of the way I/O is passed between the Wrapper and JVM.

  • Modified the Windows batch files to fix a problem where the path to the Wrapper.exe contained more than one "/bin". The new batch files are much simpler and should be easier to customize if needed. Bug #925308. Bug #925308.

  • Modified the wrapper.java.initmemory and wrapper.java.maxmemory properties so that they now default to a value of 0 which causes the -Xms and -Xmx parameters to be omitted from the command used to launch Java. This will cause the JVM to use its own default values and also makes it possible to specify the memory parameters using the wrapper.java.additional.<n> properties.

  • Added a pair of environment variables, WRAPPER_FILE_SEPARATOR and WRAPPER_PATH_SEPARATOR, whose values are set to either '/' and ':' or '\' and ';' on startup. They can be used in the wrapper.conf file to construct platform independent property values.

  • Add a new wrapper.working.dir property which makes if possible to change the Wrapper and JVM's working directory to a location other than the location of the Wrapper binary. Feature Request #738160.

Version 3.0.5: Changes and bug fixes
  • Added support for SGI Irix. Big thanks to Andreas Wendt for supplying the patch.

  • Due to a bug in the build, the native library was not included in the 3.0.3 or 3.0.4 binary releases for OSX, building from source was working correctly. This has been fixed and the build greatly simplified to avoid such problems in the future. Bug #791755.

  • Changed the default location of the pid file generated by the sh script to exist in the same directory as the sh script rather than in the /var/run. This can be changed by setting the PIDDIR variable in the sh script used to launch the Wrapper.

  • Added support for the wrapper.pidfile property on the Windows platform.

    WARNING

    (WINDOWS USERS) If you are using a wrapper.conf file that was created prior to version 3.0.0 of the Wrapper, then you may have this property defined in your configuration file. You will get an error on startup if the specified path does not exist.

  • Added the wrapper.java.pidfile property which will cause the pid of the java process to be written to a specified file.

  • Stop clearing the file creation mask when the Unix version of the Wrapper is run as a daemon process. The file creation mask will not be inherited from the process which launches the Wrapper. Bug #788849.

  • Modify the sh script so it works on Linux, then deprecate the bash script. This means that all Unix platforms can now use the same script to control the Wrapper. Thanks to Mike Castle for the patch. The bash script can still be found in the release, but it is deprecated and will be removed in a future version.

  • Modified the sh script so it is now possible to set the nice priority in the script configuration block.

  • Remove output to System.out in the WrapperManager.requestThreadDump() method. If some JVM threads were hung while accessing the System.out object, attempting to do a thread a dump would cause the calling thread to hang as well. Thanks to Thomas Hart for the patch.

  • Make it obvious in the log whether or not the Wrapper was started as a daemon process on UNIX systems.

  • Modify the way restarts requested from the JVM, or caused by a filter are handled. The Wrapper will no longer reset the restart count in either of these cases. If an application runs for longer than the wrapper.successful_invocation_time timeout then the count will still be reset back to 0.

  • Added a new wrapper.ignore_signals property which makes it possible to configure the Wrapper so it will ignore CTRL-C, HALT and INT signals.

  • Modify the WrapperManager.isLaunchedAsService() method on UNIX systems so it now returns true if the Wrapper was launched with the wrapper.daemonize flag set.

  • Added a pair of MBean interfaces which allow the Wrapper to be controlled using JMX. See the new JMX section in the documentation for details. Thanks to Sal Ingrilli for help with testing.

  • Modify the Windows build so the W