OSGi Compatible Bundles
The following Ehcache artifacts are also valid OSGi bundles:
- 
org.ehcache:ehcacheincludes: api,core,impl,xml,107
- 
org.ehcache:ehcache-clustered
- 
org.ehcache:ehcache-transactions
- 
org.ehcache.modules:ehcache-api
- 
org.ehcache.modules:ehcache-core
- 
org.ehcache.modules:ehcache-impl
- 
org.ehcache.modules:ehcache-xml
- 
org.ehcache.modules:ehcache-107
Ehcache Service Lookup & OSGi
To allow for the extension of its feature set and to support the internal modularity of the source code, Ehcache uses
a java.util.ServiceLoader based lookup system to discover the set of available functionalities at runtime. When
deployed as bundles in an OSGi environment this lookup mechanism is replaced by a lookup mechanism based on OSGi
components. Activation of the bundle containing the Ehcache core code will result in the following logging
org.ehcache[org.ehcache.core.osgi.EhcacheActivator] : Detected OSGi Environment (core is in bundle: org.ehcache [13]): Using OSGi Based Service LoadingIn this mode, to enable transactional and/or clustered caching it is sufficient to just provision the
org.ehcache:ehcache-transactions and/or org.ehcache:ehcache-clustered bundles alongside the org.ehcache:ehcache
main bundle
When in this mode of operation it is also possible to provision the Ehcache modules as independent bundles. A minimal Ehcache configuration will need:
- 
org.ehcache.modules:ehcache-api
- 
org.ehcache.modules:ehcache-core
- 
org.ehcache.modules:ehcache-impl
Additional features can then be added by including one or more of:
- 
org.ehcache.modules:ehcache-xml
- 
org.ehcache.modules:ehcache-107
- 
org.ehcache:ehcache-clustered
- 
org.ehcache:ehcache-transactions
Reverting to JDK Service Lookup
If the org.ehcache.core.osgi property is set to "false" as either a framework or system property then Ehcache will
fall back to the JDK based service lookup mechanism. This will result in the following log line:
org.ehcache[org.ehcache.core.osgi.EhcacheActivator] : Detected OSGi Environment (core is in bundle: org.ehcache [13]): OSGi Based Service Loading Disabled Via System/Framework Property - Extensions Outside This Bundle Will Not Be DetectedEnabling debug logging will show the detected set of services:
org.ehcache[org.ehcache.core.osgi.EhcacheActivator] : JDK Service Loading Sees:
	org.ehcache.impl.internal.store.heap.OnHeapStore$Provider
	org.ehcache.impl.internal.store.offheap.OffHeapStore$Provider
	org.ehcache.impl.internal.store.disk.OffHeapDiskStore$Provider
	org.ehcache.impl.internal.store.tiering.TieredStore$Provider
	org.ehcache.impl.internal.store.tiering.CompoundCachingTier$Provider
	org.ehcache.core.spi.time.TimeSourceService
	org.ehcache.spi.serialization.SerializationProvider
	org.ehcache.spi.loaderwriter.CacheLoaderWriterProvider
	org.ehcache.core.events.CacheEventListenerProvider
	org.ehcache.core.spi.service.ExecutionService
	org.ehcache.core.spi.service.LocalPersistenceService
	org.ehcache.impl.persistence.DefaultDiskResourceService
	org.ehcache.spi.loaderwriter.WriteBehindProvider
	org.ehcache.impl.internal.events.CacheEventDispatcherFactoryImpl
	org.ehcache.spi.copy.CopyProvider
	org.ehcache.core.spi.store.heap.SizeOfEngineProvider
	org.ehcache.core.spi.service.StatisticsService
	org.ehcache.spi.resilience.ResilienceStrategyProviderIn this configuration only features in the bundle with the Ehcache core classes are available. Using this service lookup
mechanism only the org.ehcache:ehcache (bundle symbolic name: org.ehcache) bundle can be succesfully deployed. Use
of this bundle provides for most of the regular Ehcache features, but does not support transactional or clustered
caching.
In order to use transactional or clustered caches in this environment the user must create their own bundle by merging
the org.ehcache:ehcache bundle with the org.ehcache:ehcache-clustered and/or org.ehcache:ehcache-transactions
bundles.  Care must be taken when creating the custom bundle that all of the META-INF/services files are correctly
merged to allow for correct service discovery.