Tomcat does not start due to the timezone not supported
Environment
- Red Hat Enterprise Linux 6
- Red Hat Satellite 5.6
Issue
- Tomcat does not start due to the timezone not support issue
2013-12-16 12:45:49,702 [TP-Processor3] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: null
2013-12-16 12:45:49,703 [TP-Processor3] ERROR org.hibernate.util.JDBCExceptionReporter - Timezone not supported
2013-12-16 12:45:49,710 [TP-Processor3] ERROR com.redhat.rhn.frontend.servlets.SessionFilter - Error during transaction. Rolling back
javax.servlet.ServletException: Filter execution threw an exception
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:259)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.redhat.rhn.frontend.servlets.EnvironmentFilter.doFilter(EnvironmentFilter.java:100)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.redhat.rhn.frontend.servlets.SessionFilter.doFilter(SessionFilter.java:57)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.redhat.rhn.frontend.servlets.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:97)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:761)
Caused by:
java.lang.ExceptionInInitializerError
at java.lang.J9VMInternals.initialize(J9VMInternals.java:223)
at com.redhat.rhn.domain.user.UserFactory.<clinit>(UserFactory.java:64)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:201)
at com.redhat.rhn.manager.user.UserManager.getTimeZone(UserManager.java:835)
at com.redhat.rhn.frontend.servlets.LocalizedEnvironmentFilter.setTimeZone(LocalizedEnvironmentFilter.java:96)
INFO | jvm 1 | 2013/12/13 07:36:10 | 2013-12-13 07:36:10,531 [Thread-46] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: null
INFO | jvm 1 | 2013/12/13 07:36:10 | 2013-12-13 07:36:10,532 [Thread-46] ERROR org.hibernate.util.JDBCExceptionReporter - Timezone not supported
INFO | jvm 1 | 2013/12/13 07:36:10 | org.hibernate.exception.GenericJDBCException: could not execute query
{...SNIP...}
INFO | jvm 1 | 2013/12/13 07:36:10 | >-at java.lang.Thread.run(Thread.java:761)
INFO | jvm 1 | 2013/12/13 07:36:10 | Caused by: java.sql.SQLException: Timezone not supported
Resolution
- A workaround is to specifically the default time zone explicitly in the Tomcat configuration. Edit the /etc/tomcat6/tomcat6.conf and modify the JAVA_OPTS as below:
JAVA_OPTS="${JAVA_OPTS} -Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory -Duser.timezone=America/North_Dakota/Center"
- Configure tomcat to use
english
as an language by editing the/etc/sysconfig/tomcat6
as mentioned below.
# You can change your tomcat locale here
LANG="en_US"
- From the etc/httpd/conf.d/ssl.conf following lines are commented,uncomment them.
---
#SSLCertificateFile /etc/pki/tls/certs/spacewalk.crt
#SSLCertificateKeyFile /etc/pki/tls/private/spacewalk.key
----
- There is an internal bug opened for this issue please consult with Red Hat Technical team in case more information required.
Root Cause
- The issue appears to be similar to the one described in http://bugs.sun.com/view_bug.do?bug_id=6456628 in which Java cannot successfully determine the server's time zone during Tomcat startup. This problem occurs when /etc/localtime on the Red Hat Enterprise Linux server is a copy of /usr/share/zoneinfo/America/North_Dakota/Center, but not, for example, when /etc/localtime is a copy of /usr/share/zoneinfo/America/Chicago.
Diagnostic Steps
- Check the /var/log/tomcat6/catalina.out
- Check the /var/log/rhn/rhn_taskomatic.log
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments