-
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