Release Notes - Felix - Version org.apache.felix.dependencymanager-r14
======================================================================

** List of bundles being part of the release:
    * org.apache.felix.dependencymanager; version=4.5.1
    * org.apache.felix.dependencymanager.shell; version=4.0.7
    * org.apache.felix.dependencymanager.runtime; version=4.0.6
    * org.apache.felix.dependencymanager.annotation; version=5.0.1
    * org.apache.felix.dependencymanager.lambda; version=1.2.0

** Wish
    * [FELIX-5991] - DM annotation scanner debug messages are logged in warn

Release Notes - Felix - Version org.apache.felix.dependencymanager-r13
======================================================================

** List of bundles being part of the release:
    * org.apache.felix.dependencymanager; version=4.5.0
    * org.apache.felix.dependencymanager.shell; version=4.0.7
    * org.apache.felix.dependencymanager.runtime; version=4.0.6
    * org.apache.felix.dependencymanager.annotation; version=5.0.0
    * org.apache.felix.dependencymanager.lambda; version=1.2.0


** Bug
    * [FELIX-5683] - getServiceProperties returns null instead of empty dictionary
    * [FELIX-5716] - Dead Lock in DM
    * [FELIX-5768] - DM Lambda stop callback not being called
    * [FELIX-5955] - Move changelog.txt to toplevel project dir
    * [FELIX-5956] - NPE when invoking a lifecycle runnable method from init method

** New Feature
    * [FELIX-5336] - Add support for prototype scope services in DM4


** Improvement
    * [FELIX-5967] - DM does not support java9+
    * [FELIX-5937] - Refactor DM bndtools/gradle project
    * [FELIX-5939] - DM annotations enhancements
    * [FELIX-5941] - DM APi enhancements
    * [FELIX-5957] - Check if a default implementation is used only on optional dependencies


** Task
    * [FELIX-5960] - Do not supply MD5 checksum

Release Notes - Felix - Version org.apache.felix.dependencymanager-r11
======================================================================

** List of bundles being part of the release:
    * org.apache.felix.dependencymanager; version=4.4.1
    * org.apache.felix.dependencymanager.shell; version=4.0.6
    * org.apache.felix.dependencymanager.runtime; version=4.0.5
    * org.apache.felix.dependencymanager.annotation; version=4.2.1
    * org.apache.felix.dependencymanager.lambda; version=1.1.1

** Bug
    * [FELIX-5630] - NullObject is created for a required dependency if the component is removed and added again to the dependency manager
    * [FELIX-5636] - Component of aspect service does not have any service properties anymore
    * [FELIX-5657] - DM released sources can't be rebuilt

** Improvement
    * [FELIX-5619] - MultiProperyFilterIndex memory consumption
    * [FELIX-5623] - Improve performance of ComponentImpl.getName method
    * [FELIX-5650] - Support latest version of Gogo
    * [FELIX-5653] - Simplify DM-Lambda samples
    * [FELIX-5658] - Include poms in dm artifacts

Release Notes - Felix - Version org.apache.felix.dependencymanager-r9
======================================================================

** List of bundles being part of the release:
    * org.apache.felix.dependencymanager; version=4.4.0
    * org.apache.felix.dependencymanager.shell; version=4.0.5
    * org.apache.felix.dependencymanager.runtime; version=4.0.4
    * org.apache.felix.dependencymanager.annotation; version=4.2.0
    * org.apache.felix.dependencymanager.lambda; version=1.1.0

** Bug
    * [FELIX-5236] - Single @Property annotation on a type doesn't work
    * [FELIX-5242] - Configuration updates may be missed when the component is restarting
    * [FELIX-5244] - Can't inject service using a method ref on a parent class method.
    * [FELIX-5245] - Typo in error logged when a component callback is not found.
    * [FELIX-5268] - Service not unregistered while bundle is starting
    * [FELIX-5273] - Wrong log when a callback is not found from component instance(s)
    * [FELIX-5274] - remove callback fails after manually removing dynamic dependencies
    * [FELIX-5399] - Unable to define default map or list config types
    * [FELIX-5400] - Can't override default configuration type list value using an empty list
    * [FELIX-5401] - Can't override default configuration type map value using an empty map
    * [FELIX-5402] - Factory configuration adapter ignores factory method
    * [FELIX-5411] - When you stop a component, the service references are not ungotten.
    * [FELIX-5426] - Remove callbacks aren't called for optional dependencies in a "circular" dependency scenario
    * [FELIX-5428] - Dependency events set not cleared when component is removed
    * [FELIX-5429] - Aspect swap callback sometimes not called on optional dependencies
    * [FELIX-5469] - Methodcache system size property is not used
    * [FELIX-5471] - Ensure that unbound services are always handled synchronously
    * [FELIX-5517] - @Inject annotation ignored when applied on ServiceRegistration
    * [FELIX-5519] - services are not ungotten when swapped by an aspect
    * [FELIX-5523] - required dependencies added to a started adapter (or aspect) are not injected




** Improvement
    * [FELIX-5228] - Upgrade DM With latest release of BndTools
    * [FELIX-5237] - Configurable invocation handler should use default method values
    * [FELIX-5346] - Start annotation not propagated to sub classes
    * [FELIX-5355] - Allow to use properties having dots with configuration proxies
    * [FELIX-5403] - Improve the Javadoc for org.apache.felix.dm.ComponentStateListener
    * [FELIX-5405] - Do not have org.apache.felix.dm.Logger invoke toString() of message parameters when enabled log level is not high enough 
    * [FELIX-5406] - DM lambda fluent service properties don't support dots
    * [FELIX-5407] - DM annotation plugin generates temp log files even if logging is disabled
    * [FELIX-5408] - Parallel DM should not stop components asynchronously
    * [FELIX-5467] - MultiPropertyFilterIndex is unusable when a service reference contains a lot of values for one key
    * [FELIX-5499] - Remove usage of json.org from dependency manager
    * [FELIX-5515] - Upgrade DM to OSGi R6 API
    * [FELIX-5516] - Allow to not dereference services internally
    * [FELIX-5518] - Remove all eclipse warnings in DM code
    * [FELIX-5520] - ComponentStateListener not supported in DM lambda
    * [FELIX-5521] - add more callback method signature in DM lambda service dependency callbacks
    * [FELIX-5522] - Refactor aspect service implementation
    * [FELIX-5524] - add more signatures for aspect swap callbacks
    * [FELIX-5526] - Allow to use generic custom DM dependencies when using dm lambda.
    * [FELIX-5531] - Document dependency callback signatures
    * [FELIX-5532] - Swap callback is missing in @ServiceDependency annotation



** Task
    * [FELIX-5533] - Fix a semantic versioning issue when releasing dependency manager

Release Notes - Felix - Version org.apache.felix.dependencymanager-r8
======================================================================

** Bug
    * [FELIX-5146] - Service adapters turn on autoconf even if callbacks are used
    * [FELIX-5147] - Bundle Adapter auto configures class fields even if callbacks are used
    * [FELIX-5153] - DM4 calls stop before ungetService() on ServiceFactory components
    * [FELIX-5155] - Adapter/Aspect extra service dependencies injected twice if using callback instance
    * [FELIX-5178] - Make some component parameters as volatile
    * [FELIX-5181] - Only log info/debug if dm annotation log parameter is enabled
    * [FELIX-5187] - No errog log when configuration dependency callback is not found
    * [FELIX-5188] - No error log when a factory pid adapter update callback is not found
    * [FELIX-5192] - ConfigurationDependency race condition when component is stopped
    * [FELIX-5193] - Factory Pid Adapter race condition when component is stopped
    * [FELIX-5200] - Factory configuration adapter not restarted


** New Feature
    * [FELIX-4689] - Create a more fluent syntax for the dependency manager builder


** Improvement
    * [FELIX-5126] - Build DM using Java 8
    * [FELIX-5164] - Add support for callback instance in Aspects
    * [FELIX-5177] - Support injecting configuration proxies
    * [FELIX-5180] - Support for Java8 Repeatable Properties in DM annotations.
    * [FELIX-5182] - Cleanup DM samples
    * [FELIX-5201] - Improve how components are displayed with gogo shell


Release Notes - Felix - Version org.apache.felix.dependencymanager-r6
======================================================================

** Bug
    * [FELIX-4974] - DM filter indices not enabled if the dependencymanager bundle is started first
    * [FELIX-5045] - DM Optional callbacks may sometimes be invoked before start callback
    * [FELIX-5046] - Gradle wrapper is not included in DM source release




** Improvement
    * [FELIX-4921] - Ensure binary equality of the same bundle between successive DM releases
    * [FELIX-4922] - Simplify DM changelog management 
    * [FELIX-5054] - Clean-up instance bound dependencies when component is destroyed
    * [FELIX-5055] - Upgrade DM to BndTools 3.0.0
    * [FELIX-5104] - Call a conf dependency callback Instance with an instantiated component
    * [FELIX-5113] - Remove useless wrong test in ConfigurationDependencyImpl
    * [FELIX-5114] - Schedule configuration update in Component executor synchronously

Release Notes - Felix - Version  org.apache.felix.dependencymanager-r5:
======================================================================

Release Notes - Felix - Version   org.apache.felix.dependencymanager-r5



** Bug
    * [FELIX-4907] - ConfigurationDependency calls updated(null) when component is stopped.
    * [FELIX-4910] - ComponentExecutorFactory does not allow to return null from getExecutorFor method.
    * [FELIX-4913] - DM Optional callbacks may sometimes be invoked twice




** Improvement
    * [FELIX-4876] - DM Annotations bnd plugin compatibility with Bndtools 2.4.1 / 3.0.0 versions
    * [FELIX-4877] - DM Annotations should detect service type using more method signatures.
    * [FELIX-4915] - Skip unecessary manifest headers in DM bnd file

Release Notes - Felix - Version org.apache.felix.dependencymanager-r3:
=====================================================================

** Bug
    * [FELIX-4858] - DependencyManager: missing createCopy method in timed service dependency
    * [FELIX-4869] - Callbacks not invoked for dependencies that are added after the component is initialized




** Improvement
    * [FELIX-4614] - Factory create() method should have access to the component definition
    * [FELIX-4873] - Enhance DM API to get missing and circular dependencies
    * [FELIX-4878] - Support more signatures for Dependency callbacks
    * [FELIX-4880] - Missing callback instance support for some adapters
    * [FELIX-4889] - Refactor dm shell command to use the org.apache.dm.diagnostics api


** Wish
    * [FELIX-4875] - Update DM integration test with latest ConfigAdmin


Release Notes - Felix - Version org.apache.felix.dependencymanager-r2:
=====================================================================

** Bug
    * [FELIX-4832] - ClassCastException with autoconfig Iterable fields
    * [FELIX-4833] - Revisit some javadocs in the DM annotations.

Release Notes - Felix - Version org.apache.felix.dependencymanager-r1:
======================================================================

** Bug
    * [FELIX-4304] - DependencyManager ComponentImpl should not assume all service properties are stored in a Hashtable
    * [FELIX-4394] - Race problems in DependencyManager Configuration Dependency
    * [FELIX-4588] - createCopy method ConfigurationDependency produces a malfunctioning clone
    * [FELIX-4594] - Propagation from dependencies overwrites service properties
    * [FELIX-4598] - BundleDependency can effectively track only one bundle
    * [FELIX-4602] - TemporalServiceDependency does not properly propagate RuntimeExceptions
    * [FELIX-4709] - Incorrect Named Dependencies are binded to the Service Instance


** New Feature
    * [FELIX-4426] - Allow DM to manage collections of services
    * [FELIX-4807] - New thread model for Dependency Manager


** Improvement
    * [FELIX-3914] - Log unsuccessful field injections
    * [FELIX-4158] - ComponentDeclaration should give access to component information
    * [FELIX-4667] - "top" command for the Dependency Manager Shell
    * [FELIX-4672] - Allow callbacks to third party instance for adapters
    * [FELIX-4673] - Log any error thrown when trying to create a null object.
    * [FELIX-4777] - Dynamic initialization time configuration of @ConfigurationDependency 
    * [FELIX-4805] - Deprecate DM annotation metatypes


** Wish
    * [FELIX-2706] - Support callback delegation for Configuration Dependecies
    * [FELIX-4600] - Cherrypicking of propagated properties
    * [FELIX-4676] - Add Provide-Capability for DependencyManager Runtime bundle
    * [FELIX-4680] - Add more DM ServiceDependency callback signatures
    * [FELIX-4683] - Allow to configure the DependencyManager shell scope
    * [FELIX-4684] - Replace DependencyManager Runtime "factorySet" by a cleaner API
    * [FELIX-4816] - bndtools-ify Dependency Manager
    * [FELIX-4818] - New release process for Dependency Manager

