Hi,
I am trying to start Karaf embedded in a Webapp using Tomcat 8.0.35 and Java
1.7.0_79.
The Startup is done using a ServletContextListener, which simply creates a
Main instance and calls launch() method.
Main main = new Main( new String[ 0 ] );
try {
main.launch();
this.framework = main.getFramework();
} catch ( Exception e ) {
main = null;
e.printStackTrace();
// logger.error( "Error starting Karaf", e );
}
The startup bundles defined in startup.properties are the same as in the
4.0.5 distribution, which perfectly starts up standalone:
# Bundles to be started on startup, with startlevel
mvn\:org.apache.sshd/sshd-core/0.14.0 = 20
mvn\:org.apache.felix/org.apache.felix.metatype/1.1.2 = 5
mvn\:org.apache.karaf.services/org.apache.karaf.services.eventadmin/4.0.5 =
5
mvn\:org.ops4j.pax.url/pax-url-aether/2.4.7 = 5
mvn\:org.ops4j.pax.logging/pax-logging-api/1.8.5 = 8
mvn\:org.ops4j.pax.logging/pax-logging-service/1.8.5 = 8
mvn\:org.apache.felix/org.apache.felix.configadmin/1.8.8 = 10
mvn\:org.apache.felix/org.apache.felix.fileinstall/3.5.4 = 11
mvn\:org.apache.karaf.features/org.apache.karaf.features.core/4.0.5 = 15
The error on startup is the following:
Exception in thread "FelixStartLevel" java.lang.NoClassDefFoundError:
java/util/logging/LogRecord
at
org.ops4j.pax.logging.service.internal.JdkHandler.publish(JdkHandler.java:82)
at java.util.logging.Logger.log(Logger.java:616)
at java.util.logging.Logger.doLog(Logger.java:641)
at java.util.logging.Logger.logp(Logger.java:757)
at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:180)
at org.apache.juli.logging.DirectJDKLog.debug(DirectJDKLog.java:103)
at
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1174)
at java.lang.ClassLoader.loadClass(ClassLoader.java:412)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.apache.felix.framework.Logger.doLog(Logger.java:89)
at org.apache.felix.framework.Logger._log(Logger.java:118)
at org.apache.felix.framework.Logger.log(Logger.java:62)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1376)
at
org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
at java.lang.Thread.run(Thread.java:745)
The complete log is attached here:
startup_log.txt
<http://karaf.922171.n3.nabble.com/file/n4046969/startup_log.txt>
Can anybody help to understand, why the WebappClassLoader does not delegate
to the JRE classes for the boot bundles?
Workaround trials:
I have found out, that the responsible bundles are the two
org.ops4j.pax.logging bundles. I tried to use slf4j/log4j bundles instead
and added felix.log to meet the requirements of felix.metatype:
# mvn\:org.ops4j.pax.logging/pax-logging-api/1.8.5 = 8
# mvn\:org.ops4j.pax.logging/pax-logging-service/1.8.5 = 8
mvn\:org.slf4j/slf4j.log4j12/1.7.21 = 8
mvn\:org.slf4j/slf4j.api/1.7.21 = 8
mvn\:org.apache.log4j/log4j/1.2.17 = 8
mvn\:org.apache.felix/org.apache.felix.log/1.0.1 = 8
This starts up all boot bundles, but leads to a not even less strange
exception when installing the boot features:
2016-06-28 11:57:39,083 [7-thread-1] WARN
org.apache.karaf.features.internal.osgi.Activator () - Error
starting activator
java.lang.IllegalStateException: Invalid BundleContext.
at
org.apache.felix.framework.BundleContextImpl.checkValidity(BundleContextImpl.java:511)
at
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:328)
at
org.apache.karaf.util.tracker.BaseActivator.registerMBean(BaseActivator.java:290)
at
org.apache.karaf.features.internal.osgi.Activator.doStart(Activator.java:264)
at
org.apache.karaf.util.tracker.BaseActivator.run(BaseActivator.java:233)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Log attached:
startup_log2.txt
<http://karaf.922171.n3.nabble.com/file/n4046969/startup_log2.txt>
Any help would be appreciated.
Hans-Arno
P.S.: I am a OSGi/Karaf newbee
--
View this message in context:
http://karaf.922171.n3.nabble.com/Embedding-Karaf-4-0-5-in-web-app-NoClassDefFoundError-on-startup-tp4046969.html
Sent from the Karaf - User mailing list archive at Nabble.com.