# Jigsaw release notes

Following the normal W3C conventions, they are two different kind of releases of Jigsaw. Member release are provided to W3C members, a month in advance of the Public Release. Depending on their status the member release may get a different release number then the public release. On this page, you will find the release notes for the different versions of Jigsaw (which don't necessarily coincide with member release).

Currently released versions:

1.0alpha5
  A public release made on February the 13th.
1.0alpha4
  A member specific release, made on January the 13th.
1.0alpha3
  A public release, made on October 7th, 1996.
1.0alpha2
  A member specific release, made on September 7th, 1996.
1.0alpha1
  The first member and public release, made on May, 1st 1996 and June 1st 1996 (resp.)

## Jigsaw 1.0alpha5

### Incompatible changes

- The AttributeHolder unpickle and unpickleInstance methods, now take a third boolean parameter, that indicates if the resource is to be initialized after unpickling. Warning if you have written an 1.0alpha3 resource that redefines this method, you should make sure to define the new format for this method (since it's the one that gets called by the unpickling engine)
- The HttpReplyMessage setLocation method now takes an URL, to reflect the fact that HTTP/1.1 specification requires an absolute URL here.
- The getURL method of HTTPResource has now been splitted into two diferent methods:
  String getURLPath()
    Returns the path of the URL of the resource (as a String)
  URL getURL(request)
    Retuns the full URL of the resource. With virtual hosting support, it may happen that a resource has differnt URLs according to the incomming requests, that's one of the reason for that split.
- AttributeHolderAttribute semantics has slightly changed: it is up to resources using that kind of attribute to initialize the value (if any) of that attribute, by calling their initialize method with appropriate default values.
- Resources can now refuse unloading, through the new acceptUnload method. This allows to lock a resource in memory, whatever happens. This should be use only with great care.
- The ResourceStoreHolder interface has changed in the following ways:
  notifyStoreUnload
    Has been renamed to acceptStoreUnload, and returns a boolean that indicates wether the store holder is willing to get rid of any of its references to the store. If any of that store holders return false the store will not ne unloaded.
  notifyStoreShutdown and notifyStoreStabilize
    Semantics has been slightly changed: it is nolonger up to the store holder to perform the job. The first method is the one in which the holder should get rid of all its references to the store (by nullifying them), and the second one is just a notification.
- The ContainerResource lookupStore method now throws an InvalidResourceException if the resource exists in its store but cannot be restored. In such a case, the DirectoryResource will emit an appropriate error message.
- The ServerHandler interface initialize and clone methods now provide a pointer to the ServerHandlerManager as a first parameter.
- The resource and resource store APIs have been moved outside of Jigsaw. After a year of experimentation, this code has proven usefull outside the scope of the server itself, that's why we decided to move it to a newly created package w3c.tools.store. If you have written some resources, the only change for you will be to import that new package in your class files. The precise list of classes that has moved is:
  - Attribute.java
  - AttributeHolder.java
  - AttributeHolderAttribute.java
  - AttributeRegistry.java
  - BooleanAttribute.java
  - ClassAttribute.java
  - DateAttribute.java
  - DoubleAttribute.java
  - FileAttribute.java
  - FilenameAttribute.java
  - HolderInitException.java
  - IllegalAttributeAccess.java
  - IntegerArrayAttribute.java
  - IntegerAttribute.java
  - InvalidResourceAttribute.java
  - LongAttribute.java
  - ObjectAttribute.java
  - PropertiesAttribute.java
  - Resource.java
  - ResourceLocker.java
  - ResourceShadower.java
  - ResourceStore.java
  - ResourceStoreHolder.java
  - ResourceStoreManager.java
  - SimpleResourceStore.java
  - StringArrayAttribute.java
  - StringAttribute.java
  - UnknownResourceException.java
- The ResourceStoreManager unpickleProlog method no longer returns a boolean. Instead it throws one of:
  NotAStoreException
    If the file preambule doesn't match the store cookie.
  InvalidStoreClassException
    If the class willing to load that repository doesn't match the class that saved it.
  InvalidStoreVersionException
    If the repository version doesn't match the loading class version.

### Compatible changes

- HTTPResource defines a new verify method, that might be called by a resource store salvager to check the consistency of the resource.For example, file system based resources will use that method to check that the file or directory they wrap still exist, and delete themselves if not.
- DirectoryResource listing now emits HTML3.2 compliant documents, along with a link to the container (when possible)
- The realms catalog no longer uses absolute pathes, it will not however upgrade all realms catalog to not using absolute path. Relative path are relative to the server's auth directory (typically `config/auth`)

### New features

- A new SalvagerResource has been written. This resource will walk through the entire resource space, to check for:
  - Cycles in resource stores (due to Jigsaw bugs)
  - Unused resource stores (it garbage collects the stores)
  - Synchronize resources with the file system, by calling the verify method of all resources.
- A new ResourceWalker interface is available, along with a WalkerEngine. These two classes provide respectively an interface to handle the walk, and an engine that will trigger call to implementors of previous interface while walking through a resource space.

### Bug fixes

Numerous bug fixes have been omitted from the list, that list only the main ones:

- The ResourceStoreManager had numerous bugs, most of them should now be fixed.
- The ICPFilter HTTP client side filter that implements the Internet Cache Protocol should now be compatible with Squid implementations
- CVS has been fixed in numerous ways; the PutList resource should now be usable.
- The basic class AuthFilter now performs authentication during lookup, rather then at `ingoingFilter`'s time.

## Jigsaw 1.0alpha4

### Incompatible changes

- Properties are no longer saved in a single file, each ServerHandler has to manage its own property file. The file is designated through the server identifier. This means that older `httpd.props` file should be changed by:
  - Renaming them to `http-server.props` (the default server identifier)
  - All properties prefix should be removed (ie all `http-server` prefixes)
- The AttributeHolder pickling format has changed:
  - The FilteredResource pickling method had a bug (it didn't conform to the general format)
  - Before being dumped, attribute values are prefixed by theire pickled length. This allows the unpickleInstance method to skip unknown (ie deleted) attributes.
- The DaemonProperty class is now only used as a property loader. It implements a catalog of property sets; each ServerHandler instance is responsible for managing its own ObservableProperties instance.
- The getURL method of User HTTPResource instances now return the full path of the resource within any of the server contexts (it used to return the full URL).
- The abstract Attribute class now defines a new getPickleLength abstract method (that has to be defined by sub-classes). This method is used for the new pickling format of resources, to allow the unpickle method to skip unknown attribute values.
- The ResourceStore API has changed (for ResourceStore implementers only). The getVersion method has been added, and must return the version of the class that implements the store.
  The initialize method has a new opaque token parameter, to be used by the store when calling back the resource store manager (eg when calling the markModified method). The token can be thought of as the identity, for the resource store manager, of the store.
- The HttpManager can now be instantiated several times within the same process. This allows for different context for the HTTP client side API. More precisely, the new method getManager(Properties props) will create a new manager if no other manager has been created with that exact property set.

### Bug fixes

- The CommonLogger now initializes its buffer size properly from properties.
- Several fixes in the CacheFilter (protocol implementation errors)
- Bug fixes in the server-side Request object, wouldn't allow for non persistent connections.
- The new SocketClientFactory now properly deletes old clients if needed (old clients would otherwise tend to be priviledged wr to newer ones).

### New features

- Created the w3c.jigsaw.contrib.PasswordEditor resource, that allows web site users to change their own password within a given realm.
- Created the w3c.jigsaw.contrib.CheckpointResource that will backup Jigsaw configuration every once in a while.
- Created the w3c.jigsaw.contrib.LogFilter filter, that allows for very flexible monitoring of an URL sub-space.
- Added UNIX specific command line options, to be able to run Jigsaw on port 80, as any user, under any groups. Support also provided for chroot'ing Jigsaw under UNIX, check the FAQ entry.
- The proxy now provides minimal support for ICP, through the ICPFilter.
- Sun's servlet API is now supported, servlets can be downloaded from the net ! Check the ServletWrapper and RemoteServletWrapper resources.

### Compatible API Changes

- the Client getOutputStream method now returns a DataOutputStream.
- Revamped ClientPool, Client into abstract classes, etc. Check the new Client and ClientFactory APIs. This dos not affect any of the resources, but a set of properties did change in this process. All properties starting with `w3c.jigsaw.ClientPool` are now changed, check the SocketConnectionProp resource for more infos.
- The httpd class now has an a new errlog method, to signal error in a homogeneous way from resources (it takes a resource and a message as a paragmeter):
  `errlog(HTTPResource resource, String msg`)
- The Logger interface now define a `sync` method for asking the loggers to flush whatever they have back to disk.
- The Resource object defines a new store-entry attribute, to be used by the store of that resource as a closure (typically caching resource stores have an entry for each loaded resource to keep track of lockers, etc). The ResourceStore interface has been changed to reflect this: all methods that used to take a resource identifier as a parametr can now take the resource instead, and find up the entry through that new attribute.
- The DirectoryResource class functionalities has been splitted into two sub-classes:
  StoreContainer
    Defines a basic resource container, that keeps track of its children through a resource store. It doesn't know nothing about a file system
  DirectoryResource
    Now extends the StoreContainer, and knows how to serve files from a file-system.
- The ContainerResource for registering children, registerResource, now take as a parameter an HTTPResource instead of a Resource.
- The HTTPResource perform method has been splitted into three separate stages, to allow for more flexible customization of the process of performing a request:
  filterIn
    Applies all the filters on the way in, before the request gets processed. If this method returns a non-null Reply, it is assumed that some filter knew how to generate a reply on behalf of the target resource (eg a RAMCacheFilter)
  dispatch
    Dispatches the well-known HTTP methods (ie GET, POST, PUT, etc) to the appropaite Java methods (ie get, post, put...)
  filterOut
    Applies all filters on the way out. If this method returns a non-null reply, it is assumed to subsume the original reply (as obtained by calling dispatch).

## Jigsaw 1.0alpha3

This release is mainly a bug fix release with regard to the 1.0alpha2 release.

### Bug fixes

Main bug fixes are:

- The HTTP client side code has been reworked. This shouldn't affect users of that package, since it is mainly a rewritting of the internals of the HttpManager. The main problem was the managing of persistent connections, which is now much enhanced. The code was also cleaned up in that process.
- The cache garbage collector really works now ! The 1.0alpha2 cache garbage collector was just a proof of concept. The new garbage collector works by chunking the flow of data being cache through generation numbers, which allows for a much more precise garbage collections.

### New features

A small set of enhancements has been made too:

- Virtual hosts capabilities have been added, this feature supports only the `Host` based version of that feature (which doesn't consume IP addresses). More documentation is available here.
- The ContainerResource is now an abstract class, much more suitable for sub-classing then the DirectoryResource.
- The ProxyDirectory now has a disconnected mode, which allows you to connect your laptop from the net, get any numbers of document, disconnect from the net to later browse while on a trip. Check it !
- A new MirrorDirectory resource has been added, that allows you to mirror any web site. This resources is a nifty subclass of the newly created ForwardDirectory resource.

## Jigsaw 1.0alpha2

This member release of Jigsaw, version 1.0a2 is a snapshot of what will be Jigsaw 1.0a3, the next public release. It has lots of improvements, and lots of new features that you should check out:

HTTP/1.1
  The server is now fully HTTP/1.1 compliant, it will still be compatible with older, HTTP/1.0 clients.
Caching proxy
  This new release includes a caching proxy module, also fully HTTP/1.1 compliant. The HTTP client side API that is used by this proxy can be used as a replacement for the default HTTP Java handler. See the FAQ for more infos.
New resources
  A set of new resources and filters have been added to the core distibution:
  SSIResource
    The server side include resource will handle standard server side include commands. It is easily extensible in Java (make sure you check our tutorial on how to extend it). This resource is extremely powerfull and flexible and also impresively efficient, we urge you to have a look at it !
  Image maps
    A new image map resource has been included in the release. This adds image map support within the server in a very efficient way.
  ErrorFilter
    Allows you to redefine all the error messages leaving the server, by using internal redirection.
Enhancements
  A lots of enhancements has been made to Jigsaw since release 1.0a1. Among which:
  Performance tuning
    Although not fully tuned yet, this release deal with some of the bottlenecks found in older release. Inparticular, the new client pool class allows Jigsaw to handle gracefully an increased number of simultaneous connections.
  Configuration
    Has been enhanced in several ways. Check the /Admin directory to see them !
  CgiResource
    The new support for CGI scripts is much more easy to configure and use. It also has imrpoved a lot in terms of robustness. It has been tested on both UNIX and Windows.
  PICS support
    The PICS module of Jigsaw has been updated to reflect the PICS 1.1 specification.

## Jigsaw 1.0alpha1

This was the first available Jigsaw release.

Anselm Baird-Smith
$Id: RelNotes.html,v 1.14 1997/02/06 22:44:46 abaird Exp $