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)
