<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 19:08:49 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>OpenDaylight JIRA</title>
    <link>https://jira.opendaylight.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>8.20.10</version>
        <build-number>820010</build-number>
        <build-date>22-06-2022</build-date>
    </build-info>


<item>
            <title>[AAA-169] Web API impl PaxWebServer as OSGi service instead of utility</title>
                <link>https://jira.opendaylight.org/browse/AAA-169</link>
                <project id="10102" key="AAA">aaa</project>
                    <description>&lt;p&gt;This Improvement JIRA&#160;issue captures analysis, discussion and conclusion re. evolving &lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/68840/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/68840/&lt;/a&gt;&#160;with the&#160;Web API impl PaxWebServer as OSGi service instead of utility.&lt;/p&gt;

&lt;p&gt;I&apos;ll raise a follow-up change to&#160;c/68840 which makes PaxWebServer an OSGi service and provide details re. how that fails here.&lt;/p&gt;

&lt;p&gt;This is how according to you test AAA (according to Ryan):&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;curl -u admin:adminX &lt;a href=&quot;http://localhost:8181/auth/v1/users&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://localhost:8181/auth/v1/users&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</description>
                <environment></environment>
        <key id="29412">AAA-169</key>
            <summary>Web API impl PaxWebServer as OSGi service instead of utility</summary>
                <type id="10100" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="3" iconUrl="https://jira.opendaylight.org/images/icons/priorities/major.svg">Medium</priority>
                        <status id="5" iconUrl="https://jira.opendaylight.org/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Done</resolution>
                                        <assignee username="tpantelis">Tom Pantelis</assignee>
                                    <reporter username="vorburger">Michael Vorburger</reporter>
                        <labels>
                    </labels>
                <created>Tue, 13 Mar 2018 17:27:37 +0000</created>
                <updated>Wed, 14 Mar 2018 15:05:14 +0000</updated>
                            <resolved>Wed, 14 Mar 2018 15:05:14 +0000</resolved>
                                                                    <component>General</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                <comments>
                            <comment id="61723" author="vorburger" created="Tue, 13 Mar 2018 17:38:26 +0000"  >&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/69453/1/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/69453/1/&lt;/a&gt;&#160;(Patch Set 1) fails the SFT of &lt;tt&gt;odl-aaa-shiro&lt;/tt&gt; with this:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;-------------------------------------------------------
Running org.opendaylight.odlparent.featuretest.SingleFeatureTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 49.086 sec &amp;lt;&amp;lt;&amp;lt; FAILURE! - in org.opendaylight.odlparent.featuretest.SingleFeatureTest
installFeatureCatchAndLog(org.opendaylight.odlparent.featuretest.SingleFeatureTest)[repoUrl: file:/home/vorburger/dev/ODL/git/aaa/features/odl-aaa-shiro/target/feature/feature.xml, Feature: odl-aaa-shiro 0.8.0.SNAPSHOT]  Time elapsed: 48.194 sec  &amp;lt;&amp;lt;&amp;lt; ERROR!
org.opendaylight.odlparent.bundlestest.lib.SystemStateFailureException: diag failed; some bundles failed to start
diag: Failure {Installed=0, Resolved=6, Unknown=0, GracePeriod=0, Waiting=0, Starting=0, Active=344, Stopping=0, Failure=1}
1. NOK org.opendaylight.aaa.shiro:0.8.0.SNAPSHOT: OSGi state = Active, Karaf bundleState = Failure, due to: Blueprint
13/3/18 6:27 PM
Exception: 
Error when instantiating bean webInitializer of class org.opendaylight.aaa.shiro.web.env.WebInitializer
org.osgi.service.blueprint.container.ComponentDefinitionException: Error when instantiating bean webInitializer of class org.opendaylight.aaa.shiro.web.env.WebInitializer
	at org.apache.aries.blueprint.container.BeanRecipe.wrapAsCompDefEx(BeanRecipe.java:361)
	at org.apache.aries.blueprint.container.BeanRecipe.getInstanceFromType(BeanRecipe.java:351)
	at org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:282)
	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:830)
	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:811)
	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)
	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:255)
	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:186)
	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:704)
	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:410)
	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:275)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)
	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: There is already a Shiro environment associated with the current ServletContext.  Check if you have multiple EnvironmentLoader* definitions in your web.xml!
	at org.apache.shiro.web.env.EnvironmentLoader.initEnvironment(EnvironmentLoader.java:124)
	at org.apache.shiro.web.env.EnvironmentLoaderListener.contextInitialized(EnvironmentLoaderListener.java:58)
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext$3.call(HttpServiceContext.java:352)
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext$3.call(HttpServiceContext.java:348)
	at org.ops4j.pax.swissbox.core.ContextClassLoaderUtils.doWithClassLoader(ContextClassLoaderUtils.java:60)
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.callContextInitialized(HttpServiceContext.java:347)
	at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:816)
	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:345)
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.startContext(HttpServiceContext.java:432)
	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:778)
	at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262)
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doStart(HttpServiceContext.java:258)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
	at org.ops4j.pax.web.service.jetty.internal.JettyServerImpl$1.start(JettyServerImpl.java:306)
	at org.ops4j.pax.web.service.internal.HttpServiceStarted.end(HttpServiceStarted.java:1204)
	at org.ops4j.pax.web.service.internal.HttpServiceProxy.end(HttpServiceProxy.java:445)
	at Proxy5e1e3137_2bb2_4c0b_a106_5f1a4753fe8a.end(Unknown Source)
	at org.opendaylight.aaa.web.osgi.PaxWebServer$WebContextImpl.&amp;lt;init&amp;gt;(PaxWebServer.java:110)
	at org.opendaylight.aaa.web.osgi.PaxWebServer.registerWebContext(PaxWebServer.java:66)
	at Proxy27e80265_14ac_48e9_8bb3_dbdaab7f01f8.registerWebContext(Unknown Source)
	at Proxy023b2847_edf2_4472_a773_f2d2981d9f3c.registerWebContext(Unknown Source)
	at org.opendaylight.aaa.shiro.web.env.WebInitializer.&amp;lt;init&amp;gt;(WebInitializer.java:34)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.apache.aries.blueprint.utils.ReflectionUtils.newInstance(ReflectionUtils.java:331)
	at org.apache.aries.blueprint.container.BeanRecipe.newInstance(BeanRecipe.java:984)
	at org.apache.aries.blueprint.container.BeanRecipe.getInstanceFromType(BeanRecipe.java:349)
	... 22 more&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;but this is is just the impact (confusing), ignore above; the more interesting relevant part is that if you run with &lt;tt&gt;mvn -Dkaraf.keep.unpack=true clean install&lt;/tt&gt; then in &lt;tt&gt;aaa/features/odl-aaa-shiro/target/pax/*/data/log/karaf.log&lt;/tt&gt; you find this:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;2018-03-13T18:43:42,588 | ERROR | Blueprint Extender: 2 | EnvironmentLoader                | 160 - org.apache.shiro.web - 1.3.2 | Shiro environment initialization failed
org.apache.shiro.config.ConfigurationException: Unable to instantiate class [org.opendaylight.aaa.shiro.realm.TokenAuthRealm] for object named &apos;tokenAuthRealm&apos;.  Please ensure you&apos;ve specified the fully qualified class name correctly.
	at org.apache.shiro.config.ReflectionBuilder.createNewInstance(ReflectionBuilder.java:309) ~[?:?]
	at org.apache.shiro.config.ReflectionBuilder$InstantiationStatement.doExecute(ReflectionBuilder.java:927) ~[?:?]
	at org.apache.shiro.config.ReflectionBuilder$Statement.execute(ReflectionBuilder.java:887) ~[?:?]
	at org.apache.shiro.config.ReflectionBuilder$BeanConfigurationProcessor.execute(ReflectionBuilder.java:765) ~[?:?]
	at org.apache.shiro.config.ReflectionBuilder.buildObjects(ReflectionBuilder.java:260) ~[?:?]
	at org.apache.shiro.config.IniSecurityManagerFactory.buildInstances(IniSecurityManagerFactory.java:167) ~[?:?]
	at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:130) ~[?:?]
	at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:108) ~[?:?]
	at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:94) ~[?:?]
	at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:46) ~[?:?]
	at org.apache.shiro.config.IniFactorySupport.createInstance(IniFactorySupport.java:123) ~[?:?]
	at org.apache.shiro.util.AbstractFactory.getInstance(AbstractFactory.java:47) ~[?:?]
	at org.opendaylight.aaa.shiro.web.env.KarafIniWebEnvironment.createIniFromClusteredAppConfig(KarafIniWebEnvironment.java:60) ~[?:?]
	at org.opendaylight.aaa.shiro.web.env.KarafIniWebEnvironment.init(KarafIniWebEnvironment.java:72) ~[?:?]
	at org.apache.shiro.util.LifecycleUtils.init(LifecycleUtils.java:45) ~[?:?]
	at org.apache.shiro.util.LifecycleUtils.init(LifecycleUtils.java:40) ~[?:?]
	at org.apache.shiro.web.env.EnvironmentLoader.createEnvironment(EnvironmentLoader.java:221) ~[?:?]
	at org.apache.shiro.web.env.EnvironmentLoader.initEnvironment(EnvironmentLoader.java:133) ~[?:?]
	at org.apache.shiro.web.env.EnvironmentLoaderListener.contextInitialized(EnvironmentLoaderListener.java:58) ~[?:?]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext$3.call(HttpServiceContext.java:352) ~[325:org.ops4j.pax.web.pax-web-jetty:6.0.7]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext$3.call(HttpServiceContext.java:348) ~[325:org.ops4j.pax.web.pax-web-jetty:6.0.7]
	at org.ops4j.pax.swissbox.core.ContextClassLoaderUtils.doWithClassLoader(ContextClassLoaderUtils.java:60) ~[325:org.ops4j.pax.web.pax-web-jetty:6.0.7]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.callContextInitialized(HttpServiceContext.java:347) ~[325:org.ops4j.pax.web.pax-web-jetty:6.0.7]
	at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:816) ~[176:org.eclipse.jetty.server:9.3.14.v20161028]
	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:345) ~[177:org.eclipse.jetty.servlet:9.3.14.v20161028]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.startContext(HttpServiceContext.java:432) ~[325:org.ops4j.pax.web.pax-web-jetty:6.0.7]
	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:778) ~[176:org.eclipse.jetty.server:9.3.14.v20161028]
	at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262) ~[177:org.eclipse.jetty.servlet:9.3.14.v20161028]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doStart(HttpServiceContext.java:258) ~[325:org.ops4j.pax.web.pax-web-jetty:6.0.7]
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ~[179:org.eclipse.jetty.util:9.3.14.v20161028]
	at org.ops4j.pax.web.service.jetty.internal.JettyServerImpl$1.start(JettyServerImpl.java:306) ~[325:org.ops4j.pax.web.pax-web-jetty:6.0.7]
	at org.ops4j.pax.web.service.internal.HttpServiceStarted.registerFilter(HttpServiceStarted.java:620) ~[?:?]
	at org.ops4j.pax.web.service.internal.HttpServiceStarted.registerFilter(HttpServiceStarted.java:592) ~[?:?]
	at org.ops4j.pax.web.service.internal.HttpServiceProxy.registerFilter(HttpServiceProxy.java:208) ~[?:?]
	at Proxy3bbb2595_68aa_4c3e_87a0_77692ed1d73c.registerFilter(Unknown Source) ~[?:?]
	at org.opendaylight.aaa.web.osgi.PaxWebServer$WebContextImpl.registerFilter(PaxWebServer.java:118) ~[206:org.opendaylight.aaa.web.osgi-impl:0.8.0.SNAPSHOT]
	at org.opendaylight.aaa.web.osgi.PaxWebServer$WebContextImpl.lambda$new$1(PaxWebServer.java:101) ~[206:org.opendaylight.aaa.web.osgi-impl:0.8.0.SNAPSHOT]
	at java.util.ArrayList.forEach(ArrayList.java:1257) [?:?]
	at java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1080) [?:?]
	at org.opendaylight.aaa.web.osgi.PaxWebServer$WebContextImpl.&amp;lt;init&amp;gt;(PaxWebServer.java:100) [206:org.opendaylight.aaa.web.osgi-impl:0.8.0.SNAPSHOT]
	at org.opendaylight.aaa.web.osgi.PaxWebServer.registerWebContext(PaxWebServer.java:66) [206:org.opendaylight.aaa.web.osgi-impl:0.8.0.SNAPSHOT]
	at Proxyee179a92_63e8_41ff_8c2d_0221bd713d1c.registerWebContext(Unknown Source) [?:?]
	at Proxy9290277a_840a_452c_940e_c4af96e018f9.registerWebContext(Unknown Source) [?:?]
	at org.opendaylight.aaa.shiro.web.env.WebInitializer.&amp;lt;init&amp;gt;(WebInitializer.java:34) [203:org.opendaylight.aaa.shiro:0.8.0.SNAPSHOT]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [?:?]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [?:?]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423) [?:?]
	at org.apache.aries.blueprint.utils.ReflectionUtils.newInstance(ReflectionUtils.java:331) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.container.BeanRecipe.newInstance(BeanRecipe.java:984) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.container.BeanRecipe.getInstanceFromType(BeanRecipe.java:349) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:282) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:830) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:811) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79) [17:org.apache.aries.blueprint.core:1.8.3]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
	at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:255) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:186) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:704) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:410) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:275) [17:org.apache.aries.blueprint.core:1.8.3]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
	at org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106) [17:org.apache.aries.blueprint.core:1.8.3]
	at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48) [17:org.apache.aries.blueprint.core:1.8.3]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
	at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: org.apache.shiro.util.UnknownClassException: Unable to load class named [org.opendaylight.aaa.shiro.realm.TokenAuthRealm] from the thread context, current, or system/application ClassLoaders.  All heuristics have been exhausted.  Class could not be found.
	at org.apache.shiro.util.ClassUtils.forName(ClassUtils.java:152) ~[?:?]
	at org.apache.shiro.util.ClassUtils.newInstance(ClassUtils.java:168) ~[?:?]
	at org.apache.shiro.config.ReflectionBuilder.createNewInstance(ReflectionBuilder.java:302) ~[?:?]
	... 72 more&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When you debug this, you find that ultimately this is that TCCL class loading issue which I had initially hit. As explained on the review of c/68840, simply setting the TCCL ourselves does not help, because Pax Web will overwrite it.&lt;/p&gt;

&lt;p&gt;Just for the record, I&apos;ll copy/paste this from c/68840: &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt; I have no doubt that it is possible to one way or another do something very smart and eventually get Shiro working with more time, but I think it&apos;s the wrong approach here, because of what I explained above:  It should be simple to use this and switch from declarative web.xml to this API.  We cannot have to debug every 3rd party web framework to make more OSGi compliant than it would have to be if one had used web.xml.  To the best of my abilities, this as-is achieves that.  The fact that PaxWebServer is not registered as an OSGi service but is used directly by bundles is a very minor detail, to me. I&apos;m loosing interest in further tweaking this, and am against  requring future migration from web.xml to this API in other projects require a Ph.D. in classloadology.&lt;/p&gt;&lt;/blockquote&gt;</comment>
                            <comment id="61739" author="vorburger" created="Wed, 14 Mar 2018 10:51:01 +0000"  >&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/69475/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/69475/&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_11400" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i03blr:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>