[
https://issues.apache.org/jira/browse/FELIX-5613?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15980158#comment-15980158
]
ASF GitHub Bot commented on FELIX-5613:
---------------------------------------
GitHub user neilxb opened a pull request:
https://github.com/apache/felix/pull/105
FELIX-5613 - SCR bundle fails to start without Config Admin
RegionConfigurationSupport does not need to directly implement
ConfigurationListener. By registering an anonymous inner class, the class
loading errors are isolated to this class and do not prevent the bundle from
starting.
**Testing Note**
I tried **very** hard to write a PAX Exam integration test that would prove
SCR works when there is no exporter of `org.osgi.service.cm`, but I believe
this is impossible due to a limitation of PAX Exam. The testing framework
always contains the OSGi Compendium bundle version 4.2.0
(`org.osgi:org.osgi.compendium:4.2.0`) because it is a dependency of PAX.
Compendium exports `org.osgi.service.cm` version 1.3.0. It cannot be removed as
far as I can tell.
I have verified manually that SCR works in both a framework with Config
Admin and a framework without Config Admin. However without an automated test
it is always possible somebody will make a change that makes SCR dependent on
Config Admin once again. I would suggest migrating to bnd-testing-maven-plugin
as this does not pollute the testing framework with dependencies.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/njbartlett/felix FELIX-5613
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/felix/pull/105.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #105
----
commit 2b8dbb83289bf37bb4563b30c05a826fd777ea71
Author: Neil Bartlett <[email protected]>
Date: 2017-04-22T18:05:53Z
FELIX-5613 - SCR bundle fails to start without Config Admin
RegionConfigurationSupport does not need to directly implement Config-
uartionListener. By registering an anonymous inner class, the class
loading errors can be isolated to this class rather than bubbling up
to the bundle activator.
----
> SCR bundle fails to start without Config Admin
> ----------------------------------------------
>
> Key: FELIX-5613
> URL: https://issues.apache.org/jira/browse/FELIX-5613
> Project: Felix
> Issue Type: Bug
> Components: Declarative Services (SCR)
> Reporter: Neil Bartlett
>
> SCR 2.0.8 still imports package {{org.osgi.service.cm}} as optional, but it
> does not start when there is no export of that package available.
> I know that SCR should be able to work without a Config Admin implementation
> but it clearly does not work at all without an import of the API package,
> therefore it should not be marked as an optional import.
> Stack trace:
> {noformat}
> ! Failed to start bundle org.apache.felix.scr-2.0.8, exception activator
> error org/osgi/service/cm/ConfigurationListener from:
> java.lang.ClassLoader:defineClass1#-2
> org.osgi.framework.BundleException: Activator start error in bundle
> org.apache.felix.scr [5].
> at org.apache.felix.framework.Felix.activateBundle(Felix.java:2276)
> at org.apache.felix.framework.Felix.startBundle(Felix.java:2144)
> [... snip ...]
> Caused by: java.lang.NoClassDefFoundError:
> org/osgi/service/cm/ConfigurationListener
> at java.lang.ClassLoader.defineClass1(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
> at
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.defineClass(BundleWiringImpl.java:2370)
> at
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2154)
> at
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1542)
> at
> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79)
> at
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> at org.apache.felix.scr.impl.Activator.doStart(Activator.java:157)
> at
> org.apache.felix.utils.extender.AbstractExtender.start(AbstractExtender.java:114)
> at org.apache.felix.scr.impl.Activator.restart(Activator.java:142)
> at
> org.apache.felix.scr.impl.config.ScrConfigurationImpl.configure(ScrConfigurationImpl.java:196)
> at
> org.apache.felix.scr.impl.config.ScrConfigurationImpl.start(ScrConfigurationImpl.java:117)
> at org.apache.felix.scr.impl.Activator.start(Activator.java:110)
> at
> org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
> at org.apache.felix.framework.Felix.activateBundle(Felix.java:2226)
> ... 11 more
> Caused by: java.lang.ClassNotFoundException:
> org.osgi.service.cm.ConfigurationListener not found by org.apache.felix.scr
> [5]
> at
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1574)
> at
> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79)
> at
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> ... 27 more
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)