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.)
-
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.
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
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).
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.
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.
-
This was the first available Jigsaw release.
Anselm Baird-Smith
$Id: RelNotes.html,v 1.14 1997/02/06 22:44:46 abaird Exp $