Hosted by:

Java Service Wrapper Project History

Java Service Wrapper Project History

For those interested, this section will take the reader through a brief history of how the current Java Service Wrapper came to be.

Version 1.x.x

Early in 1999, after having played with Java for a few months, Leif Mortenson ran into a problem with a service that he had been developing. There was no way to install the Java application as an NT service.

The solution was to write a replacement for the java executable which had the ability to be installed as a service. This version of the wrapper worked by loading the jvm.dll and then launching a new JVM instance using JNI.

Version 2.0.x

In October 1999, Leif joined a startup company called Silver Egg Technology. Over the next year, Silver Egg developed a recommendation engine, called Aigent, for use in web site personalization. As Aigent was built in Java, it had the same problem with being installed as an NT service as some of Leif's previous projects. The Wrapper code was brought in from home and used as part of the Aigent product to provide that functionality.

In March 2000, Ryan Shaw joined Silver Egg and brought with him a wealth of knowledge of the Linux OS. All platform specific portions of the Aigent product, including the Wrapper, were ported over to Linux. At this point was still a very simple tool for running installing a JVM as a service. Its usefulness on Linux was limited to making it easier to run the product on both platforms with common configuration files.

Version 2.1.x

In November 2000. Aigent began having serious stability problems. The product would work perfectly for 2-3 weeks at a time. All memory and performance were perfectly flat. Then all of a sudden, the JVM would crash with a Hot Spot Access Violation. This was very bad as the product was installed at a couple customer sites at the time. A few weeks were spent trying to track down the problems. But no headway was made and the customers were getting tired of the procedure of having to restart their server every week to avoid the crash.

Leif came up with the idea of modifying the Wrapper so that it would run the JVM in a spawned process rather than as a DLL. This way if the JVM process crashed or hung for any reason, the Wrapper process would still be alive and in a position to do something about it. This Wrapping and monitoring of the JVM process is where the Java Service Wrapper project got its current name. This new functionality turned out to be very useful on the Linux platform as well.

After a few more months, the cause of Aigent crashing turned out to be an ArrayList which was not being synchronized correctly. The HotSpot compiler had optimized the code in such a way that if two threads accessed the ArrayList in a certain way at the same time, the JVM would crash. The code was accessed several times per second under load tests, so why it reliably took 2-3 weeks to reproduce is anyone guess. But the Wrapper had proved its usefulness by getting Aigent through its rough spell guaranteeing that any loss of service due to a JVM crash never lasted more than a few seconds.

Version 2.2.x

Realizing that the Wrapper would most like be very useful to a lot of other users, Ryan and Leif decided to give something back to the open source community. A project was registered on SourceForge and the Java Service Wrapper had its first public release in November 2001.

The first version of the Wrapper was was not very flexible, having been designed for a few specific applications. Over the first few versions a lot of work was done to create documentation as well as adding several features to make it much more configurable.

Within a month of the first release, the Wrapper was ported to its first new platform, Solaris.

Johan Sorlin (Spocke) joined the project in January 2002 after contributing a great new logging architecture which made it possible for the Wrapper to log to the Windows event log and Unix syslog.

Being a company which provides middle ware software and services to other internet companies, Silver Egg felt the full brunt of the downward spiral in the post bubble internet market, and in April 2002 were forced to do a reorganization. They have since come back strong, but Ryan and Leif both chose to move on to new jobs while continuing to maintain the Wrapper as a project on SourceForge.

Version 3.0.0

In January of 2003, to reflect the fact that continuing development of the Wrapper was being done almost entirely by Leif, the decision was made to branch and then sub-license the Java Service Wrapper code base. The new license was placed under the copyright of Tanuki Software, owned by Leif. In addition to simply giving credit where credit is due, this move was made to maintain control over the future availability and development of the Wrapper along with the code and ideas added after the branch.

Packages were changed from com.silveregg.wrapper to org.tanukisoftware.wrapper. While the Silver Egg packages were deprecated, they were maintained as wrappers around the classes in the new packages to maintain forward compatibility for the user base.

Over the last year, several users have offered to donate funds to help support the project. Of course the members of the team greatly appreciate any such contributions. So to make it easier, a PayPal account was opened to accept any and all donations.

Version 3.0.0 also adds AIX and HP-UX to the list of supported platforms. Thanks to Ashish Gawarikar and William Lee for the patches.

Version 3.0.3
Version 3.0.3 welcomed Mac OSX to the list of supported platforms. Thanks go out to Andy Barnett for the necessary patches and testing.

Version 3.0.4
Version 3.0.4 welcomed DEC OSF1 and FreeBSD to the list of supported platforms. Thanks to Andreas Wendt and Alphonse Bendt for the necessary patches and testing.

Version 3.0.5
Version 3.0.5 welcomed SGI Irix to the list of supported platforms. Thanks to Andreas Wendt for the necessary patches and testing.

by Leif Mortenson

Copyright ©1999-2004 by Tanuki Software. All Rights Reserved. | last modified: