Changes from the 1.10.0 to 1.10.1
---------------------------------

** Bug
    * [FELIX-4077] - Fix documentation urls in maven projects
    * [FELIX-4091] - Bnd iPOJO Plugin only browse classes annotated with some iPOJO annotations
    * [FELIX-4093] - Dependency is ignored if @Bind does not respect naming pattern
    * [FELIX-4110] - @ServiceProperty and @StaticServiceProperty are missing the immutable attribute

** Improvement
    * [FELIX-4094] - Recognize add/remove method naming pattern

** New Feature
    * [FELIX-4095] - Add CDI-like @Stereotype

** 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

Changes from 1.8.6 to 1.10.0
----------------------------

** Bug
    * [FELIX-3451] - "instance.name" attribute not recognized
    * [FELIX-3843] - ClassCastException when listing service properties of a non-ComponentFactory Factory service
    * [FELIX-3895] - iPOJO instance is not shown (with the "arch" commands) if constructor is failing
    * [FELIX-3896] - Null reference are injected with @Bind(optional=false) method on iPOJO components
    * [FELIX-3918] - iPOJO Logger cannot be dynamically configured on Equinox and KF
    * [FELIX-3919] - iPOJO Proxies strategy cannot be configured dynamically on Equinox and KF
    * [FELIX-3920] - Creation Strategy does not work on KF3
    * [FELIX-3974] - Properties cannot be set as immutable using annotations
    * [FELIX-3995] - Missing options in Bind annotation
    * [FELIX-4041] - Properties starting with . should not be propagated
    * [FELIX-4048] - @Requires handler does not fail when no specification can be found
    * [FELIX-4053] - Avoid @StaticServiceProperty to be used on classes
    * [FELIX-4054] - Use current factory version to generate instance name if required

** Improvement
    * [FELIX-3860] - factories and instances iPOJO gogo commands should show the "public=false" instances/factories
    * [FELIX-3932] - Allow dependency filter's to get context-source variables
    * [FELIX-4040] - Implement config admin support to handle binding location properly
    * [FELIX-4045] - Chain Exceptions when possible

** New Feature
    * [FELIX-4034] - Instance configuration DSL

** Task
    * [FELIX-3892] - Upgrade runtime codebase to Java 5
    * [FELIX-3903] - Migrate tests to pax exam 3
    * [FELIX-3921] - Update pom to latest Felix's parent
    * [FELIX-3948] - Define a new extender model
    * [FELIX-3978] - Check that we don't use java 6+ API

** Wish
    * [FELIX-3926] - Provide metadata for the Extender namespace

Changes from the 1.8.4 to 1.8.6
-------------------------------

** Bug
    * [FELIX-3742] - Implementing class fails to load unless super interface's (interface extended by implemented interface) package is imported.
    * [FELIX-3789] - Deadlock due to synchronization on INSTANCE_NAME
    * [FELIX-3819] - The export directive of iPOJO is wrong

Changes from the 1.8.2 to 1.8.4
--------------------------------

** Bug
    * [FELIX-3451] - "instance.name" attribute not recognized
    * [FELIX-3500] - InstanceManager concurrency issue: "A methodID cannot be associated with a method from the POJO class"
    * [FELIX-3501] - IPojo FactoryStateListener doesn't get notified while stopping factory
    * [FELIX-3545] - Memory leak when unregistering a component used by an aggregate dependency with an unbind callback
    * [FELIX-3548] - Concurrent access during startup
    * [FELIX-3567] - iPOJO Configuration Handler should not reuse the dictionary object from the configuration admin
    * [FELIX-3576] - iPOJO fails when using constructor injection and expecting BundleContext in ctor
    * [FELIX-3599] - Problem with 'subservice action="instantiate"' in ipojo composite
    * [FELIX-3621] - Two dimensional array as argument to a method in a component
    * [FELIX-3672] - Potential Concurrent Modification Exception when a bundle is stopped

** Improvement
    * [FELIX-3560] - Extensions to IPojo's Factory and ComponentInstance documentation for custom handlers

Changes from the 1.8.0 to 1.8.2
-------------------------------
** Improvement
    * [FELIX-3380] - minor javadoc corrections in @Temporal annotation

Changes from the 1.6.4 to 1.8.0
-------------------------------
** Bug
    * [FELIX-2568] - Rename Transactionnal to Transactional

** Improvement
    * [FELIX-1428] - Constructor injection of Configuration properties
    * [FELIX-2620] - Change iPojo annotation parameters to follow java naming conventions
    * [FELIX-2621] - Rename annotations to remove collisions
    * [FELIX-2622] - Support static service properties that are not mirrored into fields
    * [FELIX-2624] - Support multiple whiteboards using annotations
    * [FELIX-2630] - Rename @Component attributes to follow the java naming conventions
    * [FELIX-2631] - Rename @Publisher and @Subscriber attributes to follow the java naming conventions
    * [FELIX-2633] - Rename JMX annotations
    * [FELIX-2634] - Rename the @Publisher annotation into @Publishes annotation to avoid collision
    * [FELIX-2666] - Rename the temporal handler annotation to avoid collision
    * [FELIX-2742] - Constructor injection of service dependencies

Changes from the 1.6.2 to 1.6.4
-------------------------------
** Improvement
    * [FELIX-2420] - Enum support for @Property annotation
    * [FELIX-2461] - Allow specifying the targeted service interface in the @ServiceController

Changes from the 1.6.0 to 1.6.2
-------------------------------
** Improvement
    * [FELIX-2296] - Access to ServiceReference in iPOJO service.

Changes from the 1.4.0 to 1.6.0
-------------------------------
** Bug
    * [FELIX-1557] - Cosmetic change of the Bundle-Name and Bundle-SymbolicName in iPOJO annotations.

** Improvement
    * [FELIX-1426] - Service injection with Dynamic Proxies
    * [FELIX-1427] - Service injection with Smart Proxies
    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified

** New Feature
    * [FELIX-2132] - Provides a way to control service exposition from the implementation class

** Wish
    * [FELIX-1940] - Add @Instance annotation to declare instances without metadata.xml

Changes from 1.2.0 to 1.4.0
---------------------------
** Bug
    * [FELIX-1319] - Issue in the metadata overriding analysis in iPOJO annotations

** Improvement
    * Update parent pom


Changes from 1.0.0 to 1.2.0
---------------------------
** Improvement
    * [FELIX-825] - Provide annotation for iPojo JMX Handler
    * [FELIX-834] - Provide Annotations for the extender, whiteboard and event admin handlers

** Bug
    * [FELIX-867] - iPOJO @ServiceProperty can target method
    * [FELIX-868] - iPOJO @Component don't support factory methods


Changes from 0.8.0 to 1.0.0
---------------------------
** Improvement
    * [FELIX-627] - Temporal dependency annotation


Version 0.8.0
-------------
    * Initial release
