You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Chris Hegarty <ch...@oracle.com> on 2016/07/28 13:07:46 UTC

ClassLoaderLogManager.readConfiguration locates logging.properties incorrectly with JDK 9

Hi,

The following exception can be seen when, running with JDK 9 b115 ( early access )
and shutting down the Tomcat server. The issue is that the code in 
org.apache.juli.ClassLoaderLogManager.readConfiguration() expects to find the 
‘logging.properties' file in the ‘lib' directory of the JRE image. This is not the case in 
JDK 9, it has been moved to the ‘conf' directory of the image. See the "New run-time
image structure” of JEP 220 [1] for details of this.

The code can be simply updated to look in the ‘conf’ directory, or alternatively can
select between ‘conf’ and ‘lib’ if required to run on multiple releases.

Configuration error
java.io.FileNotFoundException: /opt/jdk-9.jdk_b115/Contents/Home/lib/logging.properties (No such file or directory)
	at java.io.FileInputStream.open0(java.base@9-ea/Native Method)
	at java.io.FileInputStream.open(java.base@9-ea/FileInputStream.java:195)
	at java.io.FileInputStream.<init>(java.base@9-ea/FileInputStream.java:138)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:479)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:402)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:398)
	at java.security.AccessController.doPrivileged(java.base@9-ea/Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:398)
	at org.apache.juli.ClassLoaderLogManager.addLogger(ClassLoaderLogManager.java:136)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:507)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:402)
	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:398)
	at java.security.AccessController.doPrivileged(java.base@9-ea/Native Method)
	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:398)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:493)
	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:309)
	at java.util.logging.LogManager.readPrimordialConfiguration(java.logging@9-ea/LogManager.java:437)
	at java.util.logging.LogManager.access$800(java.logging@9-ea/LogManager.java:156)
	at java.util.logging.LogManager$2.run(java.logging@9-ea/LogManager.java:387)
	at java.security.AccessController.doPrivileged(java.base@9-ea/Native Method)
	at java.util.logging.LogManager.ensureLogManagerInitialized(java.logging@9-ea/LogManager.java:380)
	at java.util.logging.LogManager.getLogManager(java.logging@9-ea/LogManager.java:422)
	at java.util.logging.SimpleFormatter.getLoggingProperty(java.logging@9-ea/SimpleFormatter.java:63)
	at jdk.internal.logger.SimpleConsoleLogger$Formatting.getSimpleFormat(java.base@9-ea/SimpleConsoleLogger.java:491)
	at jdk.internal.logger.SurrogateLogger.getSimpleFormat(java.base@9-ea/SurrogateLogger.java:62)
	at java.util.logging.SimpleFormatter.<init>(java.logging@9-ea/SimpleFormatter.java:67)
	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(java.base@9-ea/Native Method)
	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(java.base@9-ea/NativeConstructorAccessorImpl.java:62)
	at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(java.base@9-ea/DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(java.base@9-ea/Constructor.java:453)
	at java.lang.Class.newInstance(java.base@9-ea/Class.java:550)
	at org.apache.juli.logging.DirectJDKLog.<clinit>(DirectJDKLog.java:49)
	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:115)
	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:137)
	at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:188)
	at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:52)

-Chris.

[1] http://openjdk.java.net/jeps/220


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


Re: ClassLoaderLogManager.readConfiguration locates logging.properties incorrectly with JDK 9

Posted by Rainer Jung <ra...@kippdata.de>.
Sorry about more than a year delay. I just ran into the same issue and 
found your mail. It should be fixed now by 
http://svn.apache.org/viewvc?rev=1809434&view=rev which will be part of 
TC 9.0.1. I also plan to backport this to TC 8.5 (at least).

I have not chosen to do a Multi-Release jar but instead used a simple 
static check for Java 9.

Regards,

Rainer

Am 28.07.2016 um 15:07 schrieb Chris Hegarty:
> Hi,
> 
> The following exception can be seen when, running with JDK 9 b115 ( early access )
> and shutting down the Tomcat server. The issue is that the code in
> org.apache.juli.ClassLoaderLogManager.readConfiguration() expects to find the
> ‘logging.properties' file in the ‘lib' directory of the JRE image. This is not the case in
> JDK 9, it has been moved to the ‘conf' directory of the image. See the "New run-time
> image structure” of JEP 220 [1] for details of this.
> 
> The code can be simply updated to look in the ‘conf’ directory, or alternatively can
> select between ‘conf’ and ‘lib’ if required to run on multiple releases.
> 
> Configuration error
> java.io.FileNotFoundException: /opt/jdk-9.jdk_b115/Contents/Home/lib/logging.properties (No such file or directory)
> 	at java.io.FileInputStream.open0(java.base@9-ea/Native Method)
> 	at java.io.FileInputStream.open(java.base@9-ea/FileInputStream.java:195)
> 	at java.io.FileInputStream.<init>(java.base@9-ea/FileInputStream.java:138)
> 	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:479)
> 	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:402)
> 	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:398)
> 	at java.security.AccessController.doPrivileged(java.base@9-ea/Native Method)
> 	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:398)
> 	at org.apache.juli.ClassLoaderLogManager.addLogger(ClassLoaderLogManager.java:136)
> 	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:507)
> 	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:402)
> 	at org.apache.juli.ClassLoaderLogManager$2.run(ClassLoaderLogManager.java:398)
> 	at java.security.AccessController.doPrivileged(java.base@9-ea/Native Method)
> 	at org.apache.juli.ClassLoaderLogManager.getClassLoaderInfo(ClassLoaderLogManager.java:398)
> 	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:493)
> 	at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:309)
> 	at java.util.logging.LogManager.readPrimordialConfiguration(java.logging@9-ea/LogManager.java:437)
> 	at java.util.logging.LogManager.access$800(java.logging@9-ea/LogManager.java:156)
> 	at java.util.logging.LogManager$2.run(java.logging@9-ea/LogManager.java:387)
> 	at java.security.AccessController.doPrivileged(java.base@9-ea/Native Method)
> 	at java.util.logging.LogManager.ensureLogManagerInitialized(java.logging@9-ea/LogManager.java:380)
> 	at java.util.logging.LogManager.getLogManager(java.logging@9-ea/LogManager.java:422)
> 	at java.util.logging.SimpleFormatter.getLoggingProperty(java.logging@9-ea/SimpleFormatter.java:63)
> 	at jdk.internal.logger.SimpleConsoleLogger$Formatting.getSimpleFormat(java.base@9-ea/SimpleConsoleLogger.java:491)
> 	at jdk.internal.logger.SurrogateLogger.getSimpleFormat(java.base@9-ea/SurrogateLogger.java:62)
> 	at java.util.logging.SimpleFormatter.<init>(java.logging@9-ea/SimpleFormatter.java:67)
> 	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(java.base@9-ea/Native Method)
> 	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(java.base@9-ea/NativeConstructorAccessorImpl.java:62)
> 	at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(java.base@9-ea/DelegatingConstructorAccessorImpl.java:45)
> 	at java.lang.reflect.Constructor.newInstance(java.base@9-ea/Constructor.java:453)
> 	at java.lang.Class.newInstance(java.base@9-ea/Class.java:550)
> 	at org.apache.juli.logging.DirectJDKLog.<clinit>(DirectJDKLog.java:49)
> 	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:115)
> 	at org.apache.juli.logging.LogFactory.getInstance(LogFactory.java:137)
> 	at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:188)
> 	at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:52)
> 
> -Chris.
> 
> [1] http://openjdk.java.net/jeps/220

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