Toplink 904 CLOB support for Tx DataSource
I am using TopLink 904 and I have tried to persist and retrieve a CLOB field using first Oracle thin driver and TopLink connection pool. After I have configured my toplink project (use Oracle9Platform, mapping the CLOB field este TypeConverisionMapping and using FieldClassification as java.sql.Clob.class the persistence of the clob and the retrieval worked fine.
The other test I am using thin driver but I get the cnnection using a Tx DataSource by configuring TopLink to use JTS managed transaction. I have Oracle 9i in the back-end and Weblogic Server 7 sp2 as application server.
The weblogic classpath point first to the classes12.jar from C:\bea702\weblogic700\server\ext\jdbc\oracle\920 (alternative I have tried 817) and the pool configuration is setup as below:
DriverName="oracle.jdbc.OracleDriver" InitialCapacity="10"
MaxCapacity="30" Name="Some-Name" Properties="user=xxx02;password=xxx;dll=ocijdbc9;protocol=thin"
Targets="elrs" TestTableName="dual" URL="jdbc:oracle:thin:@myoracleserver:FD02D"/>
The error which I encountered is the following:
The exception is below:
2004.05.31 03:55:20.502--UnitOfWork(4059734)--Before JTS Completion
2004.05.31 03:55:20.502--UnitOfWork(4059734)--Execute query WriteObjectQuery(clob.Description@4f66ab)
2004.05.31 03:55:20.502--UnitOfWork(4059734)--Connection(149604)--INSERT INTO npop02.DESCRIPTION (PK_DESCR, SHORT_DESCR, CLOB_DESCR) VALUES (18842, '', empty_clob())
2004.05.31 03:55:20.502--UnitOfWork(4059734)--Connection(149604)--reconnecting to external connection pool
2004.05.31 03:55:20.799--ClientSession(1700669)--client released
2004.05.31 03:55:20.846--UnitOfWork(4059734)--Connection(149604)--SELECT CLOB_DESCR FROM npop02.DESCRIPTION WHERE (PK_DESCR = 18842) FOR UPDATE
2004.05.31 03:55:20.924--UnitOfWork(4059734)--java.lang.ClassCastException: weblogic.jdbc.rmi.internal.OracleTClobImpljava.lang.ClassCastException: weblogic.jdbc.rmi.internal.OracleTClobImpl
at oracle.toplink.oraclespecific.Oracle8Platform.writeLOB(Oracle8Platform.java:244)
at oracle.toplink.internal.helper.LOBValueWriter.fetchLocatorAndWriteValue(LOBValueWriter.java:92)
at oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:668)
at oracle.toplink.internal.helper.LOBValueWriter.buildAndExecuteCallForLocator(LOBValueWriter.java:67)
at oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:643)
at oracle.toplink.publicinterface.UnitOfWork.executeCall(UnitOfWork.java:1369)
at oracle.toplink.internal.queryframework.CallQueryMechanism.executeCall(CallQueryMechanism.java:130)
at oracle.toplink.internal.queryframework.CallQueryMechanism.executeCall(CallQueryMechanism.java:111)
at oracle.toplink.internal.queryframework.CallQueryMechanism.insertObject(CallQueryMechanism.java:262)
at oracle.toplink.internal.queryframework.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:171)
at oracle.toplink.internal.queryframework.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:188)
at oracle.toplink.internal.queryframework.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:433)
at oracle.toplink.queryframework.InsertObjectQuery.executeCommit(InsertObjectQuery.java:40)
at oracle.toplink.internal.queryframework.DatabaseQueryMechanism.performUserDefinedWrite(DatabaseQueryMechanism.java:588)
at oracle.toplink.internal.queryframework.DatabaseQueryMechanism.performUserDefinedInsert(DatabaseQueryMechanism.java:555)
at oracle.toplink.internal.queryframework.DatabaseQueryMechanism.insertObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:465)
at oracle.toplink.queryframework.WriteObjectQuery.executeCommitWithChangeSet(WriteObjectQuery.java:119)
at oracle.toplink.internal.queryframework.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:258)
at oracle.toplink.queryframework.WriteObjectQuery.execute(WriteObjectQuery.java:51)
at oracle.toplink.queryframework.DatabaseQuery.execute(DatabaseQuery.java:498)
at oracle.toplink.publicinterface.Session.internalExecuteQuery(Session.java:1968)
at oracle.toplink.publicinterface.UnitOfWork.internalExecuteQuery(UnitOfWork.java:2222)
at oracle.toplink.publicinterface.Session.executeQuery(Session.java:1096)
at oracle.toplink.publicinterface.Session.executeQuery(Session.java:1048)
at oracle.toplink.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:177)
at oracle.toplink.publicinterface.Session.writeAllObjectsWithChangeSet(Session.java:3233)
at oracle.toplink.publicinterface.UnitOfWork.commitToDatabase(UnitOfWork.java:1061)
at oracle.toplink.publicinterface.UnitOfWork.commitToDatabaseWithChangeSet(UnitOfWork.java:1106)
at oracle.toplink.publicinterface.UnitOfWork.issueSQLbeforeCompletion(UnitOfWork.java:2438)
at oracle.toplink.jts.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:151)
at weblogic.transaction.internal.ServerSCInfo.callBeforeCompletions(ServerSCInfo.java:540)
at weblogic.transaction.internal.ServerSCInfo.startPrePrepareAndChain(ServerSCInfo.java:92)
at weblogic.transaction.internal.ServerTransactionImpl.localPrePrepareAndChain(ServerTransactionImpl.java:1060)
at weblogic.transaction.internal.ServerTransactionImpl.globalPrePrepare(ServerTransactionImpl.java:1597)
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:237)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:208)
at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:282)
at ca.teranet.firma.workflow.services.WorkflowCommit.execute(Unknown Source)
at ca.teranet.firma.workflow.core.Run.run(Unknown Source)
at ca.teranet.firma.workflow.core.OnStatement.run(Unknown Source)
at ca.teranet.firma.workflow.core.Run.run(Unknown Source)
at ca.teranet.firma.workflow.core.WorkflowComponent.run(Unknown Source)
at ca.teranet.firma.workflow.ejbs.WorkflowManagerBean.execute(Unknown Source)
at ca.teranet.firma.workflow.ejbs.WorkflowManagerBean.execute(Unknown Source)
at ca.teranet.firma.workflow.ejbs.WorkflowManagerBean_val1vy_EOImpl.execute(WorkflowManagerBean_val1vy_EOImpl.java:46)
at ca.teranet.firma.workflow.ejbs.WorkflowManagerBean_val1vy_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:362)
at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerRef.java:114)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:313)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:821)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:308)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)
2004.05.31 03:55:20.924--UnitOfWork(4059734)--java.lang.ClassCastException: weblogic.jdbc.rmi.internal.OracleTClobImpljava.lang.ClassCastException: weblogic.jdbc.rmi.internal.OracleTClobImpl
at oracle.toplink.oraclespecific.Oracle8Platform.writeLOB(Oracle8Platform.java:244)
at oracle.toplink.internal.helper.LOBValueWriter.fetchLocatorAndWriteValue(LOBValueWriter.java:92)
at oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:668)
at oracle.toplink.internal.helper.LOBValueWriter.buildAndExecuteCallForLocator(LOBValueWriter.java:67)
at oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:643)
at oracle.toplink.publicinterface.UnitOfWork.executeCall(UnitOfWork.java:1369)
at oracle.toplink.internal.queryframework.CallQueryMechanism.executeCall(CallQueryMechanism.java:130)
at oracle.toplink.internal.queryframework.CallQueryMechanism.executeCall(CallQueryMechanism.java:111)
at oracle.toplink.internal.queryframework.CallQueryMechanism.insertObject(CallQueryMechanism.java:262)
at oracle.toplink.internal.queryframework.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:171)
at oracle.toplink.internal.queryframework.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:188)
at oracle.toplink.internal.queryframework.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:433)
at oracle.toplink.queryframework.InsertObjectQuery.executeCommit(InsertObjectQuery.java:40)
at oracle.toplink.internal.queryframework.DatabaseQueryMechanism.performUserDefinedWrite(DatabaseQueryMechanism.java:588)
at oracle.toplink.internal.queryframework.DatabaseQueryMechanism.performUserDefinedInsert(DatabaseQueryMechanism.java:555)
at oracle.toplink.internal.queryframework.DatabaseQueryMechanism.insertObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:465)
at oracle.toplink.queryframework.WriteObjectQuery.executeCommitWithChangeSet(WriteObjectQuery.java:119)
at oracle.toplink.internal.queryframework.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:258)
at oracle.toplink.queryframework.WriteObjectQuery.execute(WriteObjectQuery.java:51)
at oracle.toplink.queryframework.DatabaseQuery.execute(DatabaseQuery.java:498)
at oracle.toplink.publicinterface.Session.internalExecuteQuery(Session.java:1968)
at oracle.toplink.publicinterface.UnitOfWork.internalExecuteQuery(UnitOfWork.java:2222)
at oracle.toplink.publicinterface.Session.executeQuery(Session.java:1096)
at oracle.toplink.publicinterface.Session.executeQuery(Session.java:1048)
at oracle.toplink.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:177)
at oracle.toplink.publicinterface.Session.writeAllObjectsWithChangeSet(Session.java:3233)
at oracle.toplink.publicinterface.UnitOfWork.commitToDatabase(UnitOfWork.java:1061)
at oracle.toplink.publicinterface.UnitOfWork.commitToDatabaseWithChangeSet(UnitOfWork.java:1106)
at oracle.toplink.publicinterface.UnitOfWork.issueSQLbeforeCompletion(UnitOfWork.java:2438)
at oracle.toplink.jts.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:151)
at weblogic.transaction.internal.ServerSCInfo.callBeforeCompletions(ServerSCInfo.java:540)
at weblogic.transaction.internal.ServerSCInfo.startPrePrepareAndChain(ServerSCInfo.java:92)
at weblogic.transaction.internal.ServerTransactionImpl.localPrePrepareAndChain(ServerTransactionImpl.java:1060)
at weblogic.transaction.internal.ServerTransactionImpl.globalPrePrepare(ServerTransactionImpl.java:1597)
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:237)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:208)
at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:282)
at ca.teranet.firma.workflow.services.WorkflowCommit.execute(Unknown Source)
at ca.teranet.firma.workflow.core.Run.run(Unknown Source)
at ca.teranet.firma.workflow.core.OnStatement.run(Unknown Source)
at ca.teranet.firma.workflow.core.Run.run(Unknown Source)
at ca.teranet.firma.workflow.core.WorkflowComponent.run(Unknown Source)
at ca.teranet.firma.workflow.ejbs.WorkflowManagerBean.execute(Unknown Source)
at ca.teranet.firma.workflow.ejbs.WorkflowManagerBean.execute(Unknown Source)
at ca.teranet.firma.workflow.ejbs.WorkflowManagerBean_val1vy_EOImpl.execute(WorkflowManagerBean_val1vy_EOImpl.java:46)
at ca.teranet.firma.workflow.ejbs.WorkflowManagerBean_val1vy_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:362)
at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerRef.java:114)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:313)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:821)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:308)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)
2004.05.31 03:55:20.940--UnitOfWork(4059734)--After JTS Completion
2004.05.31 03:55:20.940--UnitOfWork(4059734)--release unit of work
2004.05.31 03:55:20.940--ClientSession(7408187)--client released
2004.05.31 03:55:21.190--ServerSession(3961166)--client acquired
2004.05.31 03:55:21.190--ServerSession(3961166)--client acquired
2004.05.31 03:55:21.190--ClientSession(2968476)--acquire unit of
Kindly ask you for prompt help as we are close to decide if we gone approve the use of TopLink in production.
Thank you, Narcisa
P.S. Also the exception is trying to instanciate Oracle8Platform from TopLink even in the toplink project file I have setup use Oracle9Platform. Do you have any suggestions ?