You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Nick Williams <ni...@nicholaswilliams.net> on 2013/03/21 22:31:50 UTC

Executable Tomcat JAR/WAR executes fine standalone, classloading errors in JNLP

I have built an executable Tomcat JAR file. It has all of the Tomcat classes and dependencies zipped into one big JAR. Inside that JAR is also a WAR file, the native DLL, and logging.properties. My com.ul.io.Bootstrap class creates an .extract directory in the CWD, extracts the native DLL, WAR file and logging.properties, configures Tomcat logging, configures a Tomcat class instance, adds the WAR file is a web app, starts the Tomcat class instance, and waits for it.

If I run this JAR like this:

>java -jar PeripheralProxy-1.0.0.SNAPSHOT.jar

Everything works fine. It starts up, I can go to the application, no errors in the logs ... everything is perfect. The output from stdout is below if you're interested. Now, I take the same JAR file and sign it with the jar signer. To make sure nothing got messed up, I run the signed JAR file:

>java -jar PeripheralProxy-1.0.0.SNAPSHOT-signed.jar

This worked to. Exact same stdout output, application works fine. Perfect! Next I created a JNLP file with, among other things, <security> set to <all-permissions />. I open the JNLP file in my browser. It accepts the certificate and starts the JAR file. First problem is logging doesn't work. Not sure why. I had to enable the Java console in Java Control Panel to see what was going on.

1) It created the .extract directory, so the first step worked.
2) It extracted the WAR file, native DLL and logging.properties without a problem, so that worked, too.
3) It could not deploy the application. At this point it began getting class loading errors.

The output from the Java console is also below. Anyone have a clue what went wrong? Obviously the classes ARE in the JAR file, otherwise it wouldn't work from the command line.

STDOUT CONTENTS: Successful run from command line
--------------------------------------------------
C:\Users\Nicholas\Desktop\PeripheralProxy\TomcatRunner\target>java -jar PeripheralProxy-1.0.0.SNAPSHOT.jar
jar:file:/C:/Users/Nicholas/Desktop/PeripheralProxy/TomcatRunner/target/PeripheralProxy-1.0.0.SNAPSHOT.jar!/PeripheralProxy.war
Mar 21, 2013 4:22:36 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.27 using APR version 1.4.6.
Mar 21, 2013 4:22:36 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Mar 21, 2013 4:22:36 PM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.1d 5 Feb 2013)
Mar 21, 2013 4:22:37 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-8973"]
Mar 21, 2013 4:22:37 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Mar 21, 2013 4:22:37 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.0.0-dev
Mar 21, 2013 4:22:37 PM org.apache.catalina.startup.ContextConfig getDefaultWebXmlFragment
INFO: No global web.xml found
Mar 21, 2013 4:22:38 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-apr-8973"]

CONSOLE CONTENTS: Failed run from JNLP
--------------------------------------------------
Java Web Start 11.0.2.79
Using JRE version 1.8.0-ea-b79 Java HotSpot(TM) 64-Bit Server VM
User home directory = C:\Users\Nicholas
----------------------------------------------------
c:   clear console window
f:   finalize objects on finalization queue
g:   garbage collect
h:   display this help message
m:   print memory usage
o:   trigger logging
p:   reload proxy configuration
q:   hide console
r:   reload policy configuration
s:   dump system and deployment properties
t:   dump thread list
v:   dump thread stack
0-5: set trace level to <n>
----------------------------------------------------
	Match: beginTraversal
Match: digest selected JREDesc: JREDesc[version 1.8+, heap=-1--1, args=null, href=http://java.sun.com/products/autodl/j2se, sel=false, null, null], JREInfo: JREInfo for index 0:
    platform is: 1.8
    product is: 1.8.0-ea
    location is: http://java.sun.com/products/autodl/j2se
    path is: C:\Program Files\Java\jre8\bin\javaw.exe
    args is: 
    native platform is: Windows, amd64 [ x86_64, 64bit ]
    JavaFX runtime is: JavaFX 8.0.0 found at C:\Program Files\Java\jre8\
    enabled is: true
    registered is: true
    system is: true

	Match: ignoring maxHeap: -1
	Match: ignoring InitHeap: -1
	Match: digesting vmargs: null
	Match: digested vmargs: [JVMParameters: isSecure: true, args: ]
	Match: JVM args after accumulation: [JVMParameters: isSecure: true, args: ]
	Match: digest LaunchDesc: http://ohmqa.purehq.com/peripheral-proxy.jnlp
	Match: digest properties: []
	Match: JVM args: [JVMParameters: isSecure: true, args: ]
	Match: endTraversal ..
	Match: JVM args final: 
	Match: Running JREInfo Version    match: 1.8.0.ea == 1.8.0.ea
	 Match: Running JVM args match: have:<>  satisfy want:<>
--- calling askUSer with ainfo: Appinfo:
type = 1
title = Launch Peripheral Proxy with Web Start
vendor = UL, LLC
from = http://ohmqa.purehq.com/peripheral-proxy.jnlp
security = 2
lapURL = http://ohmqa.purehq.com/peripheral-proxy.jnlp

jar:http://ohmqa.purehq.com/PeripheralProxy-1.0.0.SNAPSHOT-signed.jar!/PeripheralProxy.war
Handler error
java.lang.ClassNotFoundException: org.apache.juli.FileHandler
	at java.net.URLClassLoader$1.run(URLClassLoader.java:365)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:354)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:353)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:521)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:464)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:288)
	at java.util.logging.LogManager$2.run(LogManager.java:282)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.util.logging.LogManager.readPrimordialConfiguration(LogManager.java:280)
	at java.util.logging.LogManager.getLogManager(LogManager.java:263)
	at java.util.logging.Logger.<init>(Logger.java:280)
	at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1193)
	at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1190)
	at java.util.logging.LogManager$1.run(LogManager.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.util.logging.LogManager.<clinit>(LogManager.java:172)
	at java.util.logging.Logger.getLogger(Logger.java:358)
	at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:68)
	at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:188)
	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:99)
	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:114)
	at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:165)
	at org.apache.catalina.util.LifecycleBase.<clinit>(LifecycleBase.java:37)
	at org.apache.catalina.startup.Tomcat.getHost(Tomcat.java:426)
	at org.apache.catalina.startup.Tomcat.addWebapp(Tomcat.java:192)
	at com.ul.io.Bootstrap.run(Bootstrap.java:68)
	at com.ul.io.Bootstrap.main(Bootstrap.java:200)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:487)
	at com.sun.javaws.Launcher.executeApplication(Unknown Source)
	at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
	at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
	at com.sun.javaws.Launcher.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:722)
Handler error
java.lang.ClassNotFoundException: org.apache.juli.FileHandler
	at java.net.URLClassLoader$1.run(URLClassLoader.java:365)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:354)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:353)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:521)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:464)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:288)
	at java.util.logging.LogManager$2.run(LogManager.java:282)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.util.logging.LogManager.readPrimordialConfiguration(LogManager.java:280)
	at java.util.logging.LogManager.getLogManager(LogManager.java:263)
	at java.util.logging.Logger.<init>(Logger.java:280)
	at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1193)
	at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1190)
	at java.util.logging.LogManager$1.run(LogManager.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.util.logging.LogManager.<clinit>(LogManager.java:172)
	at java.util.logging.Logger.getLogger(Logger.java:358)
	at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:68)
	at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:188)
	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:99)
	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:114)
	at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:165)
	at org.apache.catalina.util.LifecycleBase.<clinit>(LifecycleBase.java:37)
	at org.apache.catalina.startup.Tomcat.getHost(Tomcat.java:426)
	at org.apache.catalina.startup.Tomcat.addWebapp(Tomcat.java:192)
	at com.ul.io.Bootstrap.run(Bootstrap.java:68)
	at com.ul.io.Bootstrap.main(Bootstrap.java:200)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:487)
	at com.sun.javaws.Launcher.executeApplication(Unknown Source)
	at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
	at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
	at com.sun.javaws.Launcher.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:722)
Handler error
java.lang.ClassNotFoundException: org.apache.juli.FileHandler
	at java.net.URLClassLoader$1.run(URLClassLoader.java:365)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:354)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:353)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:521)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:464)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:288)
	at java.util.logging.LogManager$2.run(LogManager.java:282)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.util.logging.LogManager.readPrimordialConfiguration(LogManager.java:280)
	at java.util.logging.LogManager.getLogManager(LogManager.java:263)
	at java.util.logging.Logger.<init>(Logger.java:280)
	at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1193)
	at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1190)
	at java.util.logging.LogManager$1.run(LogManager.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.util.logging.LogManager.<clinit>(LogManager.java:172)
	at java.util.logging.Logger.getLogger(Logger.java:358)
	at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:68)
	at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:188)
	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:99)
	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:114)
	at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:165)
	at org.apache.catalina.util.LifecycleBase.<clinit>(LifecycleBase.java:37)
	at org.apache.catalina.startup.Tomcat.getHost(Tomcat.java:426)
	at org.apache.catalina.startup.Tomcat.addWebapp(Tomcat.java:192)
	at com.ul.io.Bootstrap.run(Bootstrap.java:68)
	at com.ul.io.Bootstrap.main(Bootstrap.java:200)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:487)
	at com.sun.javaws.Launcher.executeApplication(Unknown Source)
	at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
	at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
	at com.sun.javaws.Launcher.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:722)
Handler error
java.lang.ClassNotFoundException: org.apache.juli.FileHandler
	at java.net.URLClassLoader$1.run(URLClassLoader.java:365)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:354)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:353)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:521)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:464)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:377)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:373)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:373)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:452)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:288)
	at java.util.logging.LogManager$2.run(LogManager.java:282)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.util.logging.LogManager.readPrimordialConfiguration(LogManager.java:280)
	at java.util.logging.LogManager.getLogManager(LogManager.java:263)
	at java.util.logging.Logger.<init>(Logger.java:280)
	at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1193)
	at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1190)
	at java.util.logging.LogManager$1.run(LogManager.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.util.logging.LogManager.<clinit>(LogManager.java:172)
	at java.util.logging.Logger.getLogger(Logger.java:358)
	at org.apache.juli.logging.DirectJDKLog.<init>(DirectJDKLog.java:68)
	at org.apache.juli.logging.DirectJDKLog.getInstance(DirectJDKLog.java:188)
	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:99)
	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:114)
	at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:165)
	at org.apache.catalina.util.LifecycleBase.<clinit>(LifecycleBase.java:37)
	at org.apache.catalina.startup.Tomcat.getHost(Tomcat.java:426)
	at org.apache.catalina.startup.Tomcat.addWebapp(Tomcat.java:192)
	at com.ul.io.Bootstrap.run(Bootstrap.java:68)
	at com.ul.io.Bootstrap.main(Bootstrap.java:200)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:487)
	at com.sun.javaws.Launcher.executeApplication(Unknown Source)
	at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
	at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
	at com.sun.javaws.Launcher.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:722)
JNLPClassLoader: Finding library tcnative-1.dll
Mar 21, 2013 4:07:43 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.27 using APR version 1.4.6.
Mar 21, 2013 4:07:43 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Mar 21, 2013 4:07:44 PM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.1d 5 Feb 2013)
Mar 21, 2013 4:07:44 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-8973"]
Mar 21, 2013 4:07:45 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Mar 21, 2013 4:07:45 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.0.0-dev
Mar 21, 2013 4:07:45 PM org.apache.catalina.startup.ContextConfig getDefaultWebXmlFragment
INFO: No global web.xml found
Mar 21, 2013 4:07:45 PM org.apache.tomcat.util.digester.Digester startElement
SEVERE: Begin event threw exception
java.lang.ClassNotFoundException: org.apache.catalina.deploy.SessionConfig
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1465)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1310)
	at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:116)
	at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1171)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1328)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2722)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:492)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
	at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1432)
	at org.apache.catalina.startup.ContextConfig.parseWebXml(ContextConfig.java:1756)
	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1156)
	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:814)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:321)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5100)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1390)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1380)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)

Mar 21, 2013 4:07:45 PM org.apache.catalina.startup.ContextConfig parseWebXml
SEVERE: Parse error in application web.xml file at jar:file:/C:/Users/Nicholas/Desktop/.extract/PeripheralProxy.war!/WEB-INF/web.xml
org.xml.sax.SAXParseException; systemId: jar:file:/C:/Users/Nicholas/Desktop/.extract/PeripheralProxy.war!/WEB-INF/web.xml; lineNumber: 19; columnNumber: 21; Error at (19, 21) : org.apache.catalina.deploy.SessionConfig
	at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:1922)
	at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:1954)
	at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1174)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1328)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2722)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:492)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
	at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1432)
	at org.apache.catalina.startup.ContextConfig.parseWebXml(ContextConfig.java:1756)
	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1156)
	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:814)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:321)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5100)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1390)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1380)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: org.apache.catalina.deploy.SessionConfig
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1465)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1310)
	at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:116)
	at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1171)
	... 25 more

Mar 21, 2013 4:07:45 PM org.apache.catalina.startup.ContextConfig parseWebXml
SEVERE: Occurred at line 19 column 21
Mar 21, 2013 4:07:45 PM org.apache.catalina.startup.ContextConfig configureStart
SEVERE: Marking this application unavailable due to previous error(s)
Mar 21, 2013 4:07:45 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error getConfigured
Mar 21, 2013 4:07:45 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [] startup failed due to previous errors
Mar 21, 2013 4:07:45 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
WARNING: JDBC driver de-registration failed for web application []
java.lang.NullPointerException
	at org.apache.catalina.loader.WebappClassLoader.clearReferencesJdbc(WebappClassLoader.java:1788)
	at org.apache.catalina.loader.WebappClassLoader.clearReferences(WebappClassLoader.java:1724)
	at org.apache.catalina.loader.WebappClassLoader.stop(WebappClassLoader.java:1640)
	at org.apache.catalina.loader.WebappLoader.stopInternal(WebappLoader.java:491)
	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
	at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5456)
	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1390)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1380)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)

Mar 21, 2013 4:07:45 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-apr-8973"]


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Executable Tomcat JAR/WAR executes fine standalone, classloading errors in JNLP

Posted by Nick Williams <ni...@nicholaswilliams.net>.
On Mar 21, 2013, at 4:31 PM, Nick Williams wrote:

> I have built an executable Tomcat JAR file. It has all of the Tomcat classes and dependencies zipped into one big JAR. Inside that JAR is also a WAR file, the native DLL, and logging.properties. My com.ul.io.Bootstrap class creates an .extract directory in the CWD, extracts the native DLL, WAR file and logging.properties, configures Tomcat logging, configures a Tomcat class instance, adds the WAR file is a web app, starts the Tomcat class instance, and waits for it.
> 
> If I run this JAR like this:
> 
>> java -jar PeripheralProxy-1.0.0.SNAPSHOT.jar
> 
> Everything works fine. It starts up, I can go to the application, no errors in the logs ... everything is perfect. The output from stdout is below if you're interested. Now, I take the same JAR file and sign it with the jar signer. To make sure nothing got messed up, I run the signed JAR file:
> 
>> java -jar PeripheralProxy-1.0.0.SNAPSHOT-signed.jar
> 
> This worked to. Exact same stdout output, application works fine. Perfect! Next I created a JNLP file with, among other things, <security> set to <all-permissions />. I open the JNLP file in my browser. It accepts the certificate and starts the JAR file. First problem is logging doesn't work. Not sure why. I had to enable the Java console in Java Control Panel to see what was going on.
> 
> 1) It created the .extract directory, so the first step worked.
> 2) It extracted the WAR file, native DLL and logging.properties without a problem, so that worked, too.
> 3) It could not deploy the application. At this point it began getting class loading errors.
> 
> The output from the Java console is also below. Anyone have a clue what went wrong? Obviously the classes ARE in the JAR file, otherwise it wouldn't work from the command line.
> 
> <snip>

Well, I got this working. I'm not sure anyone has ever successfully done this before, because I didn't really find much of anything on Google that helped. Here's what I had to do:

1) Sign the JAR and use <all-permissions />. This was a given and I was already doing this.

2) Use tomcat-embed-logging-log4j instead of tomcat-embed-logging-juli. The Web Start deployer is NOT friendly to the way JULI deals with class loaders.

3) Don't put ANY classes in the WAR files included in the JAR file. ALL classes (Tomcat AND application AND dependency classes) must go in the root/embedded/same JAR. Otherwise the security manager detects that they were loaded differently and doesn't apply the <all-permissions /> rule to them. There IS an alternative to this: System.setSecurityManager(null). But that's not pretty, and discouraged.

4) After instantiating the Tomcat instance and before starting it, set the parent class loaders to the current thread context class loader. Otherwise Tomcat tries to use the System class loader. You cannot use the System class loader in Java Web Start. None of the application classes are loaded by it.

        Tomcat tomcat = new Tomcat();
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        tomcat.getEngine().setParentClassLoader(loader);
        tomcat.getHost().setParentClassLoader(loader);
        tomcat.getServer().setParentClassLoader(loader);
        tomcat.getService().setParentClassLoader(loader);

5) Patch JarScanner. The JarScanner only scans JARs at URLs starting with file: and jndi:. It ignores http: and https: URLs, and in Web Start, all JAR URLs start with http: or https:. I filed bug 54745 about this, because it's a noninvasive patch that I think improves Tomcat.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org