Community
Participate
Working Groups
Created attachment 189108 [details] Sample to reproduce the problem In http://logback.qos.ch/manual/configuration.html under "Viewing Status Messages", it appears you can configure a servlet for viewing logback status. I thought I would try this on Virgo. The attached web app (which requires ch.qos.logback.classic to be added to the user region packageImports property) gives the following stack trace when invoked at "http://localhost:8080/samplewab/lbClassicStatus": javax.servlet.ServletException: Error allocating a servlet instance org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.eclipse.virgo.web.tomcat.ApplicationNameTrackingValve.invoke(ApplicationNameTrackingValve.java:29) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Thread.java:680) root cause java.lang.NoClassDefFoundError: ch.qos.logback.classic.ViewStatusMessagesServlet not found from bundle [Sample WAB (SampleWAB)] org.springframework.osgi.util.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:112) org.springframework.osgi.util.BundleDelegatingClassLoader.loadClass(BundleDelegatingClassLoader.java:156) java.lang.ClassLoader.loadClass(ClassLoader.java:248) org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.doLoadClass(ChainedClassLoader.java:167) org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.loadClass(ChainedClassLoader.java:157) org.eclipse.gemini.web.tomcat.internal.loading.BundleWebappClassLoader.loadClass(BundleWebappClassLoader.java:272) java.lang.ClassLoader.loadClass(ClassLoader.java:248) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.eclipse.virgo.web.tomcat.ApplicationNameTrackingValve.invoke(ApplicationNameTrackingValve.java:29) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Thread.java:680) root cause org.eclipse.virgo.kernel.osgi.framework.ExtendedNoClassDefFoundError: javax/servlet/http/HttpServlet in KernelBundleClassLoader: [bundle=SampleWAB_1.0.0] org.eclipse.virgo.kernel.userregion.internal.equinox.KernelBundleClassLoader.loadClass(KernelBundleClassLoader.java:141) java.lang.ClassLoader.loadClass(ClassLoader.java:248) org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:345) org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:230) org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1208) org.springframework.osgi.util.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:99) org.springframework.osgi.util.BundleDelegatingClassLoader.loadClass(BundleDelegatingClassLoader.java:156) java.lang.ClassLoader.loadClass(ClassLoader.java:248) org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.doLoadClass(ChainedClassLoader.java:167) org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.loadClass(ChainedClassLoader.java:157) org.eclipse.gemini.web.tomcat.internal.loading.BundleWebappClassLoader.loadClass(BundleWebappClassLoader.java:272) java.lang.ClassLoader.loadClass(ClassLoader.java:248) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.eclipse.virgo.web.tomcat.ApplicationNameTrackingValve.invoke(ApplicationNameTrackingValve.java:29) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Thread.java:680) root cause java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) java.lang.ClassLoader.defineClass(ClassLoader.java:616) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:589) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:557) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:488) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:476) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:456) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) java.lang.ClassLoader.loadClass(ClassLoader.java:248) java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) java.lang.ClassLoader.defineClass(ClassLoader.java:616) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:589) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:557) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:488) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:476) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:456) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) org.eclipse.virgo.kernel.userregion.internal.equinox.KernelBundleClassLoader.loadClass(KernelBundleClassLoader.java:135) java.lang.ClassLoader.loadClass(ClassLoader.java:248) org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:345) org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:230) org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1208) org.springframework.osgi.util.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:99) org.springframework.osgi.util.BundleDelegatingClassLoader.loadClass(BundleDelegatingClassLoader.java:156) java.lang.ClassLoader.loadClass(ClassLoader.java:248) org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.doLoadClass(ChainedClassLoader.java:167) org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.loadClass(ChainedClassLoader.java:157) org.eclipse.gemini.web.tomcat.internal.loading.BundleWebappClassLoader.loadClass(BundleWebappClassLoader.java:272) java.lang.ClassLoader.loadClass(ClassLoader.java:248) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.eclipse.virgo.web.tomcat.ApplicationNameTrackingValve.invoke(ApplicationNameTrackingValve.java:29) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Thread.java:680) root cause java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) java.lang.ClassLoader.loadClass(ClassLoader.java:248) java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) java.lang.ClassLoader.defineClass(ClassLoader.java:616) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:589) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:557) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:488) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:476) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:456) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) java.lang.ClassLoader.loadClass(ClassLoader.java:248) java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) java.lang.ClassLoader.defineClass(ClassLoader.java:616) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:589) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:557) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:488) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:476) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:456) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) org.eclipse.virgo.kernel.userregion.internal.equinox.KernelBundleClassLoader.loadClass(KernelBundleClassLoader.java:135) java.lang.ClassLoader.loadClass(ClassLoader.java:248) org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:345) org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:230) org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1208) org.springframework.osgi.util.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:99) org.springframework.osgi.util.BundleDelegatingClassLoader.loadClass(BundleDelegatingClassLoader.java:156) java.lang.ClassLoader.loadClass(ClassLoader.java:248) org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.doLoadClass(ChainedClassLoader.java:167) org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.loadClass(ChainedClassLoader.java:157) org.eclipse.gemini.web.tomcat.internal.loading.BundleWebappClassLoader.loadClass(BundleWebappClassLoader.java:272) java.lang.ClassLoader.loadClass(ClassLoader.java:248) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.eclipse.virgo.web.tomcat.ApplicationNameTrackingValve.invoke(ApplicationNameTrackingValve.java:29) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Thread.java:680) I used the Equinox console to check whether the WAB can actually load this class and it can: osgi> clload javax.servlet.http.HttpServlet Successfully loaded [javax.servlet.http.HttpServlet] from: ... clload javax.servlet.http.HttpServlet Successfully loaded [javax.servlet.http.HttpServlet] from: ... 105 SampleWAB [exported by 56 com.springsource.javax.servlet] ... 56 com.springsource.javax.servlet ... I didn't have time to debug this in this sprint, so I am logging a bug for investigation in the fulness of time.
Thanks to Violeta for spotting the basic problem - that the medic core bundle in the kernel has optional imports for javax.servlet.* packages. So the solution is to reconfigure Virgo a little: * Copy com.springsource.javax.servlet-2.5.0.jar to lib/kernel * Add file:lib/kernel/com.springsource.javax.servlet-2.5.0.jar to launcher.Bundles in lib/org.eclipse.virgo.kernel.launch.properties * Add ch.qos.logback.* and, if it's not there already (depending on Virgo version), javax.* to packageImports in config/org.eclipse.virgo.kernel.userregion.properties