SPRING DYNAMIC MODULES FRAMEWORK CHANGELOG ========================================== http://www.springframework.org/osgi Changes in version 1.2.0 RC1 (2009-03-09) ----------------------------------------- General * various documentation improvements and fixes * upgraded to Felix 1.4.1 * upgraded to Knopflerfish 2.2.0 Package org.springframework.osgi.compendium * fixed OSGi service unregistration of listeners * fixed property injection to occur before the initializing method is invoked for beans * renamed to to better reflect the intent Package org.springframework.osgi.context * improved proxying of classes that are boot delegated outside the OSGi environment * error handling is delegated to the multicaster unless debug is on * improved type filtering for tracked services * improved AbstractOsgiBundleApplicationContext to republish the context OSGi service during #refresh calls Package org.springframework.osgi.extender * changed namespace handlers lifecycle to depend on bundle events STARTED/STOPPED instead of RESOLVED/UNRESOLVED * removed type compatibility check for custom namespace handlers as it caused false warnings in some cases * added extender configuration setting for controlling the default bundle service dependency wait time * added configurable event logger for the managed bundles Package org.springframework.osgi.io * improved OsgiBundleResource#getFile() file detection method * eliminated existance check on resolved files for OsgiBundleResource#getFile() Package org.springframework.osgi.mock * added option to set the MockBundle internal class loader * changed (slightly) the MockBundleContext default properties Package org.springframework.osgi.service * removed deprecated retryTimes parameter in OsgiServiceProxyFactoryBean * improved type filtering for tracked services * fixed visibility issue when invoking non-public proxied methods * improved waiting code to deal with spurious or accidental wakeups * fixed issue with OsgiServiceProxyFactoryBean that caused autowiring to fail in some cases * fixed dynamic iterator race condition triggered by fluctuating collection ends * improved logging for mandatory service importers to help diagnose missing required OSGi services Package org.springframework.osgi.test * improved FelixOsgiPlatform to support API changes in Felix 1.4.x * improved exception descriptions * fixed issue with imported classes in the default package Package org.springframework.osgi.util * fixed minor displaying problem in OsgiStringUtils Package org.springframework.osgi.web * fixed extender configuration race condition Changes in version 1.2.0 M2 (2008-11-24) ---------------------------------------- General * upgraded to Spring Framework 2.5.6 * raised required Spring Framework version to 2.5.6 * upgraded to Knopflerfish 2.1.1 * aligned bundle symbolic names to Spring convention (changed prefix org.springframework.bundle.osgi. to org.springframework.osgi. ) * added support for compendium namespace (managed-service, config-properties) * incremented version of spring-osgi.xsd and spring-osgi-compendium.xsd Package org.springframework.osgi.context * removed deprecated method AbstractDelegatedExecutionApplicationContext#getContextClassLoader * introduced dedicated PostProcessor interfaces aware of DelegatedExecutionOsgiBundleApplicationContext's multi-stage refresh Package org.springframework.osgi.extender * improved shutdown algorithm to deal with self-referenced and transitive service references Package org.springframework.osgi.io * improved existence check for bundle resources * fixed manifest headers parsing problem when dealing with nested whitespaces * fixed handling of optional required bundles * improved OsgiBundlePatternMatchingResolver to return ContextResources * changed OsgiBundlePatternMatchingResolver#findResources(String) visibility to protected Package org.springframework.osgi.service * refined single service proxies so that any waiting activity is interrupted on destruction * improved single service proxies to allow settings update at runtime * deprecated retryTimes parameter in OsgiServiceProxyFactoryBean * added a weak cache to prevent the creation of identical proxies when publishing scoped beans with managed context class loader * improved the proxy creation (when needed) for bean publishing Changes in version 1.2.0 M1 (2008-09-05) ---------------------------------------- General * added new annotation-based, Spring-MVC sample * removed petclinic sample (superseeded by simple-web-app and web-console samples) * improved sample wars packaging * improved framework behaviour when running in environments with Java 2 security enabled Package org.springframework.osgi.context * added reporting of Errors raised during delegated refresh in AbstractDelegatedExecutionApplicationContext Package org.springframework.osgi.extender * fixed bug related to enabling Spring-DM annotation depedency processing * improved annotation injection processing * improved extender configuration thread-safety * fixed potential race condition in asynchronous waiting for service dependencies Package org.springframework.osgi.io * improved existence check for bundle resources * improved jar space pattern matching when the root is not specified * fixed classpath pattern matching on certain resources when the default Bundle-ClassPath entry (.) is not specified Package org.springframework.osgi.service * changed the proxying classloader strategy to address package dependency visibility * fixed usage of incorrect class loader for imported services with client thread context class loader management * fixed intermittent deadlock that appeared in some cases betweem importers and exporters during shutdown Package org.springframework.osgi.web * improved web extender configuration thread-safety * improved web extender initialization by using an asynch model for cases with out-of-order dependencies Changes in version 1.1.1 (2008-07-29) ------------------------------------- Package org.springframework.osgi.io * fixed incorrect parsing of headers specifying version ranges * improved handling of Require-Bundle header (with regards to quotes and ranges) * fixed handling of required bundles that do not export packages * fixed premature failure when searching missing resources in multiple paths Package org.springframework.osgi.service * fixed potential NPE when comparing managed service references * improved thread safety for the managed service reference returned to the user Package org.springframework.osgi.mock * improved dependency between MockBundleContext and the bundle it returns * added OSGi R4.1 start/stop signatures to MockBundle * added OSGi R4.1 compareTo contract to MockServiceReference Package org.springframework.osgi.mock * improved local maven artifact search by adding groupId filtering Package org.springframework.osgi.web * DefaultContextPathStrategy allows "/" contexts to be specified through Web-ContextPath header * improved encoding of user defined context paths Changes in version 1.1.0 final (2008-07-04) ------------------------------------------- General * removed deprecated items * improved project Maven dependencies * distribution contains Jetty/Tomcat activator sources * upgraded to Knopflerfish 2.1.0 * improved simple-web-app sample Package org.springframework.osgi.extensions.annotation * added attribute for collection greedy-proxying Package org.springframework.osgi.extender * improved shutdown ordering algorithm to consider published ApplicationContext * fixed bug that prevented the shutdownTaskExecutor option from being used * removed support for extender configuration at META-INF/spring * fixed deadlock with failed contexts during shutdown * fixed reading of system property for enabling global annotation scanning * fixed incomplete initialization of annotation BeanPostProcessor Package org.springframework.osgi.service * removed deprecation from AbstractOsgiServiceImportFactoryBean to maintain backwards compatibility * removed package visible methods from AbstractOsgiServiceImportFactoryBean * removed deprecated exporter base class AbstractOsgiServiceExporter * fixed validation during export of non-singleton beans Package org.springframework.osgi.test * removed deprecated #getPlatformProperties() method from platforms classes Package org.springframework.osgi.web * removed support for extender configuration at META-INF/spring * improved war scanner Servlet 2.5 compliance (by considering as WARs only bundles with ".war" extension) * extended DefaultWarScanner scanning mechanism by considering as WARs bundles with WEB-INF/ entries Changes in version 1.1.0 RC1 (2008-06-24) ----------------------------------------- General * removed unused osgi-core.jar from bundle archetype * migrated some of the project dependencies to SpringSource Bundle Repository * removed internal package org.springframework.osgi.service.dependency (and associated dependencies) from the public API * extenders configuration file changed from META-INF/spring to META-INF/spring/extender to avoid confusion Package org.springframework.osgi.config * fixed localization problem in xml enumeration conversion * fixed listener double invocation caused by JDK 5 bridge methods Package org.springframework.osgi.context * refined AbstractOsgiBundleApplicationContext internal resource loader creation so that subclasses can override it * improved internal namespace service handling * improved AbstractOsgiBundleApplicationContext handling of ResourceLoader methods * introduced ContextClassLoaderProvider interface as a strategy for customizing the application context thread context class loader * removed ConfigurableOsgiBundleApplicationContext signature from OsgiBundleApplicationContextEvent * introduced new importer waiting event hierarchy (org.springframework.osgi.service.importer.event package) * improved handling of OSGi namespaces during shutdown * added exporter/importer transitive dependency tracking Package org.springframework.osgi.extender * added support.scanning package to allow custom locations to be used for 'Spring-powered' bundles * added setter for delegated application context creator in ConditionalApplicationContextCreator * improved ApplicationContextConfiguration internal structure * added type filtering behaviour inside the extender so that scanned bundles are Spring-compatible with the extender * removed internal usage of Thread.stop as it breaks the VM state * improved bundle shutdown by using a simple thread executor (rather then one thread per bundle model) to increase scalability * added BootstrappingDependencyEvent for notifying the pre-refresh dependency activities * changed extender configuration to META-INF/spring/extender to avoid confusion * introduced OsgiServiceDependencyFactory interface to allow third parties to add service dependencies required before an application context is refreshed * added support for local OsgiServiceDependencyFactory declared inside the analyzed application context Package org.springframework.osgi.io * improved OsgiBundleResource#getFile() method when dealing with resources in expanded bundles * OsgiBundleResource#lastModified() works even when the underlying bundle cannot be resolved to a File * added fallback logic to OsgiBundleResource#lastModified() if the underlying platform doesn't return a valid value Package org.springframework.osgi.service * added descriptive exception when invoking non-public methods on class proxies (caused by classes with final mehtods) * added ServiceProxyDestroyedException to indicate the illegal usage of a destroyed proxy * refined dynamic proxies (unary cardinality) to throw ServiceProxyDestroyedException instead of IllegalStateException * refined static proxies (multi cardinality) to throw ServiceProxyDestroyedException if used after being destroyed * introduced ServiceReferenceProxy interface (available through ImportedOsgiServiceProxy) for accessing the native service reference * OsgiServiceFactoryBean performs type check validation on given interfaces at startup * removed internal 'dependency' subpackage (and associated implementations) from the public API * improved significantly exporter/importer transitive dependency tracking for both single and multi service proxies * added default cardinality (1..X) when none is specified for both single and multiple service importers * deprecated importer base class AbstractOsgiServiceImportFactoryBean * deprecated exporter base class AbstractOsgiServiceExporter Package org.springframework.osgi.util * fixed internal handling of nested beans when discovering transitive dependencies of a bean * fixed internal handling of 'depends-on' beans when discovering transitive dependencies of a bean Package org.springframework.osgi.test * removed usage of PackageAdmin for resolving bundles * improved testing behaviour so that user-defined properties override the platform default ones * deprecated #getPlatformProperties() from existing platforms classes as it was confusing Package org.springframework.osgi.web * improved namespace detection strategy for OsgiBundleXmlWebApplicationContext * fixed problem with OsgiBundleXmlWebApplicationContext publishing null namespaces as OSGi properties * DefaultContextPathStrategy supports SpringSource Application Platform's Web-ContextPath header * introduced configuration property to web extender that allows deployed wars to be undeployed during shutdown * improved war undeployment by adding a timeout and better shutdown synchronization * improved handling of bundle locations given as URLs in DefaultContextPathStrategy * improved DefaultContextPathStrategy structure to allow better subclassing * changed extender configuration to META-INF/spring/extender to avoid confusion Changes in version 1.1.0 M2 (2008-04-29) ---------------------------------------- General * Spring 2.5.4+ required * upgraded to Felix 1.0.4 * refined the web deployer API * split web functionality into web and web-extender (symbolic name:org.springframework.bundle.osgi.web.extender) bundle * added integration with Spring MVC * added 'greedy-proxying' attribute to reference collections (spring-osgi.xsd) * reduced the number of class loader instances generated internally by Spring-DM * improved proxy infrastructure to avoid type leaks or the usage of spring-aop dynamic import Package org.springframework.osgi.config * removed usage of deprecated setSource method in AbstractReferenceDefinitionParser * added support for 'greedy-proxying' attribute Package org.springframework.osgi.context * added OSGi import for Spring property editors loaded reflectively * improved loading of property editors by using Spring-DM core bundle instead of the target bundle * AbstractOsgiBundleApplicationContext uses the raw bundle as the bean class loader to avoid class leaks * improved start up NamespaceHandlerResolver look up to avoid class incompatibility problems * added getContextClassLoader() method to AbstractDelegatedExecutionApplicationContext for pluggable thread context class loader strategy * improved AbstractOsgiBundleApplicationContext behaviour if the internal resource loader is not set * improved bundle class loader creation by using an internal cache * refined AbstractOsgiBundleApplicationContext to allow customization of the OSGi service properties * AbstractDelegatedExecutionApplicationContext rethrows all exceptions occuring during refresh Package org.springframework.osgi.service * refined weaving process for service importers so that knowledge of org.springframework.osgi package is not required * fixed potential infrastructure class leak through the thread context class loader management of imported services * improved proxy class loader creation by using an internal cache * improved thread-safety of the dynamic service collections * introduced InfrastructureProxy interface to imported OSGi service proxies Package org.springframework.osgi.extender * added OsgiApplicationContextCreator interface for handling the extender contexts creation * added OsgiBeanFactoryPostProcessor interface for customizing the contexts created by the extender * changed package of the internal, private bundle activator * added filtering by type for the discovered namespace handler resolvers to avoid usage of classes with incompatible wiring * improved listener list creation by reusing the extender bundle class loader * ApplicationContextConfiguration is now public * improved osgi service dependency logs by including the depedency declaring bean name Package org.springframework.osgi.io * extended OsgiBundleResource to implement ContextResource * fixed internal PackageAdminResolver parsing of Require-Bundle entries which specify versions Package org.springframework.osgi.service * refined OsgiServiceCollectionProxyFactoryBean to allow for configurable 'greedy-proxying' behaviour * changed service collection behaviour to not perform greedy proxying by default * improved the proxy weaving process by providing the aop infrastructure dependencies internally Package org.springframework.osgi.test * improved installed bundles resolving when PackageAdmin service is available Package org.springframework.osgi.util * BundleDelegatingClassLoader constructor visibility changed from private to protected * fixed sporadic exception occuring in DebugUtils when analyzing class loading errors * fixed parsing exception in DebugUtils when dealing with version ranges Package org.springframework.osgi.web * added OsgiWarDeploymentException to the deployment interfaces * added WarDeployment for bundles deployed by the WarDeployer * added WarDeploymentContext for accessing the properties associated with a war deployment and the associated BundleContext as a ServletContext attribute * improved cleanup in case of exceptions for both TomcatWarDeployer and JettyWarDeployer * added OsgiBundleXmlWebApplicationContext as an OSGi aware XML application context * refined TomcatDeployer to rely only on Service interface rather the EmbeddedServer class * fixed casting problem occurring during war undeployment * improved weaving process for imported web container services * refined DefaultContextPathStrategy to support folders and encode unsafe characters * OsgiBundleXmlWebApplicationContext provides the servlet namespace under 'org.springframework.context.web.namespace' property of its OSGi service * moved war deployers outside the extender package * WarLoaderListener and its related classes were moved into sprig-osgi-web-extender bundle * TomcatWarDeployer Service object can be set directly by the user * JettyWarDeployer Server object can be set directly by the user * changed package of the internal, private bundle activator Changes in version 1.1.0 M1 (2008-04-07) ----------------------------------------- General * Knopflerfish 2.0.4+ required * Felix 1.0.3+ required * introduced new module dedicated to web application running on OSGi platforms (successfully tested on Equinox 3.2.2 and the upcoming Felix 1.0.4) Package org.springframework.osgi.context * AbstractDelegatedExecutionApplicationContext calls "cancelRefresh" if exceptions appear during the delegeted refresh * introduced events specific to OSGi application contexts * introduced listener interface OsgiBundleApplicationContextListener for OSGi context events * added bundle version to the application context OSGi service Package org.springframework.osgi.extender * ContextLoaderListener automatically detects and notifies OSGi services registered as OsgiBundleApplicationContextListener classes * ContextLoaderListener can be configured externally through META-INF/spring/*.xml files from fragments attached to its bundle Package org.springframework.osgi.io * added support for classpath: and classpath*: patterns Package org.springframework.osgi.test * FelixPlatform uses the Felix distribution default system packages * KnopflerfishPlatform uses the KF distribution default system packages * AbstractOnTheFlyBundleCreatorTests can now generate imports based on all classes available in the jar not just the test hierarchy Package org.springframework.osgi.util * BundleDelegatingClassLoader exposes the internal Bundle through getBundle() method Changes in version 1.0.2 (2008-03-25) ------------------------------------- General * adjusted the manifests so internal packages are not exported and the versions for both spring and spring-osgi are present Package org.springframework.osgi.context * AbstractOsgiBundleApplicationContext registers the application context as an OSGi service using just the interfaces Package org.springframework.osgi.extender * raised service dependency waiting logging level to INFO (from DEBUG) Package org.springframework.osgi.util * BundleDelegatingClassLoader relies on default hashCode/equals methods to prevent class caching on bundle updates Package org.springframework.osgi.test * Installed bundles have the location set to the backing resource URL if possible, falling back to the description Changes in version 1.0.1 (2008-02-29) ------------------------------------- General * fixed nested Eclipse classpath entry in spring-osgi bundle archetype * added log4j.properties to spring-osgi bundle archetype * added OSGi integration test to the spring-osgi bundle archetype Package org.springframework.context.support * the namespace resolver mechanism first checks the local bundle classpath before using the extender namespace service Package org.springframework.osgi.context * fixed AbstractDelegatedExecutionApplicationContext to log errors that occur during the bean factory startup Package org.springframework.osgi.io * improved OsgiBundleResource handling of jars with missing archive entries for folders * improved OsgiBundleResourcePatternResolver performance when checking for jar resources * improved detection of relative OSGi URLs Package org.springframework.osgi.test * AbstractOsgiTest provides better error messages for bundle that fail to start * custom artifact locators can be used with AbstractDependencyManagerTests * removed all internal usage of system properties by the testing infrastructure * removed the use of serialization inside the testing framework * improved automatic manifest generation by parsing only the test parents that are available in the test bundle Changes in version 1.0 final (2008-01-25) ----------------------------------------- Package org.springframework.osgi.extensions.annotation * aligned bundle symbolic name with the rest of the bundles Package org.springframework.osgi.service * refined the service proxy returned by OsgiServiceProxyFactoryBean so it doesn't allow usage after being destroyed Package org.springframework.osgi.test * removed deprecated mispelled Platforms#KNOPFLEFISH constant * KnopflerfishPlatform exports automatically system packages for JDK 1.4/1.5 * refined test bundle creation to ignore duplicate META-INF/MANIFEST.MF * optimized test bundle creation by using no compression * AbstractOnTheFlyBundleCreatorTests automatic manifest generation does not add OSGi import entries for packages contained in the test bundle Package org.springframework.osgi.util * OsgiServiceUtils#getAllServices() deprecated method has been removed * OsgiServiceUtils#getService() deprecated method has been removed * default artifact locator picks up Maven 2 ~/.m2/settings.xml localRepository configuration * DebugUtils uses a degradable logger to properly report error messages when the logging implementation is misconfigured * BundleDelegatingClassLoader uses a degradable logger to properly report error messages when the logging implementation is misconfigured or the logging classes are not loaded yet Changes in version 1.0 RC2 (2008-01-11) --------------------------------------- General * removed deprecated methods * circular references between service importers, exporter and listeners are now supported * distributable bundles include Apache 2 license (META-INF/license.txt and META-INF/notice.txt) * all integration tests have been moved under integration-test/ folder * by default, the samples and integration tests are not executed (use Maven profiles to include them) * Maven 2.0.7 is required for properly building the project under JDK 1.6 * Knopflerfish 2.0.3 is required for correctly building and running Spring-DM Package org.springframework.osgi * updated spring-osgi.xsd Tservice type to properly reflect OsgiServiceFactoryBean package * updated spring-osgi.xsd list, set elements to properly reflect OsgiServiceCollectionFactoryBean package * updated bundles symbolic name to follow Spring bundle conventions (org.springframework.bundle.osgi instead of org.springframework.osgi.bundle) Package org.springframework.osgi.bundle * removed deprecated method BundleFactoryBean#setClassloader Package org.springframework.osgi.config * OsgiConfigDefinitionParser visibility changed from public to default * OsgiDefaultsDefinition visibility changed from public to default * ParserUtils visibility changed from public to default Package org.springframework.osgi.context * AbstractDelegatedExecutionApplicationContext throws clearer exception when the mandatory BundleContext is not set Package org.springframework.osgi.extender * META-INF/spring.handlers, META-INF/spring.schemas files are searched in the bundle space instead of the class space Package org.springframework.osgi.service * fixed double negation in AutoExport.DISABLED javadoc * removed deprecated method AbstractOsgiServiceImportFactoryBean#setInterface * service reference importers receive only one event (that of the best matching service) when registered/unregistered into the OSGi space rather then events of all existing services Package org.springframework.osgi.test * AbstractOnTheFlyBundleCreatorTests rethrows actual exception when creating/loading MANIFEST.MF * fixed mispelled KNOPFLERFISH constant in Platforms class (was KNOPFLEFISH) * default settings and properties in AbstractConfigurableBundleCreatorTests are now protected * AbstractOsgiTests does not implement any more, internal interface OsgiJUnitTest * AbstractConfigurableBundleCreatorTests exposes the default jar creation settings through #getDefaultSettings() * removed method AbstractDependencyManagerTests#injectArtifactLocator * AbstractDependencyManagerTests#getLocator visibility changed from public to protected * AbstractConfigurableBundleCreatorTests jar content pattern has been changed to **/* (from **/*.class, **/*.xml, **/*.properties) * waitOnContextCreation methods visibility changed from public to protected (to be consistent with the rest of the test methods) Package org.springframework.osgi.util * deprecated OsgiServiceUtils#getAllServices() * deprecated OsgiServiceUtils#getService()