Tomcat does not start due to the timezone not supported

Solution Unverified - Updated -

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