Uploaded image for project: 'Confluence Data Center'
  1. Confluence Data Center
  2. CONFSERVER-20793

Confluence logs a ClassCastException Tomcat 6.0.27 or later when accessing Oracle.

      Relates to CSP-49854, and in this specific case the issue occurs with Oracle. This problem can affect other databases as well if there is an internal requirement in spring or hibernate to access the native Connection. The main reason this is required for Oracle is for hibernate to access to proprietary Oracle lob api's.

      From tomcat 6.0.27 the dbcp libraries have been upgraded from 1.2 to 1.3. Some of the internals of this library changed so that there's an additional layer of proxies on the Connection.

      In Tomcat the dbcp library is repackaged by tomcat into it's own package (org.apache.tomcat.dbcp.dbcp), this appears to have occurred since Tomcat 5.5. This means the CommonsDbcpNativeJdbcExtractor in the automaticJdbcExtractor bean defined in productionDatabaseContext.xml is not applied.

      By luck (presumably), the default NativeJdbcExtractor provided (org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor) is able to extract the Native connection from dbcp 1.2.x since. However, this no longer work when dbcp was upgraded to 1.3, hence exceptions similar to those shown below.

      The resolution is quite simple - add an additional dbcp mapping for the org.apache.tomcat.dbcp.dbcp package.


      Example stacktrace.

      java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.PoolableConnection cannot be cast to oracle.jdbc.OracleConnection
              at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.createLob(OracleLobHandler.java:357)
              at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.setClobAsCharacterStream(OracleLobHandler.java:311)
              at com.atlassian.hibernate.BucketClobStringType.nullSafeSet(BucketClobStringType.java:155)
              at net.sf.hibernate.type.CustomType.nullSafeSet(CustomType.java:118)
              at net.sf.hibernate.persister.EntityPersister.dehydrate(EntityPersister.java:387)
              at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:460)
              at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:436)
              at net.sf.hibernate.impl.ScheduledInsertion.execute(ScheduledInsertion.java:37)
              at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2447)
              at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2433)
              at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2390)
              at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2259)
              at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
              at org.springframework.orm.hibernate.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:510)
              at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662)
              at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
              at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:139)
              at com.atlassian.sal.spring.component.SpringHostContextAccessor.doInTransaction(SpringHostContextAccessor.java:82)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at com.atlassian.plugin.osgi.hostcomponents.impl.DefaultComponentRegistrar$ContextClassLoaderSettingInvocationHandler.invoke(DefaultComponentRegistrar.java:129)
              at $Proxy183.doInTransaction(Unknown Source)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:147)
              at $Proxy183.doInTransaction(Unknown Source)
              at com.atlassian.sal.core.transaction.HostContextTransactionTemplate.execute(HostContextTransactionTemplate.java:21)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
              at org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:58)
              at org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:62)
              at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
              at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
              at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
              at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
              at org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:56)
              at org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:39)
              at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
              at org.springframework.osgi.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:59)
              at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
              at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
              at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
              at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
              at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
              at $Proxy286.execute(Unknown Source)
              at com.atlassian.gadgets.renderer.internal.BlobCrypterImpl.getKey(BlobCrypterImpl.java:38)
              at com.atlassian.gadgets.renderer.internal.BlobCrypterImpl.<init>(BlobCrypterImpl.java:32)
              at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
              at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
              at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
              at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
              at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
              ... 54 more
      Caused by: java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.PoolableConnection cannot be cast to oracle.jdbc.OracleConnection
              at oracle.sql.CLOB.createTemporary(CLOB.java:1093)
              at oracle.sql.CLOB.createTemporary(CLOB.java:1037)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.prepareLob(OracleLobHandler.java:393)
              at org.springframework.jdbc.support.lob.OracleLobHandler$OracleLobCreator.createLob(OracleLobHandler.java:340)
              ... 112 more
      

            [CONFSERVER-20793] Confluence logs a ClassCastException Tomcat 6.0.27 or later when accessing Oracle.

            Katherine Yabut made changes -
            Workflow Original: JAC Bug Workflow v3 [ 2890332 ] New: CONFSERVER Bug Workflow v4 [ 3000702 ]
            Owen made changes -
            Workflow Original: JAC Bug Workflow v2 [ 2775651 ] New: JAC Bug Workflow v3 [ 2890332 ]
            Status Original: Resolved [ 5 ] New: Closed [ 6 ]
            Owen made changes -
            Workflow Original: JAC Bug Workflow [ 2711058 ] New: JAC Bug Workflow v2 [ 2775651 ]
            Owen made changes -
            Workflow Original: Confluence Workflow - Public Facing - Restricted v5 - TEMP [ 2376465 ] New: JAC Bug Workflow [ 2711058 ]
            Katherine Yabut made changes -
            Workflow Original: Confluence Workflow - Public Facing - Restricted v5 [ 2263770 ] New: Confluence Workflow - Public Facing - Restricted v5 - TEMP [ 2376465 ]
            Katherine Yabut made changes -
            Workflow Original: Confluence Workflow - Public Facing - Restricted v5.1 - TEMP [ 2213175 ] New: Confluence Workflow - Public Facing - Restricted v5 [ 2263770 ]
            Katherine Yabut made changes -
            Workflow Original: Confluence Workflow - Public Facing - Restricted v5 - TEMP [ 2161475 ] New: Confluence Workflow - Public Facing - Restricted v5.1 - TEMP [ 2213175 ]
            Katherine Yabut made changes -
            Workflow Original: Confluence Workflow - Public Facing - Restricted v5 [ 1917501 ] New: Confluence Workflow - Public Facing - Restricted v5 - TEMP [ 2161475 ]
            Katherine Yabut made changes -
            Workflow Original: Confluence Workflow - Public Facing - Restricted v3 [ 1722511 ] New: Confluence Workflow - Public Facing - Restricted v5 [ 1917501 ]
            Katherine Yabut made changes -
            Workflow Original: CONF Bug Subtask WF (TEMP) [ 1676103 ] New: Confluence Workflow - Public Facing - Restricted v3 [ 1722511 ]

              cpetchell Petch (Inactive)
              cpetchell Petch (Inactive)
              Affected customers:
              0 This affects my team
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved: