<--

Copyright 2006 The Apache Software Foundation.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

-->


=========================
BSF 2.4, RC 1, 2006-09-09
=========================

=========================================================
Release notes for BSF 2.4 (http://jakarta.apache.org/bsf)
=========================================================


About the "Bean Scripting Framework (BSF)"
==========================================

BSF allows Java programmers to easily deploy scripts written in many scripting
(like) languages like JavaScript, JLog (PROLOG) Jython, Rexx, and use even XSLT
with the same simple, but powerful BSF APIs.

It is possible to supply arguments and retrieve result values from the scripts,
as well as sharing Java objects among each other (and among all scripts that are
deployed with the help of the same BSF manager).

BSF itself can be deployed starting with Java version 1.3, but some scripting
languages may need newer versions of Java.

This release is meant to be fully compatible with any previous version of BSF.


Changes to previous release candidate
=====================================

- Bug fixes, e.g.

       - datatype conversion now encompasses the oversighted primitive datatype
         "char" into account (class 'TypeConvertor.java',
         'TypeConvertorRegistry.java')

       - dynamic event adapter creation now succeeds

       - fixed a few spelling errors in the code

- Enhancements, changes, e.g.

       - can be used as an extension package to Java by placing it into
         "jre/lib/ext" [using the thread's context classloader, ie. the result
         of 'Thread.currentThread().getContextClassLoader()']

       - removed experimental 'DebugLog' class, superceded by commons-logging
         and log4j

       - removed 'org.apache.bsf.engines.activescript.*', as it is not
         supported anymore (stems from the original IBM codebase, but would
         need native Windows code to bridge OLE/ActiveX)

       - removed 'org.apache.bsf.engines.jpython', as it is superceded by
         the newer 'org.apache.bsf.engines.jython'

       - 'org.apache.bsf.BSFMain.java': new method
         "public String getVersion()", returns string in the form
         'abb.yyyymmdd', where 'a' is major number, 'bb' minor number,
         'yyyy' four digit year, 'mm' two digit month, 'dd' two digit day;
         e.g. '240.20060909' stands for: BSF version 2.4 as of 2006-09-09

       - new class 'org.apache.bsf.utils.BSFEventProcessorReturningEventInfos'

       - 'org.apache.bsf.utils.EngineUtils.java': added the method
         'addEventListenerReturningEventInfos(...)'


People who have contributed to this release one way or the other
(order by first name)
================================================================

       Don Schwarz
       Henning P. Schmiedehausen
       Igor Bukanov
       Kev Jackson
       Nandika Jayawardana
       Nilupa Bandara
       Rony G. Flatscher
       Sanjiva Weerawarana
       Sanka Samaranayke
       Thomas Klaeger (Kl&auml;ger)
       Victor J. Orlikowski 