JPF Roadmap
Here are some details about our projects progress towards the final 1.0 and 1.5 releases.
Version 0.1
Status: done
Release date: 2004-05-28
Initial public release.
Version 0.2
Status: done
Release date: 2004-09-01
Change log:
- Implemented extension and extension point validation.
- Documentation improvements (JavaDoc, DTD elements comments).
- Introduced public ID for the JPF DTD.
- Multiple changes to the API aimed at providing support for tools to instrument JPF.
- Multiple changes to the API aimed at separating the PluginRegistry and PluginManager roles.
- Introduced the PathResolver interface which "connects" the PluginRegistry and PluginManager. Now all resource locations are handled via URLs only.
Version 0.3
Status: done
Release date: 2004-11-05
Change log:
- Now JPF can use any JAXP compatible XML parser implementation.
- Initial implementation of JPF Tools ("Integrity Check", "Documentation Generator", "Plug-in archiver") with supporting Ant tasks.
- Non-significant API changes.
- Internal code improvements.
Version 0.4
Status: done
Release date: 2005-02-08
Change log:
- Added support for extension point "inheritance".
- Added a new type - "fixed" - to the extension point parameter definition declaration.
- Added new attribute - "custom-data" - to the extension point parameter definition declaration. It allows additionally customized behavior of some value types.
- Added static method "lookup" to PluginManager that allows an application to find instances of PluginManager that have already been created.
- Added possibility to disable/enable plug-ins during runtime.
- Added possibility to deactivate plug-ins during runtime.
- Added notification system to PluginManager.
- Removed internal code dependency on java.net.URI class. Now JPF should be able to run on JRE 1.3
- Added notification system to PluginRegistry that now allows all interested classes to be notified when registry changes are made.
- Added the ability to register/unregister plug-ins during runtime.
Version 0.5
Status: done
Release date: 2005-04-03
Change log:
- Added methods to PluginRegistry to retrieve a plug-in registration report separately from the integrity check report.
- "Documentation generator" tool is now based on JXP (Java scripted page) templates.
- Added methods to RegistryChangeData interface to help filter extensions by corresponding extension points.
- Implemented possibility to discover Framework configuration.
- PluginRegistry implementation has been reworked so that it is now uses SAX XML parser to process plug-in manifests. Implementation is compatible with JAXP 1.1 specification and based on the SAX 2 API.
- Greatly improved "hot deploy" function implementation.
- Deprecated and removed some unnecessary functions. The deprecated methods will be removed with at the time of the final 1.0 release. This was to greatly simplify some implementation aspects of PluginRegistry.
- Greatly improved the JPF demo application.
- Many non-significant internal code improvements.
Version 0.6
Status: done
Release date: 2005-06-24
Change log:
- Added utility methods to PluginRegistry and PluginDescriptor interfaces that simplify the checking of availability of various plug-in elements. Thanks to Lukasz Grabski.
- Implemented basic Framework localization. All locale sensitive strings are now externalized.
- Revised API exceptions policy and introduced a number of JPF specific exceptions.
- Added new type - "resource" - to extension point parameter definition.
- Added optional "version" attribute into "library" manifest tag and implemented corresponding method in the API.
- Significantly reworked and improved the plug-ins archive Tool.
- Now PluginManager uses the default (or no-arguments) constructor to instantiate the Plugin class. The old two-argument constructor is deprecated and will be removed before the 1.0 release. Thanks to Lukasz Grabski for an idea.
Version 0.7
Status: done
Release date: 2005-09-24
Change log:
- Introduced the PluginLocation interface that encapsulates info about plug-in manifests and plug-in data locations.
- Introduced the ObjectFactory class that is used to get instances of main Framework objects like PluginManager, PluginRegistry and PathResolver.
- The Framework API has been significantly restructured to make it much more flexible, consistent and extendible. To start using version 0.7 existing application should be modified. Most changes are related to moving classes between packages.
- Improved documentation tool - added printing of documentation notes for extension point parameter definitions. Thanks to Jeff Brown.
Version 0.8
Status: done
Release date: 2005-12-10
Change log:
- Introduced the UniqueIdentity interface into the registry API to mark all plug-in elements that may have a unique identifier (PluginDescriptor, PluginFragment, PluginPrerequisite, Library, ExtensionPoint and Extension).
- Introduced a special implementation of PathResolver that transparently makes shadow copies of plug-ins before resolving them to the application. Among other things this helps to avoid locking of JAR files by the application since this prevents "hot updating" of plug-ins. For implementation details and configuration options see the javadoc for the org.java.plugin.standard.ShadingPathResolver class.
- Introduced the "Single File Plug-in" Ant task to package plug-ins as ZIP files that may be run directly without further modification (part of JPF Tools).
- Introduced the "Plug-in Info" Ant task to read the plug-in ID and version from the manifest file into project properties (part of JPF Tools).
- Introduced the "JPF Boot" library to simplify running JPF based applications.
- Added Path and version info elements to jpf*.jar manifests. Version numbers are no longer included in JAR file names.
- Introduced utility class org.java.plugin.util.IoUtil to handle I/O, File and URL manipulations.
Version 0.9
Status: done
Release date: 2006-02-23
Change log:
- Added getMatch() method to PluginRegistry interface to get complete access to full information in manifest. Thanks to Sebastian Kopsan for the idea.
- Introduced utility method readManifestInfo() to PluginRegistry interface to read basic manifest info (plug-in ID, version and such).
- ShadingPathResolver now uses relative paths whenever that possible. This allows, for example, run JPF based application from different network locations without disturbing shadowed plug-ins.
- Minor internal improvements in JPF-Boot library.
- Now JPF-Boot library passes given command-line arguments to the application. To support this function, ApplicationPlugin API and JPF-Boot starting up arguments have been changed.
- JPF documentation was reviewed and updated by Michael Dawson (this work is in progress now).
- Added support for splash window in JPF Boot library. See additional configuration parameter in Boot class.
- Fixed bug in StandardPathResolver.resolvePath() method. Thanks to Sebastian Kopsan.
- Fixed bug in ExtensionPointImpl.updateConnectedExtensionsList() method. Thanks to Sebastian Kopsan.
Version 0.10
Status: done
Release date: 2006-05-03
Change log:
- Fixed error in StandardPluginClassLoader incorrectly handled optional prerequisites. Thanks to Peter van der Winkel.
- Added German translation of some documentation. Thanks to Frank Gernart.
- Introduced StandardPluginLocation class that implements PluginManager.PluginLocation interface and helps handling of plug-in files and folders. Thanks to Per Cederberg for an idea.
- Added probeParentLoaderLast configuration parameter to StandardPluginLifecycleHandler. This allows regulating of plug-in classloader delegation behavior. Thanks to Richard Bjarne (rjvduijn) for an idea.
- Improved logging support in plug-in classloader. Debug log statements are now more informative and allow easy find problems with classes and resources loading.
- Improved extension point / extension API and validating algorithms.
- Improved handling of plug-ins dependencies loop. This situation now should not raise an exception but simply put warning in log file.
- Refactored PathResolver to be interface instead of abstract class. Thanks to Per Cederberg.
- Fixed typo in PathResolver.getRegisteredConext() method name. Thanks to Per Cederberg.
- Improved handling of "resource" type extension parameters.
- Improved handling boot errors in JPF-Boot library.
- Improved handling of ZIP and JAR files to prevent their locking.
- Improved "Plug-in Info" Ant task to make it consistent with PluginRegistry.ManifestInfo interface. This change may break existing Ant scripts that uses jpf-info Ant task.
Version 0.11
Status: done
Release date: 2006-06-29
Change log:
- To the DefaultApplicationInitializer class from JPF-Boot library added possibility to provide lists of plug-ins to be included/excluded from application (white and black lists). Thanks to Jonathan Giles for an idea.
- All Ant tasks improved to be able to work with single file plug-ins (JAR'ed or ZIP'ed). Thanks to Prashant M. R.
- Added possibility of advanced control of application splash screen in JPF-Boot library. See additional configuration parameters and new org.java.plugin.boot.SplashHandler interface.
- main() method in JPF-Boot library is now refactored into several separate methods to allow more accurate controlling of application bootstrap procedure. Among other benefits, this allows to write unit tests for plug-ins and JPF based applications.
- Improved JPF-Boot library. Implemented more flexible boot configuration lookup procedure. Thanks to Chris Ward.
- Added "reverse-lookup" attribute to the "import" tag. Setting this attribute to "true" allows imported plug-in to see classes in depending plug-in. This flag helps creating plug-ins that can see classes in other plug-ins not depending on them. This feature is very similar to Eclipse' "buddy class loading" behavior. To make this new function available in your plug-in manifests, refer to new version of DTD (0.6).
- Improved error logging in StandardPluginManager and StandardPluginClassLoader. Thanks to Peter van der Winkel.
- Fixed handling JAR file URL's in StandardPluginClassLoader and StandardPathResolver. Thanks to Prashant M. R.
Version 0.12
Status: done
Release date: 2006-09-16
Change log:
- To JPF-Tools library added set of mock classes to simplify JPF usage in unit tests.
- Nice looking 3D-style JPF logo contributed by Johnny Grattan.
- Numerous minor improvements in JPF-Boot library.
- Added version update Ant task to JPF-Tools. Thanks to Jonathan Giles for an idea and initial implementation.
- Fixed error with caching of native libraries in StandardPluginClassLoader. Thanks to Sebastian Kopsan.
- Improvements in StandardPluginClassLoader preventing several deadlock situations.
- Added possibility to specify default value in extension point parameter definition.
- Added build instructions to the source code distribution package.
- Fixed bug #1538888.
- Splash image related improvements in JPF-Boot library.
Version 1.0
Status: done
Release date: 2007-01-08
Change log:
- Plug-in manifest DTD version number changed to 1.0 All references to previous versions are mapped to this one now.
- Previously deprecated API has been removed from code.
- Improved Splash Screen API in JPF-Boot library. It is now allows more flexible handling of splash screen behavior and configuration.
- ShadingPathResolver may now filter files to be shadowed. This is regulated by includes/excludes configuration parameters.
- Added black/white lists support to all batch plug-ins processing Ant tasks in JPF-Tools library.
Version 1.0.1
Status: done
Release date: 2007-03-04
Change log:
- Directory based Ant tasks in JPF-Tools library are now support nested
<fileset>
tags like many other standard Ant tasks. - Fixed problems with file names and URL's that contain non-ASCII characters.
- Improved handling of "reverse lookup" plug-in dependencies.
- Improved interpreting of "jpf.boot.config" property in JPF-Boot library. This configuration parameter may now contain FQN of a configuration file. Thanks to Eduardo M. Costa for an idea suggestion.
- Added
jpf-path
Ant task to JPF-Tools. It helps to automatically compose plug-in classpath for using in various tasks like java, javac... - Fixed potential deadlock situation in StandardPluginClassLoader. Thanks to Chris Ward for assistance.
Version 1.5.0
Status: done
Release date: 2007-03-04
This is port to Java 5 of JPF 1.0.1 Thanks to Jolkdarr for great help and initial port of JPF to Java 5.
Versions 1.0.2 and 1.5.1
Status: done
Release date: 2007-05-19
Change log:
- Maven POM files are now part of the JPF 1.5 distribution package. Thanks to Jens Köcke for contribution.
- Changed plug-in DTD to allow arrange of
<extension>
and<extension-point>
tags in mixed order. - Added
jpf-sort
Ant task to JPF-Tools. It helps to sort plug-ins in correct order to automate build process using tasks like<subant>
. - Added German translation of resources. Thanks to Stefan Rado for contribution.
- Significant improvements in classloader performance. See new configuration options in StandardPluginLifecycleHandler class. New performance optimizations are enabled by default.
- JPF version number is now available as system property. See PluginManager for details.