Apache BSF 3 Beta3 Release Notes
--------------------------------

Apache BSF 3 is an open-source implementation of JSR-223, 
         "Scripting for the Java Platform".

*----------------------------------------------------------------------*
* BSF3 was developed according to the JSR-223 specs, but has not yet   *
* been tested via the JSR-223 TCK. BSF can therefore not be considered *
* a compatible implementation of JSR-223.                              *
*----------------------------------------------------------------------*

However, the implementation is believed to be complete.

* BSF-3.0 is not compatible with BSF-2.4 - the API is completely different.
* BSF-3.0 can be deployed and used Java 1.4+ - it does not require Java 1.6

Incomplete packages
-------------------
The org.apache.bsf.utils.http and org.apache.bsf.xml packages contain several classes.
These are not complete, and should not be relied on.
They are not needed in order to use the javax.script API.

Changes from previous releases
------------------------------

This 3.0-beta3 release is a maintenance release update to support the latest releases
of various script language engines.

The classes in the javax.script package have been overhauled to align the API, Javadoc and 
the behaviour with the JSR-223 spec, and several unit tests have been added. 

Some of these changes may cause problems for programs that have been written to the BSF 3.0
Javadoc rather than the JSR-223 spec.

javax.script class changes
==========================
AbstractScriptEngine - Javadoc only
Bindings - Javadoc only
Compilable - Javadoc only
CompiledScript - Javadoc only
Invocable - Javadoc only
ScriptContext - Javadoc only
ScriptEngine - Javadoc only
ScriptEngineFactory - Javadoc only

ScriptEngineManager - Javadoc, also protected fields made private:
- engineSpis
- nameAssociations
- extensionAssocitions
- mimeTypeAssociations
- globalscope
- now uses javax.imageio.spi.ServiceRegistry.lookupProviders() 
  rather than the Sun-specfic method sun.misc.Service.providers()
- put() method checks that key is non-null (NullPointerException)
  and non-empty (IllegalArgumentException)
- setBindings() throws IllegalArgumentException if the parameter is non-null
- the registerXXX() methods throw NullPointerException if any of their parameters is null
- the getEngineByXXX() methods throw NullPointerException if their parameter is null

ScriptException 
- all fields made private and final

SimpleBindings
- Javadoc
- protected field "map" made private & final
- methods now check keys to ensure that they are non-null, non-empty strings

SimpleScriptContext
- globalScope field now defaults to null
- reader, writer and errorWriter fields are now protected (rather than private)
  This is required by JSR-223
- name parameters are now checked to ensure that they are non-null, non-empty strings
- getBindings() throws IllegalArgumentException if the scope is invalid
- getScopes() now returns an unmodifiable List
