History behind BSF
BSF began life in 1999 as a research project of Sanjiva Weerawarana at IBM's T.J. Watson Research Center. The initial intent had been to provide access to JavaBeans from scripting language environments (though there is nothing limiting access only to Java Beans). It was soon moved to IBM's AlphaWorks developer site, where significant interest (both internal and external to IBM) led to its being moved to IBM's developerWorks site, where BSF could operate as an open source project. During this time, significant development was done by Matt Duftler and Sam Ruby, and BSF was incorporated into both IBM products (Websphere) and Apache projects (Xalan). It was this interest on the part of the Apache Software Foundation that ultimately led to BSF's acceptance as a subproject of Jakarta in 2002.
During the process of moving BSF to Jakarta, development continued within IBM, with further improvements to BSF's integration with Jasper being made by John Shin and the addition of debugging support for the Javascript language (a team effort, resulting from the work of IBM researchers Olivier Gruber, Jason Crawford, and John Ponzo, and IBM software developers Chuck Murcko and Victor Orlikowski).
It is the current version, 2.3, that has been donated to Apache Software Foundation from IBM.
What is BSF?
Bean Scripting Framework (BSF) is a set of Java classes which provides scripting language support within Java applications, and access to Java objects and methods from scripting languages. It also provides access to Java objects and methods from supported scripting languages.
BSF allows one to write JSPs in languages other than Java while providing access to the Java class library. In addition, BSF permits any Java application to be implemented in part (or dynamically extended) by a language that is embedded within it. This is achieved by providing an API that permits calling scripting language engines from within Java, as well as an object registry that exposes Java objects to these scripting language engines.
BSF Architecture
The two primary components of BSF are the BSFManager and the BSFEngine.
The BSFManager handles all scripting execution engines running under its control, and maintains the object registry that permits scripts access to Java objects. By creating an instance of the BSFManager class, a Java application can gain access to scripting services.
The BSFEngine provides an interface that must be implemented for a language to be used by BSF. This interface provides an abstraction of the scripting language's capabilities that permits generic handling of script execution and object registration within the execution context of the scripting language engine.
An application can instantiate a single BSFManager, and execute several different scripting languages identically via the BSFEngine interface. Furthermore, all of the scripting languages handled by the BSFManager are aware of the objects registered with that BSFManager, and the execution state of those scripting languages is maintained for the lifetime of the BSFManager.
Read more at The Apache Jakarta Project