Changes from 1.11.0 to 1.11.1
-----------------------------

** Bug
    * [FELIX-4335] - PropertyDescription does not allow retrieving the current value of the represented property
    * [FELIX-4374] - iPOJO: ConcurrentModificationException in ProvidedService
    * [FELIX-4386] - Deadlock while creating composite instances programmatically

** Improvement
    * [FELIX-4292] - @Component 'propagation' attribute has wrong default value

Changes from 1.10.1 to 1.11.0
-----------------------------

** Bug
    * [FELIX-4115] - NPE in DependencyModel.getService() when @Bind method throws an exception
    * [FELIX-4132] - @Modified not working on Equinox
    * [FELIX-4138] - TypeDeclaration calls factory.dispose() even if it already has been disposed (externally)
    * [FELIX-4139] - package conflict with ipojo-annotations and ipojo-runtime
    * [FELIX-4164] - Instance / Component matching regression
    * [FELIX-4172] - Updated method called twice at the bundle start
    * [FELIX-4183] - Wrong Javadoc of TrackerCustomizer addingService method
    * [FELIX-4199] - The filter based service tracking interceptor should always be created
    * [FELIX-4200] - Only the last iPOJO Tracking interceptor is modifying the reference
    * [FELIX-4204] - Service Dependencies with a callback without a type attribute must be rejected
    * [FELIX-4207] - ipojo @Component with propagation set to true doesn't propagate properties
    * [FELIX-4218] - NPE with field annotated with both @Property and @ServiceProperty
    * [FELIX-4236] - Unvalued properties should be part of the instance's architecture
    * [FELIX-4247] - Memory leak with ServiceUsage and inner class (Listener style)
    * [FELIX-4248] - ServiceUsage ThreadLocal removal
    * [FELIX-4250] - Specification deduction broken when the method does not start with the 'bind' prefix
    * [FELIX-4251] - The @Bind annotation should use Class instead of String
    * [FELIX-4261] - NPE when an instance is declared without a configuration using the @ConfigurationTracker
    * [FELIX-4268] - Duplicated name errors always happen when there are 2 factories with the same name

** Improvement
    * [FELIX-4143] - Improve @Configuration management performances
    * [FELIX-4216] - Allow @Property without name in constructors
    * [FELIX-4228] - Improve dependency identification in log messages and exceptions
    * [FELIX-4232] - Service Dependency Interceptors should be part of the instance architecture
    * [FELIX-4252] - Make Extender's ThreadPool size configurable
    * [FELIX-4262] - QueueServices should be observable
    * [FELIX-4263] - iPOJO Core should use ranged imports
    * [FELIX-4264] - JobInfo should provide a way to identify the kind of task

** New Feature
    * [FELIX-4146] - Add getInstances and getInstanceNames in the Factory interface
    * [FELIX-4147] - Add getProvidedService in ProvidedServiceDescription and allow external service management
    * [FELIX-4215] - Extend manipulation metadata with argument names
    * [FELIX-4231] - Provide service binding interceptors
    * [FELIX-4265] - Provides a recorder for startup events
    * [FELIX-4267] - Define Apache Karaf features for iPOJO

** Task
    * [FELIX-3925] - Merge the temporal dependency handler within the service dependency handler
    * [FELIX-4133] - Add distribution creation in the iPOJO runtime build
    * [FELIX-4134] - Move integration-tests to the reactor
    * [FELIX-4136] - Document service dependency interceptors
    * [FELIX-4151] - Fix mistakes in the javadoc tags
    * [FELIX-4156] - Fix versions of maven plugins
    * [FELIX-4217] - Ensure compatibility between Aries Blueprint and iPOJO
    * [FELIX-4245] - Deadlock in Dependency
    * [FELIX-4270] - Bump iPOJO package version to 1.11.0

** Sub-task
    * [FELIX-4239] - Extend service dependency documentation with the 'exception' attribute.
    * [FELIX-4240] - Support the 'exception' attribute in service dependencies
    * [FELIX-4242] - Support the 'timeout' attribute in service dependencies
    * [FELIX-4243] - Define the dependency configuration matrix and improve error detection
    * [FELIX-4244] - Extend the service dependency documentation with the timeout attribute
    * [FELIX-4257] - Allow the dependency handler to track the entry and exit of inner class methods

Changes from 1.1.0 to 1.10.1
-----------------------------

Important: The iPOJO's gogo commands were moved to the iPOJO runtime project.

** Bug
    * [FELIX-4072] - onGet and onSet methods do not provide the reference on the pojo object
    * [FELIX-4076] - Useless locking on getRequiredHandler
    * [FELIX-4077] - Fix documentation urls in maven projects
    * [FELIX-4089] - Extender do not deactivate managed components when stopped
    * [FELIX-4096] - NPE when retrieve required and missing handler on a disposed factory
    * [FELIX-4105] - Factories not disposed when their bundle is leaving
    * [FELIX-4106] - Defensive service registration and update
    * [FELIX-4108] - Deadlock in the new extender
    * [FELIX-4109] - ComponentTypeDescription.addProperty() ignore immutable parameter
    * [FELIX-4113] - Factories not disposed when the extension provider is leaving
    * [FELIX-4114] - iPOJO ProvidedServiceDescription does not expose policy & CreationStrategy
    * [FELIX-4123] - Deadlock in new extender because of factory lock used in removedService
    * [FELIX-4127] - Configuration tracker bug when starting and stopping iPOJO successively
    * [FELIX-4129] - Cannot change the optionality of a dependency

** Improvement
    * [FELIX-1430] - Notification mechanism on bind/unbind events
    * [FELIX-4073] - PrimitiveHandler.attach(ComponentInstance) is final
    * [FELIX-4119] - Allow customization of DependencyHandler created Callbacks

** New Feature
    * [FELIX-4116] - Ability to listen for component service dependencies, providings, configuration properties, ...
    * [FELIX-4120] - Allow external entity to interact during the service resolution
    * [FELIX-4125] - Provide 'components' and 'component' commands
    * [FELIX-4130] - Allow retrieving the component instance from the instance description
    * [FELIX-4131] - Explicitly set configuration's location when the configuration is null

** Task
    * [FELIX-4092] - Move 'annotation' module from 'runtime' to 'manipulator' project
    * [FELIX-4103] - Skip deployment of it-tests
    * [FELIX-4104] - Do not run integration-tests in the default build
    * [FELIX-4124] - Move arch-gogo to runtime

Version 1.1.0
-------------
** Bug
    * [FELIX-3895] - iPOJO instance is not shown (with the "arch" commands) if constructor is failing

** Improvement
    * [FELIX-3860] - factories and instances iPOJO gogo commands should show the "public=false" instances/factories

** Task
    * [FELIX-3921] - Update pom to latest Felix's parent

Version 1.0.1
-------------
** Bug
    * [FELIX-2632] Arch Gogo is not compatible with the new gogo (0.6.1)

Version 1.0.0
-------------
    * Initial release
