Wrong timezone causes TopLink warning in SOA suite

From time to time we discovered SOA installations that got this little TopLink warning in the SOA server log every minute:

[TopLink Warning]: 2012.01.18 15:35:24.946--UnitOfWork(353329123)--java.lang.NullPointerException
    (String.java:147)
    at oracle.toplink.internal.platform.database.oracle.TIMESTAMPHelper.extractTimeZone(TIMESTAMPHelper.java:140)
    at oracle.toplink.platform.database.oracle.Oracle9Platform.getTIMESTAMPTZFromResultSet(Oracle9Platform.java:173)
    at oracle.toplink.platform.database.oracle.Oracle9Platform.getObjectFromResultSet(Oracle9Platform.java:145)
    at oracle.toplink.internal.databaseaccess.DatabaseAccessor.getObject(DatabaseAccessor.java:1053)
    at oracle.toplink.internal.databaseaccess.DatabaseAccessor.fetchRow(DatabaseAccessor.java:850)
    at oracle.toplink.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:567)
    at oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:468)
    at oracle.toplink.threetier.ServerSession.executeCall(ServerSession.java:447)
    at oracle.toplink.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)
    at oracle.toplink.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:179)
    at oracle.toplink.internal.queryframework.DatasourceCallQueryMechanism.selectOneRow(DatasourceCallQueryMechanism.java:603)
    at oracle.toplink.internal.queryframework.ExpressionQueryMechanism.selectOneRowFromTable(ExpressionQueryMechanism.java:2543)
    at oracle.toplink.internal.queryframework.ExpressionQueryMechanism.selectOneRow(ExpressionQueryMechanism.java:2513)
    at oracle.toplink.queryframework.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:424)
    at oracle.toplink.queryframework.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:874)
    at oracle.toplink.queryframework.DatabaseQuery.execute(DatabaseQuery.java:679)
    at oracle.toplink.queryframework.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:835)
    at oracle.toplink.queryframework.ReadObjectQuery.execute(ReadObjectQuery.java:397)
    at oracle.toplink.queryframework.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:899)
    at oracle.toplink.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2807)
    at oracle.toplink.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1079)
    at oracle.toplink.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1063)
    at oracle.toplink.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1022)
    at oracle.tip.mediator.dispatch.db.ContainerIdDBAccess.renewContainerIdLease(ContainerIdDBAccess.java:99)
    at oracle.tip.mediator.dispatch.db.DBContainerIdManager.run(DBContainerIdManager.java:188)
    at oracle.integration.platform.blocks.executor.WorkManagerExecutor$1.run(WorkManagerExecutor.java:120)
    at weblogic.work.j2ee.J2EEWorkManager$WorkWithListener.run(J2EEWorkManager.java:183)
    at weblogic.work.DaemonWorkThread.run(DaemonWorkThread.java:30)

It happened on some installations, but not on other, and we couldn’t really find any patterns that explained why it did happen on installation A and not on installation B.

After some investigation and with help from Oracle Support, we found that it was a combination of a JDBC bug and that sometimes strange things just happens.

Solution:

The JDBC driver bug is fixed, so the problem should not appear on new installations anymore, but unfortunately many are not able to upgrade to the latest and greatest, so this issue might still pop up for a while.

Reference: Bug 13627118 : ATLANTIC/JAN-MAYEN MAPPING IN ZONEIDMAP.JAVA DOES NOT MATCH THE DATABASE VALUE