
This is a BETA release of JSPWiki v2.2  

Major new things since the last stable release:

* Plenty o' bugfixes
* Enabled Lucene query language (very powerful)
* Attachment searching (names are always searched, and if the file is
  of a text file type, it gets also indexed)



Major changes since the 2.0 series are:

- Much simplified templating (see WikiTemplates)

- Wiki Forms

- Page Filters (including SpamFilter)

- Muchos enhanced WeblogPlugin

- Style support using the %%-directive

- Easier templates

- The default template now validates as XHTML 1.0 Transitional

- Page variables (see SET-directive), also accessible on pages

- Caching attachment provider integrated

- OSCache integration

- Printer-friendly stylesheet for the default template

- Multiple Wikis with a single WAR-file -support.

- In-page hyperlinks and TableOfContents

- Multiply nested links now work

- Much faster startup (after the first one)

- Short URLs (/wiki/PageName) with ShortURLConstructor


UPGRADE NOTES
=============

Upgrading from 2.0:

* Please reinstall in a new directory.  Then move your modified
  templates into the new templates/ -directory.  You MUST
  have the default template in place, else things might not
  work.
* Replace jspwiki.properties with your old configuration file.
  It should run unmodified, though you might want to go through
  the new file to see new options.

Upgrading from earlier installations:

* Please make a complete reinstall.  Your wiki pages will still be
  compatible, and the configuration for the most part.

Please visit http://www.jspwiki.org/Wiki.jsp?page=Release2.2Discussion
for further information.


KNOWN MAJOR ISSUES
==================

* Documentation needs cleanup; parts of it are out of date, etc.


EXPERIMENTAL FEATURES
=====================

There are some features in this release which could mostly be considered
experimental at best.  The following ones are known to work only 
partially:

* Atom support.  We can give out feeds in Atom 0.3, but it's not really
  tested properly.  There's also preliminary APP support, but it does 
  not work.
  
* WYSIWYG editing.  You need to install FCK by yourself.  It sort of
  works, but not quite.
  
* Install.jsp.  It's still a bit experimental, though it should work...

* WebDAV support.  This is known to be broken on pretty many levels...

* XHTML -> WikiMarkup translation.  Spotty, but should work for the most
  part.
  

NOTE ABOUT AUTHENTICATION
=========================

This JSPWiki version includes an unsupported version of Authorization
and Authentication.  AAA was supposed to be the major feature of the
2.2 release, but unfortunately it turned out that the solution chosen
was crappy and the coder (me) did not know what he was doing.  This
dragged the work for the 2.2 release behind for many months, as I was
not really interested in doing it.  So I decided to discard the entire
solution and settle for something simpler.  This work is still
ongoing, and a new solution is being drafted.

The old auth system is still in place, but it is completely deprecated
and largely undocumented.  You may use it if you want, but please do
not report any bugs regarding it.  You can enable it by putting
"jspwiki.auth.useOldAuth=true" in your jspwiki.properties.
