
This is a stable release of JSPWiki 2.4.  It contains a number of
bug fixes, which can be found from ChangeLog.


NEW FEATURES
============

* Authentication and authorization at page level using JAAS.

* New default template, with pluggable editors.

* New rendering engine, which is WAY faster than the old one (the old one
  is still included for backwards compatibility purposes).

* Loads and loads of under-the-hood changes.

* Atom Feed Format 1.0 support

* WIKIWYG editing using the WikiWizard from University of Heilbronn.

* Advanced SpamFilter which supports Akismet as well.

* (2.4.86) Ability to allow/disallow certain file types from being uploaded

* 2.4.100 fixes several stability and performance issues, as well as
  some long-standing bugs (like the null author issue, as well as
  randomly appearing ACLs.)
  
* 2.4.100 also adds a WatchDog class.  Please see the javadocs for
  that class for an explanation.
  
* 2.4.102 is a bug-fix release, resolving issues with premature logouts
  and missing parameters in UnusedPages and UndefinedPages plugins.

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

Upgrading from previous releases of 2.4:

* You should be able to just install the JSP files (top-level and
  the default template), and the set of JAR files.
  
* In addition, please check web.xml for any additional definitions
  that may have been added.

Upgrading from 2.x:

* 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.  If you have modified the default template, please
  rename your old template to "mymodifications" or something.
  You must NOT modify the default template anymore.

* 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.  Most specifically:
  
  * jspwiki.baseURL is now mandatory
  
  * jspwiki.workDir is a good idea to set
  
  * Set jspwiki.security=off, if you don't want JSPWiki to
  use its own security system.  If you do, head over
  to doc.jspwiki.org/2.4 for further instructions.

* You can copy your old filters.xml to WEB-INF/classes

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://doc.jspwiki.org/2.4/ for further instructions.



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:

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

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


KNOWN PROBLEMS
==============

* WebDav, static RSS generation and XML-RPC do not yet support the new 
  authentication/permissions scheme.  Therefore, if you have very
  sensitive data in your wiki, you might not want to enable these.
  
* Not all old plugins work.  Specifically, plugins from 2.2, which
  1) use com.ecyrd.jspwiki package, will fail because they are not
     signed with the same key as jspwiki.jar, and
  2) any plugin, which constructs new WikiPages will fail because
     of the constructor has been changed.
