# Jigsaw
release notes

Jigsaw releases
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.2
2.0.5
2.1.1
2.0.4
2.1.0
2.0.3
2.0.2
2.0.1
2.0.0
2.0 beta3
2.0 beta2
2.0 beta1
2.0 alpha1

1.0 beta2
1.0 beta1
1.0 beta
1.0alpha5
1.0alpha4
1.0alpha3
1.0alpha2
1.0alpha1

Following the normal W3C conventions, there were 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). From the beginning of 1998, the releases are only public ones, we still add the word "public" to avoid any confusion.

NOTE! The odd number in the middle state that this is NOT a stable release, not that it is unstable, but it means that not all the features are present, and that some more testing is needed until it gets its even middle number.

## Jigsaw 2.2.4

A public release, made on February 18th, 2004.

This version is a bugfix and optimized version of 2.2.3. It contains an updated version of the SSL code (that may require the use of jdk1.4). It contains a security fix, so you are encouraged to update as soon as possible.

### New Features

The HTTP Client stack has been completely reworked to be faster and to avoid keeping information on too many remote servers. The client stack now also has a timeout on connect.

### Bug Fixes

- Fix in the client stack persistent connection handler. It now closes the socket and mark the connection free when a "Connection: close" header is in the reply.
- SSL patches from Thomas Kopp.
- URI components now generate an exception when a separator is found
- Memory usage optimization of the serialization of a resource.
- Read/write of stores is now more fault tolerant.
- Fixed the client stack use of connections, also the global server knowledge hastable is now trimmed the right way.
- Fixed StatisticsFrame to use less StringBuffers
- Added a configurable timeout on connect, for the HTTP client stack. `org.w3c.www.protocol.http.connections.connTimeout` (defaulting to 1000ms)
- Fixed ContainerResource check for duplicate key, the "new key" algorithm is now more random (ie it uses the whole scale instead of the object serial mask), as it was leading to infinite loops on huge sites.

## Jigsaw 2.2.3

A public release, made on November 27th, 2003.

This version is a bugfix and optimized version of 2.2.2. It also includes Jigedit with WebDAV support, a package with a specific WebDAV configuration will follow, and a tutorial to do the WebDAV setup is already online.

### New Features

- SSL support for HTTP and WebDAV servers, thanks to Thomas Kopp, a tutorial is available

### Bug Fixes

- Fixed internal copy in DAVFrame in the case of a SSL server
- Added the underlying exception in the HttpManager to distinguish between errors in the client stack.
- Fixed ContainerResource check for duplicate key, the "new key" algorithm is now more random (ie it uses the whole scale instead of the object serial mask), as it was leading to infinite loops on huge sites.
- Fixed deadlock in NegotiatedFrame. getVary() allowed a backward sync chain.
- Added a "equiv" method in MimeType to check for text/xml - application/xml rough equivalence on PUT
- Added Long support in HttpBuffer and HttpParser
- Fixed lock ordering in NewStoreEntry to avoid a deadlock
- Verification of connection availability on POST changed (need to have a fd_err + select to do it in a better way)
- Fixed deadlock when a file resource mark its parent as modified (backward locking, again)
- CvsRunner now uses File.createTempFile instead of hardcoded /tmp (was problematic on windows platform)
- Fixed deadlock in FileResource (backward locking)
- Fixed CgiFrame to accept more output from Cgis (triggered my perl cgi library)
- Added TeraBytes support for statistics frame
- Fixed notifyUnload in ForwardFrame to avoid nullpointer exception (patch from Brian Laird)
- Fixed getParameterMap of ServlerRequest to map servlet2.3 spec
- CacheFilter now normalize the URL before any processing to avoid duplication on capitalization
- Fixed test for socket close in jdk1.4 specific part, added a property to allow retries on two-steps request, in the case of error on headers (thx to Phil Blake from IBM pointing me this one)
- Writers for resource serialization, both in admin server and ResourceStoreManager now force UTF-8 encoding (as XML is declared to be UTF-8)
- Error recovery on parsing errors of serialized resources, allowing stores to continue loading
- Cleaned stat generation and added hits/sec
- HtmlGenerator now uses HTML4.01 and adds the charset parameter if it is known
- Added finer grain statistics by separating dynamic from static generated replies
- Fixed replaying of 1xx replies back to the client
- Fixed HttpCacheControl to add new values for a directive that appears several times
- Re-fixed validators for If-Match
- dupRequest in proxy now removes Proxy-Authorization, thx to Thomas Kriegelstein
- Client now send back a BAD_REQUEST when the http request parser in strict mode throw an exception
- Fixed header name+":" parsing to include implied LWS
- proxy now serves GATEWAY_TIMEOUT and BAD_GATEWAY as it should
- Kludge for Age and maxValue -> must use Long instead of integers
- Fixed sharing default for the cache to match the one of CacheProp (true)
- Strict HTTP header parsing mode made more valid wrt quoted strings
- More error handling in strict mode to generate BAD_REQUEST replies
- A server-side "lenient" HTTP parsing property has been added, decoupled from the client-side one, settable via GeneralProperties in JigAdmin
- Parsing of field-value now has a strict/lenient mode
- Revalidation on HEAD now invalidates on new values
- Fixed handling of errors during HTTP headers parsing in the proxy, now returns a BAD_GATEWAY
- Parsing of HttpInteger now generates an exception on overflow
- Accept header is no longer automatically added by the proxy when the client request do not have it.
- Fixed deadlock in ServletWrapper wrt lock ordering of timeout manager, when different instances of the servlet are created while some are timeouting
- Handling of HTTP exception in the ForwardFrame is changed, direct HTTP exception now generates a 502 Bad Gateway instead of a 504
- Precondition failed in the cache now generate an exception with a complete reply (ie: not reusing "wrong" informations from the cached resource)
- HttpCacheControl raw bytes shouldn't be unquoted before parsing
- Replies from a shared cache now remove the header list protected by a private cache-control
- Headers protected by a no-cache directive are no longer stored
- Cache-Control now parses extensions instead of throwing an exception
- Host header normalization now uses case insensitive URI scheme comparison
- Proxy now forwards back the 100 Continue reply from the upstream server
- Multiple 100 results now in multiple ContinueEvents
- Validators (If-None-Match...) in the EntityCacheResource are now matching the one in HTTPFrame
- Default freshness lifetime for cgi with no header info is now 0.
- Cache is not used when a no-store directive is present in the request
- Overflow in Max-Forward leads to an exception and a 5xx reply now, instead of forwarding a wrong value
- Added consistency checks in the cache for revalidated resources
- Fixed ForwardFrame to check chuked/Content-Length mismatch by reusing the duplicated request/reply that actually has the right information
- Fixed CacheFilter to do stricter host:port check before invalidating resources on PUT/POST/DELETE
- Invalidation of Content-Location now uses relative URIs (was partly done, a typo was in the way)
- Fixed CacheStore to avoid calls on LRUNodes, as synchronization is missing on the SyncLRUList in this case.
- CacheGeneration uses a more stricter way of crawling the LRUlist of files to delete
- Fixed parsing of Content-Range (support for unknown length)
- Fixed XMP parsing in JpegHeaders
- Fixed servlet flush notification to avoid race condition problems with sendError/sendRedirect and such.
- Fixed http Client to avoid aborting on strange servlet related IOExceptions (see org.w3c.jigsaw.http.Client rev1.71 log for in depth explanations)
- CgiFrame now display in the server console stderr of forked Cgis (prevent some cgi lockups on Win platform)
- Added a way to restransmit some buggy but not defined in rfc2616 headers (cookies, not to name it)
- Invalidation of Location and Content-Location was wrongly assuming that resource were live in the cache, leading to errors for valid requests
- Fixed If-Match if the resource ETag is weak (currently, it can happen only in the cache)
- Fixed JpegHeaders to deliver XMP at the beginning of the XML and not at the beginning of the chunk
- Fixed JpegComFrame, the parameter was unescaped twice, problematic with application/???+xml mime types
- Added JpegXmpFrame, to extract automatically XMP from Jpeg images
- Fixed revalidation in HTTPFrame when both If-None-Match and If-Modified-Since are present
- Implemented Vary support and revalidation of negotiated resources in the client-side HTTP cache
- Implemented 410 Gone permanent support via the new "shrinkable" flag of DirectoryResource (similar to "extensible" for for deletions)
- Cached resources were incorrectly asking for revalidation every time once marked invalid.
- Cache now serve HEAD from the cache
- Cache now invalidate resource in Location or Content-Location for POST, PUT and DELETE, if host matches the requested URL
- Added \CHAR escaping in quoted string of a header parameter
- Client stack will retry requests only if it is a known idempotent resource
- Fixed TRACE to allow it again to be proxied
- Fixed bug in Expectation check in the proxy, and in the general case.
- Fixed bug in continuation with empty lines
- Fixed bug in header continuation parsing
- GZIPFilter was incorrectly setting Transfer-Encoding instead of Content-Encoding

### Improvements

- Memory usage reduction

## Jigsaw 2.2.2

A public release, made on January 8th, 2003.

This version is a bugfix and optimized version of 2.2.1. It also includes Jigedit with WebDAV support, a package with a specific WebDAV configuration will follow, and a tutorial to do the WebDAV setup is already online.

### New Features

- SSL support for HTTP and WebDAV servers, thanks to Thomas Kopp, raw documentation is available

### Bug Fixes

- Fixed ForwardFrame to forbid forward of Content-Location when reply is chunked
- Fixed ForwardFrame to remove received Trailer header
- Fixed HTTP stack's Reply to allow body on OPTIONS per rfc2616
- Fixed lock ordering in HTTPFrame regarding methods on Container (deadlock reported 5/12/2002)
- Fixed deadlock in Resource.getParent(), when both child and parent try to lock each other.
- Deadlock fixes in the HTTP client stack
- Removed potential conflicting Connection: header values in the HTTP client stack during discovery of HTTP capabilities
- Fixed RedirectedFrame to avoid ipv6-like hosts when it is a ipv4 one.
- Added a way to optimize by not unloading big stores, depending on a tunable limit.
- Ensure that keys in the ResourceStoreManager are not used twice when generated
- Fixed the default encoding used in JigsawHttpServletResponse per servlet 2.3 API
- Solved the deadlock problem with negotiated frame, directory listing, and everything that needs backward traversal of the resource tree.
- Fixed JigsawHttpServletResponse, it now checks that the stream has been commited before screaming
- Fixed Base64Decoder based on Jeffery Collins <jcollins@boulder.net> original patch
- Fixed JigsawHttpServletRequest getCharacterEncoding to return null when undefined instead of the iso-8859-1 default.
- Fixed ContentLengthInputStream, it now send an IOException when the stream is cut too early in read()
- Fixed HttpURLConnection getContentType was raising an exception rather than returning null
- Various updates in the HTTP stack, to consume less memory and use non-deprecated Date API.
- Integrated cookie parsing patch contributed by Julien Mudry <jmu@elca.ch>
- URL in jdk1.4 can have an empty file element, it is now translated to '/' for all methods but OPTIONS, where it is '*'
- Special files "aux", "con", etc. can no longer be created by the indexer on Windows platform (still possible on other platforms as those files are not special there).
- Fixed servlet wrapper to close the input stream when needed, also when a relocate or an error is triggered from the servlet, an exception is raised if the client already got (part of) the reply.
- ServletWrapper now take the feeding thread from a thread cache (avoid keeping too many open threads)
- Fixed reuse of connection in the HTTP Client stack, by using jdk1.4 method on socket (uses reflection to keep the code backward compatible)
- Fixed HTTP compliance of chunked request, and proxy of request without body
- Redid the InetAddress dump in the logger as well as the status code dump
- Memory and performance upgrade of the infamous CommonLogger and ExtendedCommonLogger, who were the primary culprits in the memory usage once the stores are loaded.
- Started to find and elimnate all unnecessary memory allocated
- Fixed directory index of ZipDirectoryResource, to delete and get size information the right way
- Fixed ZipFrame to allow automagic destruction of stale entries in the underlying zip
- Error reported when an error occur in the file system does not display the PATH any longer to avoid disclosing
- Fixed a potential leak (never emptied hashtable) in HttpManager
- Fixed RelocateFrame to accomodate new ipv6 scan of host in URL

### Improvements

- Memory usage reduction
- CPU usage reduction (mostly the loggers that are the hotspots)

## Jigsaw 2.2.1

A public release, made on April 8th, 2002.

This version fixes bugs, especially a security bug of version 2.2.0 It also includes Jigedit with WebDAV support, a package with a specific WebDAV configuration will follow, and a tutorial to do the WebDAV setup is already online. It is also the first release Carine Bournez worked on.

### New Features

- JigShell, a small utility
- WebDAV enabled JigEdit
- Implementation of Apache mod_asis.
- PushCache package, contributed by Paul Henshaw from The Fantastic Corporation.
- TidyPutFilter, a filter to validate automatically the XHTML or HTML sent via the PUT method, using JTidy.

### Bug Fixes

- Previously uncaught error (ie: non Protocol ones) during lookup are now resoved by sending a 400 Bad Request
- Fixed the way exception filters are called in httpd. Side effect, ErrorFilter works again
- Fixed a bug in TE Filter that was compressiong twice the stream (need to figure out why it was called twice though)
- Fixed semantic of ; in the URI, with the right info given during lookup
- SECURITY FIX: Fixed security bug regarding URI parsing
- Added a flag to remove the URI from default error pages as well as the proxy module (SECURITY FIX: avoiding cross scripting attacks)
- Fixed ServletMapper to do redirect the right way (host parsing). It was interacting with new jdk1.4 ipv6 scan
- Merged patches from Thomas Kopp concerning servlets: servlet loading, behaviour of SingleThreadModel
- Reverted 1.3 API calls to 1.2, or used reflection to use jdk1.3 only methods in the push package
- Added a specific frame to handle MKCOL and other collection-related WebDAV methods in Jigedit
- Fixed WebDAV implementation, it now sends all the requested properties in a PROPFIND, with the right statuds for the undefined ones.
- Modified AclFilter to take benefit of skipBody
- Added skipBody in Request, it allows a filter to skip an eventual body in a better way than error recovery.
- Fixed bug when Content-Type was not set (it was set but the value of the HttpMimeType was null, defeating the usual check)
- Fixed If-None-Match during the creation of a FileResource
- Fixed trailing / for negotiated resources, it was ignored, resulting in bad relative links
- Fixed If-None-Match in HTTPFrame, it now handles *
- ResourceStoreManager will issue a warning when a store raise an exception during save, the general save will continue (it was not the case before)
- In CvsFileFrame, cvs update is performed also prior to a PUT.
- Added stronger synchronization for log rotation.
- Fixed indexer so that fake file resource can be created, as it may be dangerous for directories, it is still forbidden on those.
- Fixed deadlock in DirectoryListerFrame, a lock was not done resulting in locks done in the wrong order in concurrent access
- Fix NewStoreEntry, hashtable of loaded ResourceReference is now cleared when the store is unloaded.
- Fix in EditableSlider, now a textfield can resize the boundaries of the slider, a non-extensible mode is also available
- Fixed RedirectedFrame to add Content-Location after the internal redirect, and Referer is kept.
- Fixed NegotiatedFrame to gather filters from the selected resource, collected during the lookup, instead of the perform. However perform may select the resource if the state is lost because of another filter.
- Fixed error replies for JigEdit on a 412
- Added synchronization fo class loading in servlet's class loader

### Improvements

- Resurrected -port as an undocumented deprecated feature.
- Added CountInputStream, to get the actual number of bytes read.
- ByteArrayOutputStream now accept also InputStream
- Implemented jdk1.2 API getErrorStream of HttpURLConnection
- Implemented ETag override to match Apache FileETag directive in JigEdit

## Jigsaw 2.2.0

A public release, made on March 13th, 2001.

This release is the first stabilized version of the 2.1 series, now renumbered as 2.2. It also includes WebDAV support, a package with a specific WebDAV configuration will follow, and a tutorial to do the WebDAV setup is already online.

### New Features

- WebDAV implementation
- org.w3c.util.DateParser: a parser for date in ISO 8601 format.

### Bug Fixes

- Fixed Allow: header depending on the frame configuration.
- StringAttribute now accept null as a valid value.
- Fixed jigadmin to allow removing some attributes.
- Fixed VirtualHost lookup to use the host part of the resolved URI instead of only the Host header
- Fixed Host: header checking for HTTP/1.1 requests
- Bug fixed in ServletProperties Reader (InitArgs separator)
- RuntimeException throwned when the servlet container has no ServletDirectory.
- Fixed VirtualHostFrame for fully qualified request in the URI on not default ports.
- Fixed / -> %2F for the URI trick for rdf metadata
- Fixed caching for authenticated resources
- Fixed logname for october (10)
- Fixed Content-Length to 0 for a 201 Created without a body
- Compliancy fix in the cache, entity headers removed from a Not Modified reply
- Fixed slider in JigAdmin to auto expand near the limits
- Fixed NullPointerException in ETag-based PUT on Negotiated Resource.
- Fixed Chunking when 0 bytes were received, the stream was wrongly closed.
- Servlet errors are now propagated the right way, and the monitor always released.
- Chunking is allowed on Connection: close
- Connection: close requests now adds the header automatically in the reply
- Logger can now log the original URL during an internal redirect
- Fixed Digest Auth bug (well update of the spec) regarding unquoted parameters in the credential
- Fixed TRACE method, now done directly at the server level, as it is only used as an echo.
- Robustness fix, servlet are now killed after the right timeout
- Fix problem with servlet timeouts and errors/redirects.
- Various fixes for persistent jdbc connections
- Fixed bug in HttpBasicServer, when the number of IP for a host was updated with less IPs
- Fixed compliancy bug for OPTIONS * (Content-Length is now explicitly 0)
- Fixed log time when the server ran into daylight saving changes.
- And several other ones...

### Improvements

- HTTP Compliancy improved
- Servlet now reuse Jigsaw filtering system even on the way back
- Added support for mirroring from a non-root resource (providing all the underneath links are relatives)
- Creation of NegotiatedResources in DirectoryResource is now incremental.
- Added more statistics about resource store usage

## Jigsaw 2.1.2

A public release, made on August 9th, 2000.

This release is the updated and enhanced version of the 2.1.1 release it includes all the new features found in 2.0.5 and stability has been vastly improved since 2.1.1, for both server and client side, also servlet and jsp support has been improved.

### New Features

- CC/PP implementation.
- Persistent Jdbc connection handler.
- HTTP/0.9 support in client side API (*sigh*)

### Bug Fixes

- Many fixes for JSP support
- Fixed init of log rotation and log format
- Fixed several deadlocks in during indexing+save+event processing
- Fixed HTML4.0 compliancy of container listings
- Fixed requestDispatcher for VirtualHosts
- Fixed problem with getServerName and Host with no port number.
- Connections count and overall stability in SocketClientFactory
- ETag generation fixed when a non-file resource is involved.
- Fixed XMLResourceWriter, child list for jigadmin was not encoded.
- Fixed CommonLogger, some entries were missing when the buffer length was reached.
- Fixed a bug in HTTPFrame leading to modification of the stores for every load of a store.
- Fixed AclRealm so that AuthUser state is added to the request
- Fixed JpegHeaders to release the file decriptors on the file
- Fixed JigAdmin to correct URI not ended with '/' (leading to an error when using jdk1.3)
- Fixed Slider in Jigadmin so that it checks the bound to avoid problems
- Fixed a bug in ServletMappefFrame (pathinfo not corectly set)
- Fixed a bug in ServletResponse.sendRedirect()
- Fixed HTTP/1.0 request in client side when a body is there and an error is replied
- Fixed FowardFrame to close connection when amgibuity can be raised by the client-side reply concerning Content-Length.

### Improvements

- Added a lenient HTTP headers parsing mode to be kind to ill-configured servers
- -host option resurrected
- CgiFrame can reuse the frame config
- JpegHeaders can extract metadata from digital cameras
- NegotiableFrame now uses ordering for Accept:
- Better Statistics Frame
- HttpAccept can have a quality factor
- Jigadmin can do a local reindex (that's what people usually want)
- Relocate and Redirect redone to be more flexible.
- MimeType can now be cloned
- Charset support, independant of the Mime Type
- Added get/setSMaxAge to be nice for caches
- Automatic log rotation in CommonLogger and ExtendedCommonLogger
- Statistics frames are now giving more informations
- HTTPFrame can have multiple indexes
- HTTPFrame generate index for generic containers
- ThreadCache is now using a FIFO for the free threads, to deal with some broken jdk.

## Jigsaw 2.0.5

A public release, made on July 5th, 2000.

This release is the updated and enhanced version of the 2.0.4 release it includes all the new features available in 2.1.1, like servlet 2.2 support and JSP support. Also many bug fixes for improved stability and HTTP/1.1 compliance.

### New Features

- Servlet 2.2 support (except for .war as it is too "file" oriented).
- Charset support
- NoCache filter to deal with broken browsers.
- Shutdown hook, to save the configuration in case of emergency (requires jdk1.3 to work, but jdk1.3 is NOT required to run Jigsaw)
- Automatic log rotation.

### Bug Fixes

- Fixed loggers to have a good date for HTTP/0.9 requests on dateless replies
- Fixed JigAdmin to correct URI not ended with '/' (leading to an error when using jdk1.3)
- Fixed a bug in HTTPFrame leading to modification of the stores for every load of a store.
- Fixed AclRealm so that AuthUser state is added to the request
- Fixed JpegHeaders to release the file decriptors on the file
- Fixed ETag generation when a non-file resource is there.
- Loggers fixed, some entries were dropped when buffer was full
- Some servlet parameters were lost in servlet call.
- Fixed SocketClientFactory for more stability and better idle connection removal.
- Fixed problem with getServerName() when port is 80
- Fixed return code when servlet is not available
- Fixed HttpBasicConnection to avoid caching IP forever.
- Fixed RequestDispatcher with VirtualHost
- Various fixes for JSP support.
- Fixed ServletPropertyReader for servlet preload.
- Fixed default port recognition in the lookup phase of the proxy
- Fixed synchronized call in HttpBasicServer to avoid deadlock
- bug fixed that was preventing binding on a specific IP

### Improvements

- Added a lenient HTTP headers parsing mode to be kind to ill-configured servers
- -host option resurrected
- CgiFrame can reuse the frame config
- JpegHeaders can extract metadata from digital cameras
- NegotiableFrame now uses ordering for Accept:
- Better Statistics Frame
- HttpAccept can have a quality factor
- Jigadmin can do a local reindex (that's what people usually want)
- Relocate and Redirect redone to be more flexible.
- MimeType can now be cloned
- Charset support, independant of the Mime Type
- Added get/setSMaxAge to be nice for caches
- Automatic log rotation in CommonLogger and ExtendedCommonLogger
- Statistics frames are now giving more informations
- HTTPFrame can have multiple indexes
- HTTPFrame generate index for generic containers

##

## Jigsaw 2.1.1

A public release, made on March 6th, 2000.

This release is the updated and enhanced version of the 2.1.0 release it includes all the new features available in 2.0.4, as well as new ones, like servlet 2.2 support.

### New Features

- Image metadata extraction
- Servlet 2.2 support (except for .war as it is too "file" oriented).
- Charset support
- new rfc2616 compliant cache (almost finished)
- NoCache filter to deal with broken browsers.
- Shutdown hook, to save the configuration in case of emergency (not yet functional, it will work with java2 1.3 and up)
- Automatic log rotation.

### Bug Fixes

- Bug fixed in RealmCatalog and AuthRealm
- internal lookup bug in ProxyFrame
- Fixed bug in the creation of frame arrays
- Fixed an unload notification that was not passed to frames
- Fixed a deadlock in the ResourceStoreManager
- Fixed an extra Content-Type sent in the admin protocol.
- ChunkedInputStream now notifies an EOF if it happens while you ask to read for more bytes than available (was potentially waiting forever before that!)
- Fixed HttpBasicServer, when the client part has to do a two stage HTTP/1.1 request on behalf of a 1.0 client (proxy)
- Fixed ChunkedOutputStream, it is now more optimized and a potential char to byte convertion problem has been removed. Also, the closing of the stream has been fixed.
- Fixed Base64 encoder and decoder, to avoid a potential char to byte conversion error
- modified the attribute name for last modified, as it was interacting badly with revalidations
- Fixed MimeType matching
- Fixed bug in HttpMessage, The proxy stopped to forward the SetCookie header
- Invalid XML characters are now encoded
- FileAttribute now pickles a String, mandatory for remote admin
- Resource store upgrader redone so that it works for jdk1.2.2
- Fixed bug preventing binding on a specific IP
- Redone Relocate and Redirect frames so that virtual hosts and proxies are now supported.
- Fixed static declaration of inner classes in XMLProperties
- fixed HttpAccept to use quality factor as it should
- Fixed LookupState to use ; in the URI during lookup.
- Fixed init code of AttributeHolder
- Fixed race condition in resource store loading
- Fixed getRealPath in ServletContext

### Improvements

- Added a more clever (and expensive) loop check in the Proxy, it check for the IP and not for the host only
- Relocate and Redirect redone to be more flexible.
- MimeType can now be cloned
- Charset support, independant of the Mime Type
- Added get/setSMaxAge to be nice for caches
- Automatic log rotation in CommonLogger and ExtendedCommonLogger
- Statistics frames are now giving more informations
- HTTPFrame can have multiple indexes
- HTTPFrame generate index for generic containers

##

## Jigsaw 2.0.4

A public release, made on January the 21th, 2000.

This release is a backport of all enhancements that does not deal with XML serialization and also a bufix release.

### New Features

- Image metadata extraction
- Servlet.properties parsed at startup
- Charset support
- NoCache filter to deal with broken browsers.

### Bug Fixes

- Bug fixed in RealmCatalog and AuthRealm
- internal lookup bug in ProxyFrame
- Fixed bug in the creation of frame arrays
- Fixed an unload notification that was not passed to frames
- Fixed a deadlock in the ResourceStoreManager
- Fixed an extra Content-Type sent in the admin protocol.
- ChunkedInputStream now notifies an EOF if it happens while you ask to read for more bytes than available (was potentially waiting forever before that!)
- Fixed HttpBasicServer, when the client part has to do a two stage HTTP/1.1 request on behalf of a 1.0 client (proxy)
- Fixed ChunkedOutputStream, it is now more optimized and a potential char to byte convertion problem has been removed. Also, the closing of the stream has been fixed.
- Fixed Base64 encoder and decoder, to avoid a potential char to byte conversion error
- Fixed cached entry invalidation, it now marks the entry to be revalidated next time rather than removing it directly from the cache (helps disconnected operation).
- Fixed header update during revalidation not matching 200 or 304 (ex: auth failed)
- modified the attribute name for last modified, as it was interacting badly with revalidations
- JigsawRequestDispatcher in servlet is now cloning the request before an include or a forward
- Fixed MimeType matching
- CacheFilter no longer caches replies with Set-Cookies
- Fixed bug in HttpMessage, The proxy stopped to forward the SetCookie header

### Improvements

- Added a more clever (and expensive) loop check in the Proxy, it check for the IP and not for the host only
- Better servlet 2.1 support
- Better caching algorithms, (completely redone for 2.1.>0).

##

## Jigsaw 2.1.0

A public release, made on September the 9th, 1999.

This release is the first release using the new serialization scheme. It allows you to change the way the serialization is done. As an exemple, and to provide an easier access to the configuration.

### New Features

- New serialization scheme, the current version uses XML, see the JXML format for more information on how to read the serialized files.
- New admin exchange format, using JXML, it allows you to create administration scripts.
- A new upgrader will convert automatically the old Jigsaw stores to the new format, the old stores are kept in a backup directory.

### Bug Fixes

- more HttpRange can now be created: "-500","500-", by using -1 as the default value
- The request parser now skip the body if sent directly by the client when an error occured.
- Servlet are destroyed only if all the connections are closed
- Lister in Jigedit now defines the ACTION in the FORM
- Servlet bug fixed in getResource(), thanks to James Clark.

### Improvements

- Directory listing now ends the URI of the containers with a "/", preventing an extra redirect
- Logger now has a property to define the logging directory

### Limitations

- The jdbmResourceStore has not yet been ported, a consequence is the lack of CacheFilter in the proxy, but it will be replaced soon by a completely new cache.

##

## Jigsaw 2.0.3

A public release, made on July the 27th, 1999.

This release is a bugfix version of the 2.0.2, while 2.1.0 will add new feature and will completely change the way the resources are serialized). Meanwhile, there are new functionalities, like the new Acl api, which replaces the old auth schemes.

### New Features

- new Acl API, more flexible than the previous auth scheme.
- Redirecter Frame now handles PATH_INFO.
- Charset and language dialects negotiation.
- Added MimeTypeArray and other basic attributes arrays.

### Bug Fixes

- Bad request handling is better, previously, HTTP/1.1 without a Host: header or a full URI was just closing the connection.
- Servlet indexer can now index servlets with full package name
- Bad permission on a file now fires an exception, rather than (possibly) hanging.
- MimeAttribute null balue is now handled in jigadm
- Cache is now sending the right size for null documents
- Servlet's getReader now takes care of the encoding.
- ServletRequest now merges URI parameters and body parameters.
- Fixed ResourceEvent bug (unloaded resources are no longer receiving events)
- Cache is no longer blocking for non-sized multipart documents.
- Fixed loop in proxy when the proxy was on port 80 (fixed also if it is the default https port)
- Fixed timestamp problem when a file has been modified in the past (clock skew is a pain)
- Fixed max-connection and notification of waiting threads during the deletion of an old kept-alive connection
- Cached VaryResource are now checking ETag the right way, no more 304 replies when it was just a cache revalidation.
- Multiple cookies are now sent using multiple headers (ugly but cookies ARE ugly).
- Fixed ResourceStoreManager initialization, when another root resource was set, it may end up in resource duplication and problems while attaching frames/filters, also it was causing deletion loops. WARNING! You may have to redo your configuration if you changed the root resource!
- Fixed servlet timeout unit
- SSI Frame and servlet interaction fixed (no more chunking in that case)
- Logger and port can be changed while the server is running.
- The "No logger" warning is more explicit

### Improvements

- Servlet timeout can be disabled
- Servlet cookie maxage can now be -1 (unlimited)
- Language negotiation has been redone, it now check dialects also
- Content negotiation now takes the order into account
- Realms now have a real feeder (administration tool)
- Added bind address so that multiple interfaces can be bound.
- Client garbage collection scheme has been redone, allowing smoother handling of clients when load goes up (it means also better performances)
- MirrorFrame now tweaks also temporary redirects
- Md5 constructor now allows an encoding string.

## Jigsaw 2.0.2

A public release, made on March the 31th, 1999.

This release includes the first version of the new administration tool (jigadmin, v2). Along with that, numerous improvement over the old version, like servlet API 2.1 support.

### New Features

- Digest Authentication
- Http Extension Framework (HttpExtFrame)
- New JigAdmin. This one should be more intuitive than the other, but still, you probably need to understand the design to take best out of it.
- JSDK2.1 (Servlet API) support.
- Per servlet timeout is possible
- JNI port of LibUnix, thanks to Roland Mainz
- New logger ExtendedCommonLogger, doing log rotation and using ECLF format
- *forbid* can be used as a Container index
- Log file resolver, to do DNS resolution offline
- ServletMapperFrame, used to map a file to a servlet (see the FAQ entry about JSP)

### Bug Fixes

- HttpChallenge fix, the byte buffer is now recomputed when it changes.
- Redirect fix for virtual hosts
- Relocate fix for virtual hosts
- Frame identifier now used in FrameReference as you may have multiple instances of the same class attached to a resource
- ContentLengthInputStream and ChunkedInputStream now throws an IOException when an error occurs
- 201 Created now generates the right response
- FileAttribute is now sent as a String in the admin protocol to avoid automatic conversion of jdk1.2
- When indexing a file with multiple extensions, frames attirbutes are now aggregated. It requires the use of the new default indexer provided in the distribution, as the Content-Type for modifiers (like .fr) is now set to *none*
- VirtualHost now remove automatically the ":80" added by some robots.
- Extension matching process now does "perfect" match, then case insensitive match if desired.
- CgiFrame has now PATH_TRANSLATED defined
- RedirecterFrame now forward the query string as expected.

### Improvements

- index resolution for containers now add Content-Location
- PUT on negotiated resources is handled using ETags
- Users can add environment variable in the CgiFrame configuration
- ETag generation is done in one place, so you can overload it.
- URLDecoder updated to use InputStream AND Readers
- ContentTypeIndexer can now use wildcards (well only *) in its mime type definitions.
- ThreadCache behaviour near the limit is now the right one, also there is a feature to wait for all the thread of the cache.
- PassDirectory can now act as a normal DirectoryResource is the pass-target is not set

## Jigsaw 2.0.1

A public release, made on January the 18th, 1999.

This release has been done to allow people to use the admin tool despite a JDK1.2 bug. So the fixed bug list is quite short!

### Bug Fixes

- Nasty kludge (creation of an useless object) to prevent bug in JDK1.2 classloader
- Garbage collection of old client connection redone.

## Jigsaw 2.0.0

A public release, made on December the 24th, 1998.

This is the final version of the 2.0 version of Jigsaw. This is a bugfix release of the 2.0beta3.

### New Features

- DELETE method implemented both on normal resources and on CVS resources. By default DELETE is not enabled
- New version of JigEdit (documentation pending)
- JDK1.2 fixes, it now compile gracefully with JDK1.2, which means that the usual warnings are thrown.

### Bug Fixes

- HttpCacheControl bug on "no-cache"
- Event model for ResourceFrame fixed
- Deleted variants of a Negotiated Frame are now removed from the list of variants
- PageCompile fix for \ under Windows and possible clash on class name.
- getCookies method for Servlets
- NegotiatedFrame throw a 404 if no variant are present (after a delete)
- Servlets called from SSI don't close the stream any longer.
- AdminReader and PlainRemoteResource are now URLEncoding the URIs .
- File system sensitivity check is now working during the lookup.
- First access on some resources may return an error as the parent was not created, now fixed.
- File Descriptor leak fixed on ugly configurations.

### Enhancements

Documentation is still evolving, and, as always, feedback welcome!

## Jigsaw 2.0beta3

A public release, made on October the 2nd, 1998.

This is a bug fix release of the previous 2.0beta2.

### New Features

- PageCompilation, allow you to do fancy server side includes
- The ZipIndexer allow you to serve files contained in a zip.
- Port of the LabelBureau
- ServletIndexer allow you to index servlet and remove the .class automatically
- ProxyDispatcher rules editor, and re-parsing of the rules.

### Bug Fixes

- Various bug fixes on servlets
- Properties editable directly in JigAdmin (mICP, proxy dispatcher, servlet)
- servlet classloader revamped.
- ProxyFrame lookup bug (inifnite redirect on itself) fixed
- Observable properties now works better.
- Jigadm gives now more feedback during save and such.
- Jigadm crash on latest JDK fixed.
- HTTP/1.1 fixes according to the latest draft-ietf-http-v11-spec-rev-05
- Jigsaw client now reuses connections the right way
- Tons of deadlocks and error recovery added in the internal handling of the cache of the proxy
- getRequestURI now works according to JSDK's api.
- fixes in the ZipDirectory

### Enhancements

- The documentation is evolving, but still, constructive comments are welcome!
- JigAdmin GUI gives more feedback. Designers, feel free to work on the GUI!

## Jigsaw 2.0beta2

A public release, made on July the 10th, 1998.

This is a bug fix release of the previous 2.0beta1.

### New Features

- Complete JSDK/2.0 servlet API support. It even includes session tracking.
- Some filters to demonstrate HTTP/1.1 interoperability like the UseProxyFilter.
- HourLimiterFilter, to restrict access during some time.
- Content-Type indexers to use all the Content-Type information given in a PUT.

### Bug Fixes

- Broken resources can now be deleted
- Many HTTP/1.1 fixes according to the draft-ietf-http-v11-spec-rev-03.
- Partial Content fixed (it was sending one byte too much)
- Missing Content-Length
- Content-MD5 to ensure end-to-end message integrity check.
- Events within frames and resources now fixed.
- Bug in SSI frame (event related).
- Many Cookies fixes, it is now implementing more things than before.
- Tracking of the "real" root resource.
- some more timeouts to solve the problem of blocked threads
- Fixes in jdbm, to fix the way the buckets were splitted in the cache.
- Virtual Hosting was broken when issuing redirects, now fixed with the creation of a specific resource: VitrualHostResouce.
- Range requests from cached resources now have the real value.

### Enhancements

- The documentation! It is not perfect yet, and comments are welcome to improve it.

## Jigsaw 2.0beta1

A public release, made on April the 8th, 1998.

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

A public release, made on January the 31th, 1998.

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
  - NegotiatedFrame
  - 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

A public release, made on January the 31th, 1998.

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

A public release, made on September the 1st, 1997.

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

A member specific release, made on August the 1st, 1997.

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

A public release made on February the 13th, 1997.

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

A member specific release, made on January the 13th, 1997.

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

A public release, made on October 7th, 1996.

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

A member specific release, made on September 7th, 1996.

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

The first member and public release, made on May, 1st 1996 and June

This was the first available Jigsaw release.