# 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:

2.0 beta1
  A public release, made on April the 8th.
2.0 alpha1
  A public release, made on January the 31th.
1.0 beta2
  A public release, made on January the 31th.
1.0 beta1
  A public release, made on September the 1st.
1.0 beta
  A member specific release, made on August the 1st.
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 2.0beta1

This is the first complete release of the new Jigsaw, with the new internal design.

### Bug Fixes

There was almost no bug fix in the new resource model of Jigsaw, but there was some modification of the HTTP stack, mainly about the handling of the PUT method.

### New Features

All the resources of the 1.0beta2 has been ported to the new 2.0 version. This includes:

- RedirecterFrame
- VirtualHostFrame
- CgiFrame
- CvsFrame
- CvsFileFrame
- ToolsListerFrame
- PutListFrame
- PostableFrame
- MapFrame
- ForwardFrame
- ProxyFrame
- PasswordEditorFrame
- CheckpointFrame
- DirectoryListerFrame
- GcStatFrame
- StatisticsFrame
- ThreadStatFrame
- CookieFilter
- HeaderFilter
- LogFilter
- CounterFilter
- DebugFilter
- GZIPFilter
- PutFilter
- CacheFilter
- AccessLimitFilter
- PutSizeFilter
- ErrorFilter
- GrepPutFilter
- ProcessFilter

The new documentation is also more complete.

### Incompatible changes

To avoid the name length limit on the Mac, the resource files used by JigAdmin are now stored in a zip, the old version of JigAdmin will not work with this new version, you then need to upgrade both the server and the client to do administration.

## Jigsaw 2.0alpha1

This 2.0 release is the first release of the new internal design of Jigsaw.

### Bug Fixes

This version as all the bug fixes of the 1.0beta2 about protocol issues. Other bug fixes have no meaning here as the internals of Jigsaw have been reworked.

### Incompatibles changes

- The name of the classes are now `org.w3c`... instead of `w3c`...
- The resources are no longer linked with the protocol, protocole frames are added to the raw resources
- The resources are limited, DirectoryResource, FileResource, PassDirectory, FramedResource, ContainerResource and ExternalContainer.
- The new frames are:
  - ProtocolFrame
  - HTTPFrame
  - ResourceFrame
  - NegociatedFrame
  - RelocateFrame
  - SSIFrame
  - ServletDirectoryFrame
  - ServletWrapperFrame
  - AuthFilter
  - GenericAuthFilter
- The filters are no longer placed on the resource, but on the protocol frame.
- The admin server has been reworked to support framed frames.
- Support for active Resources through listeners. (bean-like event model).
- Modification of the JigAdmin configuration tool to support protocol frames and framed frames.
- The root store of the distribution is no longer needed to start a new server, it creates its own store if none are present.
- The ResourceStoreManager has been completely modified, so the old configurations for the 1.0beta serie will no longer work. You will have to reconfigure your server entirely!
- The form-based configuration is invalid now and has been removed. You MUST use the administration server to configure Jigsaw

### New Features

- True reindexing now exists (This is real reindexing rather than deleting the resource).
- Jigsaw will create the root store if not present.
- Installation program that modifies the property files of the servers according to your configuration.
- Partial draft of the new documentation, the next release will have a completely new documentation.

## Jigsaw 1.0beta2

This is a bug fix release of the previous beta release. The purpose of the "beta track" is to improve the stability of Jigsaw. For further developments, see the 2.0 track.

### Bug Fixes

- Fixed revalidation mechanism with a `no-cache` directive.
- The update of a cached resource in case of a revalidation is now correct.
- The `Max-Forwards` header is now well handled.
- The `PUT` and `POST` methods are now working well on HTTP/1.1 servers.
- Fixed a bug in the `Via` header of proxied resources.
- Fixed default adds of HTTP headers that were wrong.
- debug of the classloader for servlets
- Bug fix in the jdbm enumerator.

### Enhancements

- The indexers can now create "ghost" resources to allow more fancy uses of Jigsaw, like shadow icon directories.
- Added the `TRACE` method of HTTP/1.1
- Added the possibility of templates in the indexers
- the GrepPutFilter forbid a PUT of a document containing a specified string. Very useful when you edit your website from one server and you doesn'y want to allow links to this server.
- Added a DateThread, if you want to speed up Jigsaw a bit (~10% by switching loggers).

## Jigsaw 1.0beta1

This is just a bug fix release of the latest member beta release.

### Bug Fixes

- Fixed a bug in Content-Length in case of Chunked encoding.
- Added more feedback when a configuration error occurs while using JigAdmin.
- Fixed bug in the CacheFilter

### Enhancements

- Added a new Resource, DirectoryLister, acting like when you access to a directory, useful to make a small index.

## Jigsaw 1.0beta

### Bug Fixes

- FileResource now supports the HTTP/1.1 `If-Range` header, and a slight bug was fixed in the emitted `Content-Range` header
- The HTTP client side cache filter has been fixed (jdbmResourceStore enumration was buggy)
- The Caught Exception trace in errlog has been removed (The trace was the bug - tm)
- Fixed a bug in ICP message parsing (will now correctly handle message of length exceeding 255 bytes)
- If it manages a shared cache, the CacheFilter will no longer cache documents retreive through a request that has an Authorization header.
- Fixed a bug in HTTP Date parsing (one of the three date format wasn't parsed properly)
- Fixed a bug in ContentLengthInputStream (wrong size after an error on a read)
- Fixed a bug in ActiveStream which was the source of empty documents feeded by the proxy.

### Enhancements

- Added a property in the ICPFilter to disable caching of documents retreived through ICP
- JSDK/1.0 FCS servlet API support
- Powerful JDBC access through server side include.

  This new feature allow you to querty any JDBC compliant database and embed the result within your HTML page. Check the SSIResource api.

- PICS & JDBC.

  A new LabelBureau implementation is available. It relies on any JDBC compliant database as the storage mechanism for PICS labels, which makes it more scaleable than the previous filesystem based approach.

- Servlet support has been upgraded to 1.0FCS; Support for automatic servlet reloading has also been implemented (Jigsaw will detect that the servlet class files have changed and will reload them automatically).

### New Features

- Added a companion server to do the remote configuration.

  The protocol used to communicate with the Admin servlet hasn't been specified yet, and will probably change in the next releases of Jigsaw. The client part of the API (w3c.jigsaw.jigadm.RemoteResource) is unlikely to change though.

- A new graphical tool is available to do the configuration of Jigsaw. Currently, this allows you to do everything the form based editor could do.
- Support for the SAP protocol has been included, as the starting point for multicast proxy-to-proxy support. SAP is the Session Announcement Protocol (an Internet draft)
- The ProxyDirectory resource now supports ftp tunneling (it won't do caching until someone tells me how ftp results can be cached)
- Support for a light multicasted version of ICP now available in the proxy, turn your hundreds of useless 5Mo caches into a usefull 50Mo collaborative proxy: the net is the computer ! Check the MICPFilter client side filter.
- Resource can now be extended through the use of ResourceFrame;

  The notion of HTTP filters has proven usefull enough to be extended for non HTTP resources. You can now attach frames to resources that describe users for example (such as the w3c.jigsaw.auth.AuthUser).

### Incompatible API changes

- The FormResource constructor now takes a ResourceContext instead of a httpd instance
- The indexing model haa changed quite a bit.

  A new indexing model has been designed: each directory can declare how it indexes its content through thew use of its own indexer. The indexer API is defined in w3c.jigsaw.indexer.

### Incompatible Configuration Changes

- Filters pickling as attributes

  Filters pickling has changed: filters are now just a special resource attribute, and follow the general pickling format. They used to be special, and that caused lots of troubles.
  Don't redefine the pickle method !!

- Cache directory hierarchy

  The cache directory hierarchy has been made multi-directory: cached entries are stored in a tree of directories instead of within a single directory (lessen the load on the file system by decreasing the acche directory size)

## 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`)
- The `w3c.jigsaw.space` property is no longer settable through the Admin properties editor. This was an oversight. The only way to set the space for a server, is through the `-space` commandline toggle (check the command line page for more details)

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

Jigsaw Team
$Id: RelNotes.html,v 1.41 1998/04/08 09:30:52 yves Exp $