Changes from 1.12.0 to 1.12.1
-----------------------------

** Bug
    * [FELIX-3836] - NPE when calling InstanceDescription.getDescription()
    * [FELIX-4565] - Occasional ArrayIndexOutOfBoundException in iPOJO's ProvidedServiceHandler
    * [FELIX-4646] - @Context(Context.Source.INSTANCE) does not inject bundle context
    * [FELIX-4713] - Error in ProvidedServiceHandler.checkProvidedService : only the first service is checked
    * [FELIX-4715] - instance bundle context injection does not works
    * [FELIX-4716] - Bundle org.apache.felix.ipojo physically contains OSGi API classes
    * [FELIX-4717] - Cannot use the stream API on injected collections
    * [FELIX-4728] - InstanceManager concurrency issue

Changes from 1.11.2 to 1.12.0
-----------------------------

** Bug
    * [FELIX-4464] - Wrong configuration admin package import / export clause
    * [FELIX-4488] - Attempt to create nullable object for non-interface service

** Improvement
    * [FELIX-4482] - Use scope=provided for OSGi APIs dependencies
    * [FELIX-4490] - IPOJO allows "instance.name" property to be an empty String

** New Feature
    * [FELIX-4476] - Java 8 Support

** Sub-task
    * [FELIX-4508] - Update to ASM 5.0.2
    * [FELIX-4509] - Change the frame computation strategy
    * [FELIX-4510] - Support lambda expression

Changes from 1.11.1 to 1.11.2
-----------------------------

** Bug
    * [FELIX-4229] - Provide a way to obtain the component's BundleContext (other than constructor injection)
    * [FELIX-4419] - Open access to InstanceDeclaration and TypeDeclaration
    * [FELIX-4432] - DefaultServiceRankingInterceptor holds duplicate dependencies
    * [FELIX-4448] - Invalid dynamism management when an interceptor implements both Tracking and Ranking interceptors
    * [FELIX-4449] - The ConfigurationListener list contains duplicates and fires update on unchanged configurations

** Improvement
    * [FELIX-3931] - Provide a handler to inject the bundle context
    * [FELIX-4160] - Create an Maven Parent POM for iPOJO

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
