Changes from 6.0.3 to 6.0.4
---------------------------

** Bug
    * [FELIX-6178] - org.osgi.framework.Bundle#getServicesInUse returns services with usage count = 0
    * [FELIX-6222] - Support for os.name Capability is missing for Windows Server 2019
    * [FELIX-6297] - unclosed InputStream on Bundle.start
    * [FELIX-6318] - Tiny thread-safety bug in BundleWiringImpl
    * [FELIX-6326] - Cannot read bundled resources with hash in the filename
    * [FELIX-6331] - Race condition in unget service from service factory

Changes from 6.0.2 to 6.0.3
---------------------------

** Bug
    * [FELIX-6067] - ClassLoading and getService can fail unpredictably due to interrupts
    * [FELIX-6092] - Missing Framework Capabilities

Changes from 6.0.1 to 6.0.2
---------------------------

** Bug
    * [FELIX-5917] - [Fwk security] Fix BundlePermission check for fragments
    * [FELIX-5942] - Felix Framework freezes when resolving classes in parallel with Java 10
    * [FELIX-5978] - Felix framework unable to retrieve custom URL handlers when security is on

** Improvement
    * [FELIX-5912] - Handle empty package definitions in system package definitions more gracefully
    * [FELIX-5914] - Workaround SecurityManager.getClassContext returning null on Android
    * [FELIX-6035] - Allow urlhandlers to create urls for jrt protocol without an add-opens

Changes from 6.0.0 to 6.0.1
---------------------------

** Bug
    * [FELIX-5886] - Error logged by org.apache.felix.framework.BundleWiringImpl.getClassByDelegation
    * [FELIX-5889] - Extension Bundle capabilities do not index correctly

Changes from 5.6.10 to 6.0.0
----------------------------

** New Feature
    * [FELIX-5791] - Support OSGi R7 framework features

** Sub-task
    * [FELIX-5792] - Implement java.* import and exports
    * [FELIX-5796] - Implement multi-release jar support
    * [FELIX-5797] - Implement extension bundle imports
    * [FELIX-5798] - Implement FrameworkWiringDTO
    * [FELIX-5811] - Prevent bundles from providing ee capabilities

** Bug
    * [FELIX-5754] - error in default.properties contained in jar org.apache.felix.framework-5.6.10.jar
    * [FELIX-5759] - StackOverflowError thrown during URL construction
    * [FELIX-5799] - Fix bugs in Service Factory unregister callback handling
    * [FELIX-5807] - Do not hide the cause when a problem occurs in URLHandlersStreamHandlerProxy
    * [FELIX-5810] - URLHandlers ContentHandler fails to load sun.net.www.content on Java 9
    * [FELIX-5864] - Missing uses constraints for OSGi spec packages
    * [FELIX-5870] - Handle relative path elements in bundle classpath
    * [FELIX-5874] - URLHandlersContentHandlerProxy.getBuiltIn always returns null
    * [FELIX-5875] - org.osgi.framework.os.name et.al. are not obeyed

** Improvement
    * [FELIX-5800] - Improve calculation of available system bundle exports
    * [FELIX-5803] - Auto refresh uninstalled bundle graph if possible
    * [FELIX-5804] - Improve framework lookup for bundle protocol urls
    * [FELIX-5808] - Clean-up bundlecache manifest parsing and entry reading
    * [FELIX-5809] - Capture context for bundle: protocol urls if possible
    * [FELIX-5816] - Switch to java.util.Random for startup performance
    * [FELIX-5818] - Only resolve fragments that are required on dynamic import
    * [FELIX-5823] - Remove support for old multi-file bundle cache format.
    * [FELIX-5824] - Use VersionRange from OSGi and remove our own impl.
    * [FELIX-5825] - Use ReentrantLock inside WeakZipFileFactory/WeakZipFile and use less synchronized.
    * [FELIX-5826] - Remove FelixBundleContext interface
    * [FELIX-5827] - Use less synchronized in the BundleWiring and BundleClassloader
    * [FELIX-5828] - Remove android support.
    * [FELIX-5829] - Delete ImmutableMap/List
    * [FELIX-5877] - Add missing org.w3c.dom exports for java < 9

Changes from 5.6.8 to 5.6.10
----------------------------

** Bug
    * [FELIX-5707] - Bundle-NativeCode header should not require osname and processor parameter to be present to match
    * [FELIX-5709] - PackageAdmin getHosts should only return hosts required via HOST_NAMESPACE.

** Improvement
    * [FELIX-5710] - Improve Java9 support

** Sub-task
    * [FELIX-5717] - Define proper package lists for java9 modules
    * [FELIX-5718] - Autodetect modules available
    * [FELIX-5719] - Extend property substitution to user defined FRAMEWORK_SYSTEMPACKAGES_EXTRA and FRAMEWORK_SYSTEMPACKAGES properties for java9 module expansion.
    * [FELIX-5720] - Use PlatformClassLoader as boot classloader on java9
    * [FELIX-5721] - Make javafx packages available by default on java9 if they are there
    * [FELIX-5725] - Cache generated reflection classes for jdk.internal.reflect like we do for sun.reflect.
    * [FELIX-5727] - Allow extension bundles when loaded with the PlattformClassLoader
    * [FELIX-5742] - Provide java9 system bundle exports for jpms jre

Changes from 5.6.6 to 5.6.8
---------------------------

** Bug
    * [FELIX-5672] - Cannot launch Felix on Raspberry Pi: problem with normalizeOSVersion()
    * [FELIX-5676] - Uninstall should throw an exception if called while the bundle is starting or stopping

** Improvement
    * [FELIX-5665] - High CPU usage on sun.reflect.Generated* class loads by log4j 

Changes from 5.6.4 to 5.6.6
---------------------------

** Bug
    * [FELIX-5646] - Missing EE and system packages for Java 9
    * [FELIX-5649] - Refreshing a fragment causes the framework to be restarted
    * [FELIX-5652] - Felix Framework hangs on shutdown

Changes from 5.6.2 to 5.6.4
---------------------------

** Bug
    * [FELIX-4695] - Normalize os.version system property in framework properties
    * [FELIX-4837] - Workaround for JNLPClassLoader in ShutdownHook 
    * [FELIX-5553] - Cannot load native libraries in Windows Server 2016 with the name win32
    * [FELIX-5573] - Don't return null but throw a CNFE from BundleClassloader.loadclass and Bundle.loadClass on recursive class loads.
    * [FELIX-5604] - Normalize require capabilites the same way we normalize provide capabilites
    * [FELIX-5605] - Update to latest resolver 1.14.0

** Improvement
    * [FELIX-4696] - Improve native OS version sanitation
    * [FELIX-5574] - When detecting an unknow Windows OS name, provides a suitable default value for org.osgi.framework.os.name
    * [FELIX-5589] - reduce memory usage of BundleRequirementImpl / BundleCapabilityImpl
    * [FELIX-5593] - Specify ARM processor Endianness

Changes from 5.6.1 to 5.6.2
---------------------------

** Bug
    * [FELIX-5184] - Regression: Native JNA bundle cannot be installed on Windows Server 2012
    * [FELIX-5485] - ServiceReference#getUsingBundles() returns usages with 0 count
    * [FELIX-5544] - Don't take implicit boot delegation into account on service assignability check

** Improvement
    * [FELIX-5138] - Felix should log underlying exception on failed bundle update
    * [FELIX-5513] - Remove code for pre java 5
    * [FELIX-5528] - Improve handing of bundle updates concurrent to other lifecycle changes
    * [FELIX-5547] - Implement FelixResolveContext.getSubstitutionWires(Wiring)
    * Update to latest resolver 1.12.0

** New Feature
    * [FELIX-5329] - [Framework] Fix Java 8 packages and add Java 9 packages in default.properties

Changes from 5.6.0 to 5.6.1
---------------------------

** Bug
    * [FELIX-5363] - new URL(string) suffers under concurrency
    * [FELIX-5372] - BundleWiring#getClassLoader should return null for fragments
    * [FELIX-5384] - EventDispatcher#createWhitelistFromHooks fails under security

** Improvement
    * [FELIX-5247] - Reduce number of threads created by Resolver during a startup of OSGi-based applications

Changes from 5.4.0 to 5.6.0
---------------------------

** Improvement
    * Update to latest resolver 1.10.0

** Bug
    * [FELIX-4871] - The felix framework logger can't be used with reflection anymore
    * [FELIX-5204] - IllegalStateException when using custom URL handlers for bundles

** Test
    * [FELIX-5084] - Add a mock based test for BundleTracker
    * [FELIX-5085] - Add a mock based test for ServiceTracker

Changes from 5.2.0 to 5.4.0
---------------------------

** Bug
    * [FELIX-5043] - Potential of waiting forever in ServiceRegistry.getService()
    * [FELIX-5061] - Optional resource fragment with requirements that cause class space consistency issues with the host export cause unexpected ResolutionExceptions
    * [FELIX-5064] - Framework should provide service capabilities for registered services
    * [FELIX-5075] - Framework hooks not re-sorted on service ranking update

** Improvement
    * [FELIX-5014] - Support Windows 10 for Bundle-NativeCode
    * [FELIX-5034] - Reduce and correct locking related to the hook registry
    * Update to latest resolver 1.8.0

Changes from 5.0.1 to 5.2.0
---------------------------
** Bug
    * [FELIX-4456] - openConnection().getContentLengthLong() always returns -1 for bundle URLs on Java7
    * [FELIX-4468] - EventObject is created with null pointer : "null source"
    * [FELIX-4960] - NPE in BundleRevisionImpl.getResourcesLocal()
    * [FELIX-4977] - Concurrency issue with factory services
    * [FELIX-5010] - NPE when resolving bundle with a header "Bundle-NativeCode = *"

** Improvement
    * [FELIX-4938] - Throw an exception when service use count overflow

** New Feature
    * [FELIX-4942] - Optimise the resolver

Changes from 5.0.0 to 5.0.1
---------------------------
** Bug
    * [FELIX-4867] - Stale bundle revisions don't get cleaned up when last using bundle is gone
    * [FELIX-4905] - Framework does not export org.osgi.service.resolver
    * [FELIX-4914] - Resolution problem with identity requirements on fragments
    * [FELIX-4927] - Felix reports itself as an OSGi R4/R5 Framework
    * [FELIX-4928] - Singleton getService() sometimes incorrectly returns null

** Improvement
    * [FELIX-4866] - Improve service registry

Changes from 4.6.1 to 5.0.0
---------------------------
** Bug
    * [FELIX-4838] - Deadlock in Service Registry
    * [FELIX-4850] - org.osgi.framework.version should be 1.8
    * [FELIX-4854] - Unable to create consistent wiring when same package is exported in same version by multiple bundles

** Improvement
    * [FELIX-4821] - Use a faster implementation for StringMap
    * [FELIX-4845] - Clean up Logger implementation
    * [FELIX-4525] - Refactor the Framework to use the Resolver module

Changes from 4.6.0 to 4.6.1
---------------------------
** Bug
    * [FELIX-4806] - Ungetting service through ServiceObjects might throw IllegalArgumentException

** Improvement
    * [FELIX-4810] - Cache WeakZipFile#entries

Changes from 4.4.1 to 4.6.0
---------------------------
** Sub-task
    * [FELIX-4503] - [Core R6] Support osgi.native capability
    * [FELIX-4504] - [Core R6] Support Framework DTOs
    * [FELIX-4505] - [Core R6] Support Prototype Service Factory
    * [FELIX-4578] - [Core R6] Support new Framework.init(FrameworkListener ... listeners) override
    * [FELIX-4579] - [Core R6] Support Framework Extension Bundle Activators
    * [FELIX-4580] - [Core R6] Support service.bundleid Service Registration property
    * [FELIX-4581] - [Core R6] Support FrameworkWiring.findProviders(Requirement)
    * [FELIX-4582] - [Core R6] Support WovenClassListener
    * [FELIX-4583] - [Core R6] Ensure that all OSGi Core R6 CT tests pass
    * [FELIX-4590] - [Core R6] Update to R6 API
    * [FELIX-4593] - Support the JavaSE/compact profiles for Java 8
    * [FELIX-4726] - [Core R6] Update bundle and service hooks for the system bundle

** Bug
    * [FELIX-3883] - [Framework] Move OS and processor aliases to configuration properties
    * [FELIX-4690] - Some bundles containing native code can fail to start on Windows 7+
    * [FELIX-4701] - Properties with surprising spelling in AutoProcessor
    * [FELIX-4729] - [Core R6] Support for osgi.native namespace with Loading native code libraries

** Improvement
    * [FELIX-4502] - [Core R6] Provide an OSGi R6 compliant framework implementation
    * [FELIX-4658] - URL of the CodeSource of a ProtectionDomain should resolve to the right JAR
    * [FELIX-4692] - Improve Service access time
    * [FELIX-4757] - Native Capabilities should allow OS and Processor alias to load from default and config properties

Changes form 4.4.0 to 4.4.1
---------------------------
** Bug
    * [FELIX-3239] - PackageAdmin#getExportedPackages does not work on packages exported by attached fragments
    * [FELIX-3309] - Dashes in qualifier get replaced by periods causing framework not to start up
    * [FELIX-3701] - Intermittent CNFE with embedded jars in Fragment Bundles
    * [FELIX-4220] - BundleException type is always set to 0 
    * [FELIX-4281] - Security Warning: Felix with Java Web Start
    * [FELIX-4515] - BundleRevision for system extension has no capabilities
    * [FELIX-4523] - Deadlock in URLHandlers when Felix.init and Felix.stop are called concurrently
    * [FELIX-4534] - Bundles containing native code fails to start on Windows 7

Changes from 4.2.1 to 4.4.0
---------------------------
** Bug
    * [FELIX-1131] - ServiceReference.isAssignableTo fails when using a factory that can not see the exported class and the bundle exporting the service does not have a direct wire to this class
    * [FELIX-3992] - Classloader access outside of a privileged block
    * [FELIX-4190] - The framework should not hold any lock while calling ServiceFactory#unget
    * [FELIX-4283] - actually throw exception if method not found
    * [FELIX-4331] - [Core R5] Support BundleContext and Framework adaptations
    * [FELIX-4353] - [Core R5] BundleWiringTests OSGi CT test failures
    * [FELIX-4354] - [Core R5] ResolverHookTests OSGi CT test failures
    * [FELIX-4355] - [Core R5] org.osgi.test.cases.framework.launch OSGi CT test failure
    * [FELIX-4365] - Input stream not properly closed on org.apache.felix.framework.Felix.getFrameworkVersion
    * [FELIX-4388] - Initial start level not considered when bundle.start() is called
    * [FELIX-4462] - Classloader deadlock in Java6 between two bundles

** Improvement
    * [FELIX-4128] - [Core R5] Provide an OSGi R5 compliant framework implementation
    * [FELIX-4284] - remove dead allocation

** Task
    * [FELIX-4080] - [Core R5] Add support for org.osgi.framework.UnfilteredServiceListener
    * [FELIX-4082] - [Core R5] Update org.osgi.framework.bsnversion framework property
    * [FELIX-4083] - [Core R5] Support for valueOf when evaluating a Filter
    * [FELIX-4084] - [Core R5] Enhance Bundle.adapt() to provider AccessControlContext.
    * [FELIX-4085] - [Core R5] Implement updates to the Bundle Hook Specification
    * [FELIX-4324] - [Core R5] Implement osgi.identity namespace for fragments

** Wish
    * [FELIX-3868] - Adding osgi.identity namespace to bundles (resources)

Changes from 4.2.0 to 4.2.1
---------------------------
** Bug
    * [FELIX-3411] - The implementation of org.osgi.service.startlevel.StartLevel#setStartLevel(int) does not follow the spec
    * [FELIX-3893] - Bundle in cache doesn't pass security check anymore.
    * [FELIX-3907] - NullPointerException in BundleWiringImpl when m_disposed is true.
    * [FELIX-3939] - IllegalArgumentException from ClassLoader.definePackage
    * [FELIX-3950] - Permission check being done even when security manager is absent
    * [FELIX-3957] - Error events can be thrown when refreshing fragment bundles

** Improvement
    * [FELIX-3961] - Add a fallback to the default java security policy if no security provider is present

Changes from 4.0.3 to 4.2.0
---------------------------
** Bug
    * [FELIX-2780] - Extension bundle implementation relies on urlhandlers  service to start extension bundles
    * [FELIX-3160] - NPE in BundleRevisionImpl.close() when uninstalling a bundle
    * [FELIX-3242] - Concurrent modification problem in StatefulResolver$ResolverStateImpl.getCandidates
    * [FELIX-3273] - Possible exception when accessing headers
    * [FELIX-3306] - Lazy activation of bundles is not always working as expected
    * [FELIX-3343] - Installing an fragment bundle without Bundle-ManifestVersion: 2 causes NPE in resolver
    * [FELIX-3348] - StartLevel thread may terminate on uncaught exception
    * [FELIX-3353] - The implementation of org.osgi.service.packageadmin.PackageAdmin#getExportedPackages(Bundle), does not follow the spec.
    * [FELIX-3367] - getClassloader permission
    * [FELIX-3397] - NPE when trying to resolve invalid fragments
    * [FELIX-3411] - The implementation of org.osgi.service.startlevel.StartLevel#setStartLevel(int) does not follow the spec
    * [FELIX-3413] - NPE and thread blocked in org.osgi.service.packageadmin.PackageAdmin#refreshPackages(Bundle[])
    * [FELIX-3455] - Framework JARs for JDK 7
    * [FELIX-3465] - Multi root resolve operations may cause duplicate blame chains to be created
    * [FELIX-3618] - [Framework] Should not allow bundles to use generic cap/req headers for osgi.wiring.* namespaces
    * [FELIX-3626] - Issue of felix on android 4.1
    * [FELIX-3632] - [Framework] Parsing of delimited strings in manifest parser collapses all consecutive escapes
    * [FELIX-3670] - PackageAdmin.isBundleType throws NPE for uninstalled bundle
    * [FELIX-3713] - Bundle.start() returns without starting the bundle
    * [FELIX-3743] - Potential endless loop setting the active framework startlevel
    * [FELIX-3753] - Felix crashes when embedded within Felix
    * [FELIX-3761] - When a bundle registers a service, the bundle lock is obtained without any real purpose
    * [FELIX-3766] - Slightly invalid logic for pre-checking dynamic imports which cause the framework the grab the lock with no real need
    * [FELIX-3803] - Bundle#getResource always try to resolve the bundle
    * [FELIX-3824] - Possible InvalidStateException thrown while unregistering bundle services
    * [FELIX-3840] - problem with URLHandlers when running 2 frameworks in one jvm in separate class loaders
    * [FELIX-3844] - Native bundles cannot be installed on Windows 8 and Windows Server 2012
    * [FELIX-3852] - InstallBundle throws ClassCastException: java.util.jar.Attributes$Name cannot be cast to java.lang.String
    * [FELIX-3887] - ClassCastException during resolution of Require-Bundle: system.bundle

** Improvement
    * [FELIX-3344] - [Framework] Filter parsing treats ** as invalid syntax
    * [FELIX-3372] - Add the ability to handle a blank on the property "org.osgi.framework.system.packages.extra"
    * [FELIX-3394] - [Framework] Refactor internal resolver APIs to better align with upcoming OSGi resolver spec
    * [FELIX-3447] - Optimize read only collections by using a specific class and not a wrapper which is slower
    * [FELIX-3553] - Use of parallel class loading capability of JDK7
    * [FELIX-3609] - Small optimizations
    * [FELIX-3611] - Bundle certificates are not added to the CodeSource when building the BundleProtectionDomain
    * [FELIX-3807] - Refreshing bundles should first grab all the bundle locks to avoid concurrent modifications of those bundles

** New Feature
    * [FELIX-3504] - [Framework] Move to OSGi R5 packages

** Task
    * [FELIX-3786] - Create system package definintions for Java 8


Changes from 4.0.2 to 4.0.3
---------------------------

** Bug
    * [FELIX-3003] - NPE in ResolverImpl.permutateIfNeeded
    * [FELIX-3296] - URLHandlers caches null as values for common protocols
    * [FELIX-3302] - Adapt the URLHandlers for the 4.0 refactoring
    * [FELIX-3363] - Native bundles cannot be installed on Windows Server 2008 r2 with the tag win32
    * [FELIX-3393] - Possible deadlock with reentrant calls
    * [FELIX-3572] - [Framework] Resolver is not checking package space consistency for dynamic imports

** Improvement
    * [FELIX-3262] - Startup delay due to URLHandlersBundleStreamHandler

Changes from 4.0.1 to 4.0.2
---------------------------

** Bug
    * [FELIX-3178] - NPE in ResolverImpl
    * [FELIX-3194] - [Framework] Manifest parser is not correctly handling escapes
    * [FELIX-3205] - Error resolving system.bundle dependencies
    * [FELIX-3207] - Improper handling of nulls and substring matching at CapabilitySet/SimpleFilter
    * [FELIX-3211] - org.apache.felix.framework.cache.BundleCache.deleteDirectoryTreeRecursive throws NPE
    * [FELIX-3220] - Multiple ClassCastException(s) when invoking OSGi Service-Hooks (EventHook, FindHook)

** Improvement
    * [FELIX-3166] - Make Felix compile within Eclipse

** New Feature
    * [FELIX-3156] - Implement Bundle::getDataFile and Bundle::compareTo

Changes from 4.0.0 to 4.0.1
---------------------------

** Bug
    * [FELIX-3137] - [Framework] Capabilities from resolved singleton bundles are not indexed correctly
    * [FELIX-3150] - Filter parameter is ignored at getServiceReferences
    * [FELIX-3153] - [Framework] refreshPackages() should stop bundles in one pass and refresh them in a second pass

** Improvement
    * [FELIX-3138] - [Framework] Refactor some unnecessary code in the resolver
    * [FELIX-3141] - [Framework] Framework should filter removal pending fragments not the resolver

Changes from 3.2.2 to 4.0.0
---------------------------

** Bug
    * [FELIX-2762] - Substring parser incorrectly disallowing use of parentheses characters
    * [FELIX-2990] - [Framework] Bug introduced into handling of native libraries during a fresh
    * [FELIX-3015] - [Framework] Provide org.osgi.util.tracker version 1.5
    * [FELIX-3033] - [Framework] Service registry hooks are not correctly filtering bundle contexts for event hook
    * [FELIX-3038] - Framework does not offer J2SE-1.2 Execution Environment
    * [FELIX-3043] - [Framework] Resolver is not correctly resolving fragments in all cases
    * [FELIX-3059] - Reexported packages are not calculate correctly leading to resolver and class loading bugs
    * [FELIX-3062] - [Framework] Resolver gets into infinite loop in the face of a require-bundle cycle
    * [FELIX-3082] - [Framework] Bundles not allowed to add listeners while in STOPPING state
    * [FELIX-3085] - Importing/exporting "." should not be allowed
    * [FELIX-3096] - Could not add FrameworkListener from ServiceListener

** Improvement
    * [FELIX-2467] - The framework extensions should be returned when invoking the method PackageAdmin#getFragments with the system bundle
    * [FELIX-2572] - JRE system packages should include "uses" constraints
    * [FELIX-2950] - [Framework] Adopt OSGi R4.3 API as framework internal API
    * [FELIX-2998] - [Framework] OSGi R4.3 changed filter handling of exceptions when calling equals()/compare() to return false
    * [FELIX-3000] - Move sending service registered event out of bundle lock
    * [FELIX-3071] - [Framework] It should be possible to limit number of open JAR files
    * [FELIX-3125] - [Framework] Use single file per bundle in bundle cache by default

** New Feature
    * [FELIX-2959] - [Framework] Implement OSGi R4.3 class loader byte-code weaving hook
    * [FELIX-2969] - [Framework] Implement OSGi R4.3 framework wiring object
    * [FELIX-2973] - [Framework] Implement OSGi R4.3 generic capabilities and requirements
    * [FELIX-2975] - [Framework] Implement OSGi R4.3 framework start level object
    * [FELIX-2986] - [Framework] Implement OSGi R4.3 resolver hooks
    * [FELIX-2999] - [Framework] OSGi R4.3 now specifies that number types should be trimmed when evaluating filters
    * [FELIX-3032] - [Framework] Implement OSGi R4.3 bundle hooks
    * [FELIX-3052] - [Framework] Implement OSGi R4.3 system bundle generic capabilities
    * [FELIX-3056] - [Framework] Implement OSGi R4.3 event listener service registry hook
    * [FELIX-3122] - [Framework] Implement OSGi R4.3 framework UUID
    * [FELIX-3124] - [Framework] Implement OSGi R4.3 property to allow installing bundles with the same BSN and version

** Task
    * [FELIX-3110] - [Framework] Implement 4.3 security checks


Changes from 3.2.1 to 3.2.2
---------------------------

** Bug
    * [FELIX-2935] - Bundle.getEntryPaths and findEntries are returning META-INF/ multiple times
    * [FELIX-2941] - Felix Framework 3.2.0 and Framework Security 1.4.2 fails OSGI Conditional Permission Admin CT when running on IBM JVM 5 and 6.
    * [FELIX-2942] - Bundles with higher start level get activated even before framework reaches that start level


Changes from 3.2.0 to 3.2.1
---------------------------

* Bug
    * [FELIX-2901] - [Framework] NPE from a host bundle during framework shutdown
    * [FELIX-2917] - Constructor of SecurityExceptino() which is incompatible to 1.4 is used  
    * [FELIX-2924] - bundle stop hangs for http-2.2.0 in felix-3.2.0

** Improvement
    * [FELIX-2909] - [Framework] Resolver could be more efficient if it detected if fragments were present


Changes from 3.0.9 to 3.2.0
---------------------------

* Bug
    * [FELIX-1816] - deadlock on SystemBundle.stop()
    * [FELIX-2741] - NPE in ResolverImpl.calculatePackageSpaces
    * [FELIX-2748] - Possible synchronization issue with BundleContext.getBundle()
    * [FELIX-2877] - java6 update 24 breaks felix when used inside webstart


** Improvement
    * [FELIX-2858] - [Framework] Modify resolver to be self-contained with respect to fragment handling
    * [FELIX-2859] - [Framework] Modify resolver to be self-contained with respect to singleton handling
    * [FELIX-2864] - [Framework] Add package profile for JDK7 to default properties

Changes from 3.0.8 to 3.0.9
---------------------------

** Bug
    * [FELIX-1581] - Bundle#update, Bundle#uninstall and Bundle#stop should wait for a (configurable) timeout before throwing an exception if the bundle is starting or stopping
    * [FELIX-2784] - When the framework try to grab the bundle lock, it ignores thread interruption
    * [FELIX-2822] - [Framework] System bundle module's state not reset when framework restarted leading to NPE
    * [FELIX-2832] - [Framework] It should not be possible to open an URLConnection to "/" for a bundle URL
    * [FELIX-2840] - [Framework] Uninstalling an uninstalled bundle throws NoSuchElementException
    * [FELIX-2849] - PackageAdmin is inconsistent between getFragments and getHosts
    * [FELIX-2850] - PackageAdmin return fragments / hosts even if the host isn't resolved
    * [FELIX-2851] - Resolution problems after a fragment can't be resolved

** Improvement
    * [FELIX-2841] - [Framework] Improve resolve exception messages

Changes from 3.0.7 to 3.0.8
---------------------------

** Bug
    * [FELIX-2749] - Boolean.parseBoolean() newly defined in Java5 should not be used.
    * [FELIX-2789] - Native library matching is not correctly checking additional extensions
    * [FELIX-2800] - Logging will throw an NPE if no bundle is specified
    * [FELIX-2802] - A failed update doesn't rollback properly
    * [FELIX-2805] - Cache PackageAdmin.getBundle() result for system bundle classes

Changes from 3.0.6 to 3.0.7
---------------------------

** Bug
    * [FELIX-2456] - Framework no longer fires UNRESOLVED event when a bundle is explicitly refreshed
    * [FELIX-2693] - [Framework] Service registry should throw a ServiceException for factories resulting in a cycle
    * [FELIX-2700] - Framework uses java.nio package which is not supported by CDC VM
    * [FELIX-2710] - [Framework] For exploded bundles Bundle.getEntry("a/b.jar/")==Bundle.getEntry("a/b.jar")
    * [FELIX-2717] - [Framework] Resolver treats multiple exports of same package as conflicting for fragment imports
    * [FELIX-2725] - [Framework] Resolver is not correctly calculating exported packages for already resolved modules
    * [FELIX-2728] - JarRevision does not close URLConnections which are instances of HttpURLConnection
    * [FELIX-2736] - [Framework] Resolver is not correctly verifying package space consistency for dynamic imports
    * [FELIX-2738] - [Framework] DirectoryContent does not handle security correctly

** Improvement
    * [FELIX-2703] - [Framework] Include OSGi/Minimum EEs in default properties
    * [FELIX-2721] - [Framework] Implement custom manifest parser and avoid JarFile
    * [FELIX-2737] - [Framework] Optimize resolver algorithm by not re-calculating uses constraints for resolved modules

Changes from 3.0.5 to 3.0.6
---------------------------

** Bug
    * [FELIX-2670] - [Framework] Implicit boot delegation doesn't delegate for external code in all cases
    * [FELIX-2683] - [Framework] Bundle last modified time is not persisted on deployment

** Improvement
    * [FELIX-2560] - Bundle URLs do not survive refreshes

** New Feature
    * [FELIX-2646] - [Framework] Locking could be used to prevent concurrent access to a single bundle cache

Changes from 3.0.4 to 3.0.5
---------------------------

** Bug
    * [FELIX-2653] - LinkageError caused by duplicate class definition during implicit boot delegation

** Improvement
    * [FELIX-2645] - Add a (hidden) way to retrieve a local URL for a given bundle URL
    * [FELIX-2654] - [Framework] Modify bundle cache to use a single file per bundle state

Changes from 3.0.3 to 3.0.4
---------------------------

** Bug
    * [FELIX-2584] - No FrameworkEvent.ERROR on unchecked exception in event listener
    * [FELIX-2629] - [Framework] Module class loader should return an empty enumeration for getResources()

** Improvement
    * [FELIX-2619] - [Framework] Bundle cache is rechecking nonexistent files again and again
    * [FELIX-2626] - [Framework] Bundle cache is rewriting some files when restarting bundles

Changes from 3.0.2 to 3.0.3
---------------------------

** Bug
    * [FELIX-2548] - Resolver should use case sensitive indexing for capabilities
    * [FELIX-2569] - Felix bundle classloader always delegates to parent loader in getResources()
    * [FELIX-2589] - SecurityException "SecurityManager already installed" is thrown when calling Framework.init() multiple times with FRAMEWORK_SECURITY set
    * [FELIX-2598] - Hang in Felix: thread owing a bundle lock waits for ever to lock it again
    * [FELIX-2599] - When specifying the packages exported by the system bundle, attributes and directives on packages do not show up in the system bundle headers

** Improvement
    * [FELIX-1022] - Classloader Exceptions should be more informative
    * [FELIX-2549] - Fix some synchronization issues in content handling
    * [FELIX-2555] - Log messages should contain the bundle id, when available
    * [FELIX-2597] - Deadlock during delivery of resolved event

Changes from 3.0.1 to 3.0.2
---------------------------

** Bug
    * [FELIX-2421] - Implicit bootdelegation doesn't ignore classloaders if they are inner classes
    * [FELIX-2437] - Deadlock on refrsh Import and refresh
    * [FELIX-2451] - Felix uses System.out to print debug messages related to resolver...
    * [FELIX-2459] - Wrong error message on a missing package
    * [FELIX-2466] - Unknown attributes are not stripped from Fragment-Host header
    * [FELIX-2473] - Subtring matching is incorreclty matching against an empty string
    * [FELIX-2479] - Required bundles not correctly re-exporting their substitutable exports

** Improvement
    * [FELIX-2528] - Potential performance issue in resolver when uses constraint conflict is detected
    * [FELIX-2529] - In some scenarios the resolver will not backtrack on imported package decisions

Changes from 3.0.0 to 3.0.1
---------------------------

** Bug
    * [FELIX-2401] - NPE in org.apache.felix.framework.FilterImpl.DictionaryCapability.getAttribute(String)

Changes from 2.0.5 to 3.0.0
---------------------------
** Sub-task
    * [FELIX-2036] - Improve resolver's generic capability/requirement model
    * [FELIX-2037] - Improve resolver performance by making solution space searching smarter

** Bug
    * [FELIX-995] - JRE packages are exported with wrong version
    * [FELIX-1967] - Freeze finding consistent class space
    * [FELIX-2080] - Updating bundles when debugging switched on might result in a deadlock with 100% CPU usage
    * [FELIX-2150] - URLStreamHandlerProxy.setURL may not set query component correctly
    * [FELIX-2172] - Extremely long resolve stage when running CXF-DOSGi system test
    * [FELIX-2177] - Fragment bundles not loaded after second start when using autodeploy
    * [FELIX-2271] - CLONE -NPE "name can't be null" when trying to install a bundle in Felix 2.0.3
    * [FELIX-2273] - getClassLoader-permission required accessing classes from dynamically loaded class
    * [FELIX-2281] - Bundle id order affects fragment resolution success
    * [FELIX-2317] - Possible NPE for jars with null Manifest
    * [FELIX-2321] - BundleException type should be properly set when installing a duplicate bundle
    * [FELIX-2332] - Lots of contention on ExtensionManager.openConnection(URL)
    * [FELIX-2335] - Bundle.loadClass() for system bundle doesn't obey boot delegation
    * [FELIX-2356] - extension bundle cannot load class from embed jar
    * [FELIX-2383] - Bundles are restarted during start level change
    * [FELIX-2392] - Felix framework uses a Java5 method

** Improvement
    * [FELIX-1210] - Allow jars with missing intermediate entries to be handled as if they were present in Bundle.getEntryPaths
    * [FELIX-1797] - Customizable Framework startup message
    * [FELIX-2035] - Reimplement framework resolver
    * [FELIX-2039] - Reimplement standard OSGi LDAP filter to use new filter solution for resolver
    * [FELIX-2040] - Modify framework service registry to use resolver's new capability/requirement model
    * [FELIX-2041] - Look into using generics in framework code
    * [FELIX-2042] - Use Gogo as the default shell for the framework distribution
    * [FELIX-2324] - Support execution environment so that OBR works properly
    * [FELIX-2336] - Variable substitution in configuration files should ignore mismatched delimiters

Changes from 2.0.4 to 2.0.5
---------------------------
** Bug
    * [FELIX-1753] - The start level should check that the bundle still exists before starting it to avoid an ugly exception
    * [FELIX-2087] - NPE "name can't be null" when trying to install a bundle in Felix 2.0.3
    * [FELIX-2107] - Bundle.findEntries() matches '*<filePattern>' instead of '<filePattern>'
    * [FELIX-2195] - Using URLDecoder.decode on locations is wrong
    * [FELIX-2222] - Failure to reinstall a cached bundle will corrupt the bundle cache

Changes from 2.0.3 to 2.0.4
---------------------------

** Bug
    * [FELIX-2056] - URLHandlersStreamHandler not getting handlers from frameworks that are inside a different classloader
    * [FELIX-2067] - Fragment bundle ignored silently when the host Bundle-SymbolicName equals import package name
    * [FELIX-2073] - The System Bundle is not providing WS Addressing

** Improvement
    * [FELIX-2071] - Missing checks inside ModuleImpl (in Framework) which causes exceptions

Changes from 2.0.2 to 2.0.3
---------------------------

** Bug
    * [FELIX-1838] - PackageAdmin.getExportedPackages() duplicates output for packages with different version
    * [FELIX-1867] - ModuleImpl diagnoseClassLoadError throw NullPointerException for empty package name in debug mode
    * [FELIX-1917] - A few minor bugs in the framework found while embedding Felix
    * [FELIX-1919] - Fragment bundle cannot be linked to its host
    * [FELIX-1920] - RequiredBundle.getRequiringBundles() incorrectly calculates result
    * [FELIX-1929] - getStartLevel() always reports requested start level, not active start level
    * [FELIX-1982] - Documented but uninterpreted felix.cache.* properties
    * [FELIX-1998] - Use UTF-8 when decoding reference location URLs
    * [FELIX-2002] - Uninstalled fragments are not properly detached

** Improvement
    * [FELIX-37] - Implement security for bundle resource URLs
    * [FELIX-325] - Factor out security checks from the framework/system bundle code
    * [FELIX-1973] - Implement all required security checks

** New Feature
    * [FELIX-30] - Implement extension bundles
    * [FELIX-1991] - Allow boot delegation class loader to be configurable per bundle


Changes from 2.0.1 to 2.0.2
---------------------------

** Bug
    * [FELIX-1754] - Usage of BundleContext.getServiceReferences results in failure to activate components
    * [FELIX-1782] - Errors during start-up on gnu/classpath based VMs (jamvm, kaffe, cacao) and mika
    * [FELIX-1795] - Bundle version ignored in Fragment-Host header
    * [FELIX-1834] - java.io.IOException: No framework context found when embedding felix frameworks as bundles

** Improvement
    * [FELIX-1534] - Improve fragment merging
    * [FELIX-1781] - Try to reduce object allocations/usage in resolver algorithm
    * [FELIX-1783] - Eliminate contention on ServiceRegistry.getServiceReferences(String, Filter)

Changes from 2.0.0 to 2.0.1
---------------------------

** Bug
    * [FELIX-1565] - Deadlock UrlHandlers
    * [FELIX-1573] - Occasional NPE in URLHandlersBundleStreamHandler
    * [FELIX-1580] - Regression with native library handling
    * [FELIX-1586] - Framework reports org.osgi.framework.version as 1.3
    * [FELIX-1600] - ServiceReference.isAssignableTo() always returns true if requesting bundle has no wire
    * [FELIX-1631] - Implicit bootdelegation causes hang on android
    * [FELIX-1710] - Resolver still does not discard all partial results when a cyclical dependency fails
    * [FELIX-1721] - Framework boot delegation has a bug due to extraneous code
    * [FELIX-1731] - Native library extraction could be improved to help cases where there are dependencies among libraries

** Improvement
    * [FELIX-1619] - Change the default auto-deploy actions to be install and start only
    * [FELIX-1625] - Refactor bundle cache to simplify management
    * [FELIX-1679] - VersionRange class should use finals to be thread safe.
    * [FELIX-1724] - Various module metadata should be cached

** Task
    * [FELIX-1617] - Modify framework, main, shell, shell.tui, and obr to depend on official OSGi JAR files

Changes from 1.8.1 to 2.0.0
---------------------------

** Bug
    * [FELIX-893] - Felix fails to start using J9 JVM
    * [FELIX-905] - Felix needs an RFC 126 FindHook
    * [FELIX-906] - Felix needs an RFC 126 EventHook
    * [FELIX-1122] - Extension bundles are not being removed from the bundle list when uninstalled
    * [FELIX-1123] - System bundle does still not correctly handle (export) package attributes
    * [FELIX-1124] - ResourceNotFoundException too verbose
    * [FELIX-1130] - Bundle.getHeaders() returns a Dictionary<java.util.jar.Attribute.Name,String>
    * [FELIX-1138] - URL Handlers performance regression due to service lookups
    * [FELIX-1170] - MemoryLeak when stopping and restarting Felix
    * [FELIX-1187] - BundleContext.ungetService() should return false only if the usage count is zero when the method is invoked
    * [FELIX-1197] - Bundle Fragments not resolved correctly
    * [FELIX-1198] - config.properties still refers to old org.osgi.framework.startlevel property
    * [FELIX-1247] - BundleEvent.UNRESOLVED should be fired during update/uninstall not refresh
    * [FELIX-1249] - Bundle.findEntries() should search fragments as well as the bundle itself
    * [FELIX-1254] - Bundle#findEntries does not return resources from fragments
    * [FELIX-1271] - Improve manifest localization to handle special cases
    * [FELIX-1272] - Need to special case getResource()/getResources()/loadClass() for fragment bundles
    * [FELIX-1273] - Bundle.getResources() should return null for a non-existent resource
    * [FELIX-1277] - Fix Service Hooks Tests failures in RFC 126 TCK
    * [FELIX-1279] - Framework.waitForStop() does not obey timeout
    * [FELIX-1280] - Package Admin - getExportedPackages must return null instead of an empty array
    * [FELIX-1285] - SecureAction captures the calling context incorrectly
    * [FELIX-1286] - Module class loader should use secure action instead of a privileged block
    * [FELIX-1287] - System bundle operations from RFC-132 (e.g., init(), start(), stop(), waitForStop()) are using wrong lock object
    * [FELIX-1288] - System bundle context should be null after stopping the framework
    * [FELIX-1292] - PackageAdmin.getBundle(Class) should return null if the bundle associated with the passed in class is from another framework
    * [FELIX-1293] - StringMap used for case insensitive properties does not respect ordering if case sensitivity is changed
    * [FELIX-1295] - ServiceRegistry increments/decrements service use count after/before getService/ungetService() is called on ServiceFactory
    * [FELIX-1371] - Automatic parent class loader delegation does not correctly filter calls to Bundle.loadClass()
    * [FELIX-1397] - Required execution environment verification should happen at resolve time, not install time
    * [FELIX-1400] - bootdelegation and dynamic-import-packages are accepting invalid patterns
    * [FELIX-1401] - Manifest localization with fragments not handled correctly
    * [FELIX-1422] - Resolver does not always discard partial results when a cyclically dependency fails
    * [FELIX-1435] - Resolver does not always resolve a dynamic import to a fragment export
    * [FELIX-1527] - R4.2 spec errata now specifies uninstalling a bundle must transition through INSTALLED on its way to UNINSTALLED
    * [FELIX-1551] - Start level service must synchronously persist bundle start level changes
    * [FELIX-1556] - Bundle.getResource/s is not able to find resources if the package is not alraedy wired when I use DynamicImport-Package: *

** Improvement
    * [FELIX-712] - Ability to disable automatic parent classloader delegation
    * [FELIX-883] - JarContent logs and then swallows exceptions when reading from JAR file, should probably throw an exception
    * [FELIX-1120] - Enable BundleCache customization
    * [FELIX-1134] - Add support for native libraries in fragments
    * [FELIX-1189] - Improve error message in main when there is an error processing auto-install/start bundles
    * [FELIX-1246] - PackageAdmin.getBundle() is not implemented efficiently
    * [FELIX-1260] - Make Bundle.findEntries() and Bundle.getEntryPaths() more thread safe
    * [FELIX-1291] - Implement support for proper return type from Framework.waitForStop()
    * [FELIX-1300] - Remove legacy bundle cache support when extracting embedded JAR files
    * [FELIX-1360] - Improve native library matching algorithm (part 2)
    * [FELIX-1404] - Use provided classes from OSGi R4.2 companion code
    * [FELIX-1432] - Manifest parser doesn't return import package declarations in order of manifest
    * [FELIX-1462] - Felix framework launcher should only use standard launching API

** New Feature
    * [FELIX-33] - Implement system bundle update
    * [FELIX-749] - Add support for lazy activation of bundles
    * [FELIX-1193] - Implement org.osgi.framework.bundle.parent from RFC 132
    * [FELIX-1205] - Update to the latest OSGi R4.2 API
    * [FELIX-1244] - Add support for ServiceEvent.MODIFIED_ENDMATCH
    * [FELIX-1250] - Support service exceptions for service factories
    * [FELIX-1289] - Support for FrameworkUtil.getBundle()
    * [FELIX-1297] - Implement support for new org.osgi.framework.command.execpermission configuration property
    * [FELIX-1298] - Implement support for new org.osgi.framework.library.extensions configuration property
    * [FELIX-1446] - Framework launcher should automatically deploy bundles in bundle directory
    * [FELIX-1478] - Add shutdown hook to launcher to cleanly shutdown the framework if the process is killed




** Task
    * [FELIX-1144] - The NOTICE file for Main subproject is not correctly copied into the source JAR


** Test
    * [FELIX-1208] - Need migrate the EventDispatcherTest to newer version of EasyMock
 
Changes form 1.6.1 to 1.8.0
---------------------------
** Bug
    * [FELIX-1034] - bootdelegation property seems to be matching more packages than desired
    * [FELIX-1059] - DynamicImport-Package matches more packages than desired

** Improvement
    * [FELIX-1060] - URLHandlers doesn't support URLStreamHandler.openConnection(proxy,url) method

** New Feature
    * [FELIX-29] - Implement bundle fragments

Changes from 1.6.0 to 1.6.1
---------------------------
** Bug
    * [FELIX-1027] - deadlock with felix 1.6.0 ?
    * [FELIX-1028] - NPE in configuration view when running webconsole with Equinox
    * [FELIX-1033] - Exceptions when Felix is started with security manager
    * [FELIX-1035] - deadlock observed while using fileinstall to monitor multiple directories
    * [FELIX-1045] - Felix 1.6.0 fails with ClassCircularityError

Changes from 1.4.1 to 1.6.0
---------------------------

** Bug
    * [FELIX-737] - Resolver does not correctly discard export when module imports the same package (part 2)
    * [FELIX-852] - Fragment support is currently limited to directly resolved hosts
    * [FELIX-869] - SCR throws exception on invalidating a component with a reference to a service that was already unregistered
    * [FELIX-891] - Bundle lock acquisition should not record lock until it verifies the bundle is lockable
    * [FELIX-892] - ServiceReferenceImpl improper implementation of equals and hashcode
    * [FELIX-893] - Felix fails to start using J9 JVM
    * [FELIX-897] - Empty system package is exported when a semicolon is present in "extra" configuration
    * [FELIX-902] - Empty bundle.state file produces NPE
    * [FELIX-910] - Framework may ignore framework startlevel on startup
    * [FELIX-911] - Potential deadlock between Bundle.stop() and BundleContext.registerService()
    * [FELIX-915] - PackageAdmin returns null on getBundle(...) with system classes
    * [FELIX-934] - Bootdelegation bug
    * [FELIX-947] - Behaviour of startlevel comman doesn't adhere to spec
    * [FELIX-948] - ServiceReferenceImpl.compareTo should handle other types than integer for service ranking
    * [FELIX-951] - Deadlock in iPojo when stopping Felix
    * [FELIX-952] - Exception thrown when unregistering services because the bundle is stopped
    * [FELIX-953] - Bundle#loadClass sometimes return null instead of throwing a CNFE
    * [FELIX-961] - 100% CPU looping inside uses calculation
    * [FELIX-962] - Erroneous class loading delegation to the application launcher classloader in some cases
    * [FELIX-969] - system bundle does not correctly handle (export) package attributes
    * [FELIX-971] - Exception thrown in ServiceTracker at shutdown 
    * [FELIX-978] - Resolver does not clean up properly on a failed recursive attempt to resolve
    * [FELIX-1004] - Extensionmanager openConnection(URL) method should be public
    * [FELIX-1005] - Strange list of imported packages returned by the package admin

** Improvement
    * [FELIX-681] - Modify daemon threads to catch all exceptions and log them to avoid premature thread death
    * [FELIX-851] - Refactor the module abstraction layer to align more closely to OSGi concepts
    * [FELIX-872] - JarContent swallows exception when opening manifest, it should log it
    * [FELIX-883] - JarContent logs and then swallows exceptions when reading from JAR file, should probably throw an exception
    * [FELIX-894] - Loosen locking when starting/stopping/uninstalling a bundle by firing event without holding a lock
    * [FELIX-908] - Unsynchronize access to bundle state inside BundleInfo by making the variable volatile

Changes from 1.4.0 to 1.4.1
---------------------------

* [2008-12-19] Refactor the URLHandlers implementation to fix a possible 
  Linkage-Error when running embedded inside tomcat. Furthermore, make it possible
  to dynamically set a SecurityManager, change the url we add to the framework
  classloader to fix issues with rmi and make sure we restore the previous URLStreamHandlerFactory
  after stopping. (FELIX-842, FELIX-837, FELIX-844, FELIX-827)
* [2008-12-19] Add missing javax.security.cert in JRE 1.4 and 1.5. (FELIX-854)
* [2008-12-19] Improve framework internal locking protocol.
* [2008-12-18] Fixed an issue where bundles with a non-existing native library
  would not be removed correctly. (FELIX-835)
* [2008-11-21] Throw an exception when there is an attempt to start or stop a 
  fragment, as per the spec. (FELIX-820)
* [2008-11-20] Fixed a bug during shutdown where uninstalled fragments are not
  properly closed. (FELIX-819)
* [2008-11-14] Added partial support for new service registry hooks as proposed 
  for OSGi R4.2; currently, only listener hooks are supported. (FELIX-804)
* [2008-11-08] Fixed Felix' delegation hack so that it correctly delegates to 
  the parent class loader for resources as appropriate; previously it was always 
  delegating for class loading, which was incorrect. (FELIX-808)

Changes from 1.2.2 to 1.4.0
---------------------------

* [2008-11-05] URLStreamHandlerService and ContentHandlerService override
  built-in handlers and make it possible to use URLHandlers when extending the 
  Felix class. (FELIX-756, FELIX-800)
* [2008-11-04] Implement ServiceReference.compareTo() method. (FELIX-799)
* [2008-10-31] Fix some visibility issues in the LDAP operators which could
  result in incorrect toString values. (FELIX-765)
* [2008-10-31] Fixed spec compliance issues around getting a service reference 
  from an invalid registration and throwing an exception when there are
  duplicate property keys. (FELIX-798)
* [2008-10-21] Fixed an issue with extension bundles which would be installed
  as fragments and fail to install extension bundles if they have incomplete 
  metadata. (FELIX-770)
* [2008-10-21] Fix a possible deadlock in URLHandlers. (FELIX-748)
* [2008-10-16] Modified framework to have default values for the system
  packages property, which also required modifying main to no longer expect to
  set it. Now it is possible to start Felix with no configuration properties.
  (FELIX-753)
* [2008-10-16] Update felix to work with the 1.0.0-rc1 version of the android
  sdk.
* [2008-10-15] Implemented remaining PackageAdmin methods from R4. (FELIX-35)
* [2008-10-15] Modified resolver to correctly mark fragment modules as resolved.
  (FELIX-777)
* [2008-10-15] Modified the resolver to longer consider uninstalled fragments
  and hosts when resolving dependencies; this required a new "stale" flag on 
  modules that gets set when their associated bundle is uninstalled. (FELIX-776)
* [2008-10-15] Modified the resolver to sort candidates when resolving 
  Require-Bundle dependencies. (FELIX-775)
* [2008-10-14] Modified ExportedPackage.getImportingBundles() to include
  bundles requiring the exporting bundle, in addition to those bundles
  importing the package. Also tried to simplify dependency management code
  by separating it out. (FELIX-764) 
* [2008-10-14] Fix a NullPointerException in SecureAction when a
  SecurityManager is used by keeping pointers on the local stack. (FELIX-766)
* [2008-10-13] Use System.gc to allow to update and uninstall bundles with 
  native libs on Windows. (FELIX-733)
* [2008-10-10] Set the activator to null on Bundle.stop() to allow for earlier 
  garbage collection. (FELIX-762)
* [2008-10-10] Implements support for flushing the cache on framework 
  initialization. (FELIX-755)
* [2008-10-10] Improve exception messages. (FELIX-750)
* [2008-10-09] Modified the bundle cache to no longer have profiles. (FELIX-754)
* [2008-10-08] Modified the Felix API to aligned with the proposed standard 
  OSGi framework API. The framework instance can now be stopped and restarted. 
  (FELIX-753)
* [2008-09-29] Support transiently starting/stopping bundles. (FELIX-713) 
* [2008-09-25] Correctly discard exported packages when a bundle is chosen to
  import a package it exports. (FELIX-736)
* [2008-09-24] Clearly distinguish between "resolved" and "unresolved" 
  capabilities, which is necessary since "resolved" capabilities have higher 
  priority than "unresolved" ones. (FELIX-730)
* [2008-09-24] Do not bootdelegate in the case where Bundle.loadClass() has
  been used. (FELIX-712)
* [2008-09-23] Improve decoding of reference URLs. (FELIX-731)
* [2008-09-23] For completeness, added symbolic names to framework and main.
* [2008-09-17] Improve gc by fixing an issue with StartLevel and PackageAdmin.
  (FELIX-728)
* [2008-09-15] Fix an issue with Require-Bundle not aggregating packages 
  correctly. (FELIX-722)
* [2008-09-15] Fixed a bug where class loader delegation for dynamic imports 
  was happening when it shouldn't. (FELIX-724)
* [2008-09-12] Added a configuration property to determine whether installing a 
  fragment that uses unimplemented features throws an exception or logs a 
  warning. (FELIX-725)
* [2008-09-12] Removed some experimental code for "implicit requirements",
  since it was no longer needed.
* [2008-09-12] Fix some visibility issues within the LDAP filter. (FELIX-721)

Changes from 1.2.1 to 1.2.2
---------------------------

* [2008-10-14] Fixed a NullPointer exception that could happen when 
  running with a SecurityManager as a backport of FELIX-766.

Changes from 1.2.0 to 1.2.1
---------------------------

* [2008-09-05] Fixed a performance regression that was caused by uncached 
  access to the bundle manifest headers. (FELIX-711)
* [2008-09-03] Fixed a bug in calculating the system bundle's exported 
  packages which added a null export package.

Changes from 1.0.4 to 1.2.0
---------------------------

* [2008-08-29] Support JAR-wide manifest package metadata. (FELIX-682)
* [2008-08-29] Throw an exception when installing a fragment that uses 
  features that we do not support.
* [2008-08-20] Improve error reporting when loading bundle classes using 
  Bundle.loadClass. 
* [2008-08-16] Fix attribute checking when resolving dynamic imports. 
  (FELIX-676)
* [2008-08-08] Implement singleton bundle support. (FELIX-102)
* [2008-08-06] Default to current security policy if no security extension is 
  installed in order to make Subject.doAs work. (FELIX-654)
* [2008-08-04] Return Bundle.getLastModified() for bundle URLs 
  lastModified(). (FELIX-582)
* [2008-08-04] Improve handling of improper resource URLs. (FELIX-577)
* [2008-08-01] Add necessary stub methods to implement new R4.1 methods. 
  (FELIX-595)
* [2008-08-01] Applied patch to properly return symbolic name when it has
  parameters. (FELIX-650)
* [2008-07-25] Fix some rollback issues after a bundle update throws an 
  exception. (FELIX-647)
* [2008-07-23] Modified manifest parser to be more lenient. (FELIX-641)
* [2008-07-07] Add support for the standard symbolic name for the system 
  bundle. (FELIX-602)
* [2008-06-01] Add initial fragment support for extending the host bundle 
  class path. (FELIX-29, FELIX-656)

Changes from 1.0.3 to 1.0.4
___________________________

* [2008-04-18] Check that the returned object from a service factory is an 
  instance of all classes named when the service was registered. (FELIX-540)
* [2008-04-13] Fix an issue when logging messages while holding framework 
  internal locks that could lead to a deadlock. For now we just disable 
  logging to log services inside the framework. (FELIX-536)
* [2008-04-13] Implemented various small performance improvments e.g.,
  we now cache filters and create an index for objectclass to improve 
  service lookup performance and don't use the BundleInfo to get the 
  bundle id but the BundleImpl directly. Furthermore, we added an index to 
  get bundles by id. 
* [2008-04-04] Fix an NoClassDefFoundError when trying to query the 
  framework classloader for whether a class is available or not. 
* [2008-03-19] Don't try to resolve extension bundles and fix a 
  classcastexception that could happen if more then one framework is around 
  and both have extensions installed. Furthermore, make extension bundles 
  use the system bundle context.
* [2008-03-07] Bundle.getResource does now check for AdminPermission. 
  (FELIX-150)
* [2008-03-06] Make urlhandlers work when a handler factory is already set. 
  Furthermore, it is now possible to have more then one framework running 
  in more then one classloader. (FELIX-38).
* [2008-03-05] Make LDAP filter reentrant.
* [2008-02-29] Refactored the IContent abstraction from the module loader 
  layer to provide more generic access to the content of the module. This 
  makes it possible that a bundle's class path could span multiple module's, 
  which will be necessary for fragments. (FELIX-29)
* [2008-02-27] Applied a patch to disable the class loading diagnostic message
  when the logger is not at the DEBUG level. (FELIX-500)
* [2008-02-15] Modified the service registry to use more fine-grained locking 
  to avoid callbacks to service factories while holding locks. (FELIX-489)

Changes from 1.0.1 to 1.0.3
---------------------------

* [2008-01-27] Moved framework docs to main, since the launcher examples now
  depend on main for the auto-property handling.
* [2008-01-25] Applied patches  to improve how Felix finds resources when
  getResources() is called. (FELIX-466, FELIX-467)
* [2008-01-25] Make FilterImpl.toString() add escape characters where needed.
  (FELIX-471)
* [2008-01-16] Fix a NPE on framework restart when extension bundles are
  installed.
* [2008-01-15] Try to fix a potential visibility issue on loading a class
  form a bundle where it seems to be possible that we create two classloaders
  instead of one.
* [2008-01-15] Modified boot delegation to not terminate when delegating to
  parent class loader for non-java.* packages. (FELIX-463)
* [2008-01-04] Fix some issues related to directories on the bundle class
  path. Specifically, leading slashes created an issue and are now stripped
  and entries were not being properly filtered when enumerating the contents
  of a class path directory. (FELIX-426)
* [2007-12-20] Modified logger to have all of its public methods be final to
  avoid it from being extended in undesired ways via the constructor supplied
  logger. (FELIX-428)
* [2007-12-20] The TCK has changed to verify that bundles do not depend on
  themselves, so we filter that case now.
* [2007-12-20] Applied patch from Guillaume Nodet to properly fire a framework
  error event only when a bundle cannot be resolved. (FELIX-441)
* [2007-12-19] Modified framework to accept a Logger instance so that host
  applications can do custom logging until the log service arrives. (FELIX-428)
* [2007-12-19] Add support for loading bundles on Google Android (FELIX-440).
* [2007-12-18] Improve native code loading - bundle installation will now
  fail in case a native library is not in the jar and we only use the first
  library of a given name. Furthermore, we now support .dylib extensions on
  the mac as well as others; should make it possible to use .netmodules as
  well. (FELIX-439)
* [2007-12-17] Make the win32 alias match any version of windows for native
  clauses. (FELIX-438)
* [2007-12-14] Removed auto-property processing out of the framework and
  into the default launcher, i.e, main. (FELIX-393)
* [2007-12-13] Fix a StackOverflowError in URLHandlers.createStreamHandler() 
  when creating URL on jamvm and Mika. This patch resolves an unfortunate 
  interaction between our ExtensionManager and the URLHandlers by making the 
  URLHandlers aware of the extension protocol. Pretty much like we do already 
  for the bundle protocol. (FELIX-435)
* [2007-11-26] Fix a small oversight in the extension manager that could lead
  to a null pointer exception and save some memory by creating less objects.
* [2007-11-26] Degrate to version 0.0.0 if we can not find the Felix.properties 
  for some reason and avoid a null pointer in this case.
* [2007-11-08] Reorganized usage count methods to better handle null
  reference checking in response to Karl Pauls seeing an NPE when trying to
  get a service that was already unregistered while shutting down the
  framework.
* [2007-11-06] Added a simple check to detect and work around a bug in J9.
  (FELIX-416)
* [2007-10-30] Change how the extension manager url stream handler handles 
  request to the root path in order to make some tomcat issue go away.
  (FELIX-414)
* [2007-10-26] Added support for "/" bundle resources as requested. (FELIX-383)
* [2007-10-24] Use system bundle when firing a framework error event when an 
  install error occurs.
* [2007-10-22] Fix a NPE when getEntryPaths is called on the system bundle. 
  (FELIX-394)
* [2007-10-16] Modifies bundle resource URL handling such that if a resource 
  URL points to a resource that does not exist, a bundle class path search 
  for the resource will be instigated and if any matching resource is found, 
  that one will be used instead. (FELIX-383)
* [2007-10-10] Auto-property handling now installs bundles into the default 
  bundle start level if a start level is not specified. (FELIX-359)
* [2007-10-08] Overwrite the URLStreamHandler.getHostAddress(URL) in the 
  ExtensionManager to immediately return null to prevent DNS lookup. 
  (FELIX-388)
* [2007-09-30] Resolved a concurrency issue that could result in the same 
  bundle being resolved more than once; also tried to simplify locking in 
  the core search policy implementation. (FELIX-381)

Changes from 1.0.0 to 1.0.1
---------------------------

* [2007-07-23] Fixed a bug in the framework shutdown process which was 
  causing threads calling Felix.stopAndWait() to not get notified that 
  the framework had shutdown. (FELIX-329)
* [2007-08-15] Fixed a bug in the LDAP filter which was not thread safe 
  on execution. (FELIX-338)
* [2007-08-17] Added support for persistent last used bundle ID to avoid
  re-use of bundle identifiers. (FELIX-339)
* [2007-08-23] Modified BundleImpl.getHeaders(Locale) to accept a null 
  locale. (FELIX-346)
* [2007-09-11] Added support to handle external termination of Felix 
  which was not handled or detected and prevented a restart of future 
  Felix instances in the same VM. (FELIX-363)
* [2007-09-12] Add support for Collection values in the LDAP filter to 
  match the 4.1 spec. 
* [2007-09-12] Fixed a bug in the LDAP filter where attributes where 
  limited to [a-zA-Z ] so didn't allow for e.g., numbers. (FELIX-361)
* [2007-09-13] Enable support for exporting the same package more than 
  once (FELIX-101).
* [2007-09-13] Returns the system bundle from a call to 
  PackageAdmin.getBundle(Class) in case the class comes from the 
  classloader (or one of its parents) that loaded Felix and the system 
  bundle exports the package.
* [2007-09-16] Fixed a bug in class space filtering in the service registry 
  that could result in class cast exceptions for service clients.
* [2007-09-16] Fixed a bug that prevented extension bundle exports to be 
  usable.

Changes from 0.8.0-incubator to 1.0.0
-------------------------------------

* [2007-01-18] Added support for bundle header localization. (FELIX-27)
* [2007-01-22] Modified framework resolver to support a generic
  capability/requirement model.
* [2007-01-22] Reorganized and centralized manifest parsing code and added
  support for resolver's generic capability/requirement model. (FELIX-98)
* [2007-01-22] Improved native library naming normalization. (FELIX-26)
* [2007-01-23] No longer eagerly resolving classes loaded from modules
  since this was causing verification errors with IBM J9.
* [2007-01-25] Added some support for execution environment checking.
  (FELIX-23)
* [2007-01-29] Added support for getAllServiceReferences(). (FELIX-32)
* [2007-01-31] Added Require-Bundle support to resolve using the generic
  capability/requirement model of the resolver. (FELIX-28)
* [2007-02-05] Fixed a bug in processor type normalization for x86-64
  processors.
* [2007-02-09] The resolver previously ignored packages that were pending
  removal when resolving new bundles, now it does not.
* [2007-02-09] Bundles are automatically refreshed when updated/uninstalled
  if none of their exported packages are in use.
* [2007-02-13] Added support for extension bundles. (FELIX-30)
* [2007-03-02] Added a Bundle.getBundleContext() method until actual
  support for OSGi R4.1.
* [2007-04-26] Modified Bundle.findEntries() to return URLs to directory
  entries as well as file entries.
* [2007-05-06] Modified LDAP evaluator to special case the fact that
  BigDecimal is not available in Foundation profile.
* [2007-05-21] Made some performance improvements in LDAP evaluation.
* [2007-05-22] Modified JAR file to include Service Tracker package.
* [2007-05-22] Improved concurrency handling around checking for already
  loaded classes and defining classes.
* [2007-06-05] Modified resource URLs to use port number rather than
  prepend information to the resource path.
* [2007-06-13] Improved dynamic imports to cycle through all available
  candidates when checking for class space consistency.
* [2007-06-18] Improved service registry filtering based on class versions
  to allow a bundle to register a service for a different version of class
  that it can access.
* [2007-06-21] Modified our "last ditch effort" to guess when to delegate
  to the system bundle to make it a little more robust.
* [2007-06-29] Fixed a bug in EventDispatcher that was causing asynchronous
  events to not be fired after stopping the framework instance and creating
  a new instance. (FELIX-314)
* [2007-07-03] Fixed a bug in EventDispatcher that would not correctly
  update a listener when it implemented multiple listener interfaces.
* [2007-07-04] Modified Felix framework class to implement the Bundle
  interface to improve the startup/shutdown sequence and to provide a
  simplified API for creating framework instances.
* [2007-07-11] Removed the PropertyResolver-related classes and now only
  use Maps for configuration properties. (FELIX-324)
