[
https://issues.apache.org/jira/browse/OPENJPA-2344?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Guillaume Chauvet updated OPENJPA-2344:
---------------------------------------
Attachment: openjpa-2344.zip
Attached please find a draft including a unit test capable of systematically
reproducing the clob/blob exception.
> You cannot invoke other java.sql.Clob/java.sql.Blob methods after calling the
> free() method or after the Blob/Clob's transaction has been committed or
> rolled back.
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: OPENJPA-2344
> URL: https://issues.apache.org/jira/browse/OPENJPA-2344
> Project: OpenJPA
> Issue Type: Bug
> Components: jdbc
> Affects Versions: 2.3.0, 2.2.1
> Reporter: Guillaume Chauvet
> Attachments: openjpa-2344.zip
>
>
> Hi,
> We have a problem with OpenJPA (2.2.1) and Derby (10.8.2.2, in server mode).
> Some of our entities use blob fields to store binary data, and clob for long
> string values. When we start our software and executing a query on the
> database like "select e form {entity} e" we get this type of stacktrace :
> <openjpa-2.2.2-QFD-r422266:1446687M fatal general error>
> org.apache.openjpa.persistence.PersistenceException: You cannot invoke other
> java.sql.Clob/java.sql.Blob methods after calling the free() method or
> after the Blob/Clob's transaction has been committed or rolled back.
> FailedObject:
> com.qualiformed.qualinax.platform.dto.control.ConcretePoint-1359472360809003211
> [java.lang.String]
> at
> org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4962)
> at
> org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4922)
> at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:136)
> at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:86)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:311)
> at
> org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)
> at
> org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
> at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1040)
> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:998)
> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:920)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1033)
> at
> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:280)
> at
> org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:2381)
> at
> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:274)
> at
> org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObject(InstanceResultObjectProvider.java:60)
> at
> org.apache.openjpa.lib.rop.WindowResultList.getInternal(WindowResultList.java:131)
> at
> org.apache.openjpa.lib.rop.AbstractNonSequentialResultList$Itr.hasNext(AbstractNonSequentialResultList.java:171)
> at
> org.apache.openjpa.lib.rop.ResultListIterator.hasNext(ResultListIterator.java:53)
> at
> org.apache.openjpa.kernel.DelegatingResultList$DelegatingListIterator.hasNext(DelegatingResultList.java:389)
> at
> com.qualiformed.qualinax.platform.dao.PointDAO$1.findAll(PointDAO.java:44)
> at
> com.qualiformed.qualinax.application.ihm.administration.DbFilesForm.initialiseModelFile(DbFilesForm.java:1436)
> at
> com.qualiformed.qualinax.application.ihm.MainView$21$16.doInBackground(MainView.java:986)
> at javax.swing.SwingWorker$1.call(SwingWorker.java:277)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> at javax.swing.SwingWorker.run(SwingWorker.java:316)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:662)
> Caused by: java.sql.SQLException: You cannot invoke other
> java.sql.Clob/java.sql.Blob methods after calling the free() method or after
> the Blob/Clob's transaction has been committed or rolled back.
> at
> org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown
> Source)
> at org.apache.derby.client.am.SqlException.getSQLException(Unknown
> Source)
> at org.apache.derby.client.am.Clob.length(Unknown Source)
> at
> org.apache.openjpa.jdbc.sql.DBDictionary.getClobString(DBDictionary.java:768)
> at
> org.apache.openjpa.jdbc.sql.ResultSetResult.getStringInternal(ResultSetResult.java:472)
> at
> org.apache.openjpa.jdbc.sql.AbstractResult.getString(AbstractResult.java:761)
> at
> org.apache.openjpa.jdbc.meta.strats.StringFieldStrategy.load(StringFieldStrategy.java:160)
> at org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java:928)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1111)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1084)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1059)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:411)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:306)
> ... 24 more
> Caused by: org.apache.derby.client.am.SqlException: You cannot invoke other
> java.sql.Clob/java.sql.Blob methods after calling the free() method or after
> the Blob/Clob's transaction has been committed or
> rolled back.
> at
> org.apache.derby.client.am.CallableLocatorProcedures.handleInvalidLocator(Unknown
> Source)
> at
> org.apache.derby.client.am.CallableLocatorProcedures.clobGetLength(Unknown
> Source)
> at org.apache.derby.client.am.Clob.getLocatorLength(Unknown Source)
> at org.apache.derby.client.am.Lob.sqlLength(Unknown Source)
> ... 35 more
> Caused by: org.apache.derby.client.am.SqlException: The exception
> 'java.sql.SQLException: The locator that was supplied for this CLOB/BLOB is
> invalid' was thrown while evaluating an expression.
> at org.apache.derby.client.am.Statement.completeExecute(Unknown Source)
> at
> org.apache.derby.client.net.NetStatementReply.parseEXCSQLSTTreply(Unknown
> Source)
> at
> org.apache.derby.client.net.NetStatementReply.readExecuteCall(Unknown Source)
> at org.apache.derby.client.net.StatementReply.readExecuteCall(Unknown
> Source)
> at org.apache.derby.client.net.NetStatement.readExecuteCall_(Unknown
> Source)
> at org.apache.derby.client.am.Statement.readExecuteCall(Unknown Source)
> at org.apache.derby.client.am.PreparedStatement.flowExecute(Unknown
> Source)
> at org.apache.derby.client.am.PreparedStatement.executeX(Unknown Source)
> ... 38 more
> Caused by: org.apache.derby.client.am.SqlException: The locator that was
> supplied for this CLOB/BLOB is invalid
> ... 46 more
> NestedThrowables:
> java.sql.SQLException: The exception 'java.sql.SQLException: The locator that
> was supplied for this CLOB/BLOB is invalid' was thrown while evaluating an
> expression.
> at
> org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown
> Source)
> at org.apache.derby.client.am.SqlException.getSQLException(Unknown
> Source)
> at org.apache.derby.client.am.SqlException.getSQLException(Unknown
> Source)
> at org.apache.derby.client.am.Clob.length(Unknown Source)
> at
> org.apache.openjpa.jdbc.sql.DBDictionary.getClobString(DBDictionary.java:768)
> at
> org.apache.openjpa.jdbc.sql.ResultSetResult.getStringInternal(ResultSetResult.java:472)
> at
> org.apache.openjpa.jdbc.sql.AbstractResult.getString(AbstractResult.java:761)
> at
> org.apache.openjpa.jdbc.meta.strats.StringFieldStrategy.load(StringFieldStrategy.java:160)
> at org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java:928)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1111)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1084)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1059)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:411)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:306)
> at
> org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)
> at
> org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
> at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1040)
> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:998)
> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:920)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1033)
> at
> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:280)
> at
> org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:2381)
> at
> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:274)
> at
> org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObject(InstanceResultObjectProvider.java:60)
> at
> org.apache.openjpa.lib.rop.WindowResultList.getInternal(WindowResultList.java:131)
> at
> org.apache.openjpa.lib.rop.AbstractNonSequentialResultList$Itr.hasNext(AbstractNonSequentialResultList.java:171)
> at
> org.apache.openjpa.lib.rop.ResultListIterator.hasNext(ResultListIterator.java:53)
> at
> org.apache.openjpa.kernel.DelegatingResultList$DelegatingListIterator.hasNext(DelegatingResultList.java:389)
> at
> com.qualiformed.qualinax.platform.dao.PointDAO$1.findAll(PointDAO.java:44)
> at
> com.qualiformed.qualinax.application.ihm.administration.DbFilesForm.initialiseModelFile(DbFilesForm.java:1436)
> at
> com.qualiformed.qualinax.application.ihm.MainView$21$16.doInBackground(MainView.java:986)
> at javax.swing.SwingWorker$1.call(SwingWorker.java:277)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> at javax.swing.SwingWorker.run(SwingWorker.java:316)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:662)
> Caused by: org.apache.derby.client.am.SqlException: The exception
> 'java.sql.SQLException: The locator that was supplied for this CLOB/BLOB is
> invalid' was thrown while evaluating an expression.
> at org.apache.derby.client.am.Statement.completeExecute(Unknown Source)
> at
> org.apache.derby.client.net.NetStatementReply.parseEXCSQLSTTreply(Unknown
> Source)
> at
> org.apache.derby.client.net.NetStatementReply.readExecuteCall(Unknown Source)
> at org.apache.derby.client.net.StatementReply.readExecuteCall(Unknown
> Source)
> at org.apache.derby.client.net.NetStatement.readExecuteCall_(Unknown
> Source)
> at org.apache.derby.client.am.Statement.readExecuteCall(Unknown Source)
> at org.apache.derby.client.am.PreparedStatement.flowExecute(Unknown
> Source)
> at org.apache.derby.client.am.PreparedStatement.executeX(Unknown Source)
> at
> org.apache.derby.client.am.CallableLocatorProcedures.clobGetLength(Unknown
> Source)
> at org.apache.derby.client.am.Clob.getLocatorLength(Unknown Source)
> at org.apache.derby.client.am.Lob.sqlLength(Unknown Source)
> ... 35 more
> Caused by: org.apache.derby.client.am.SqlException: The locator that was
> supplied for this CLOB/BLOB is invalid
> ... 46 more
> java.sql.SQLNonTransientConnectionException: The locator that was supplied
> for this CLOB/BLOB is invalid
> at
> org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown
> Source)
> at org.apache.derby.client.am.SqlException.getSQLException(Unknown
> Source)
> at org.apache.derby.client.am.SqlException.getSQLException(Unknown
> Source)
> at org.apache.derby.client.am.SqlException.getSQLException(Unknown
> Source)
> at org.apache.derby.client.am.Clob.length(Unknown Source)
> at
> org.apache.openjpa.jdbc.sql.DBDictionary.getClobString(DBDictionary.java:768)
> at
> org.apache.openjpa.jdbc.sql.ResultSetResult.getStringInternal(ResultSetResult.java:472)
> at
> org.apache.openjpa.jdbc.sql.AbstractResult.getString(AbstractResult.java:761)
> at
> org.apache.openjpa.jdbc.meta.strats.StringFieldStrategy.load(StringFieldStrategy.java:160)
> at org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java:928)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1111)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1084)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1059)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:411)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:306)
> at
> org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)
> at
> org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
> at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1040)
> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:998)
> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:920)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1033)
> at
> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:280)
> at
> org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:2381)
> at
> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:274)
> at
> org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObject(InstanceResultObjectProvider.java:60)
> at
> org.apache.openjpa.lib.rop.WindowResultList.getInternal(WindowResultList.java:131)
> at
> org.apache.openjpa.lib.rop.AbstractNonSequentialResultList$Itr.hasNext(AbstractNonSequentialResultList.java:171)
> at
> org.apache.openjpa.lib.rop.ResultListIterator.hasNext(ResultListIterator.java:53)
> at
> org.apache.openjpa.kernel.DelegatingResultList$DelegatingListIterator.hasNext(DelegatingResultList.java:389)
> at
> com.qualiformed.qualinax.platform.dao.PointDAO$1.findAll(PointDAO.java:44)
> at
> com.qualiformed.qualinax.application.ihm.administration.DbFilesForm.initialiseModelFile(DbFilesForm.java:1436)
> at
> com.qualiformed.qualinax.application.ihm.MainView$21$16.doInBackground(MainView.java:986)
> at javax.swing.SwingWorker$1.call(SwingWorker.java:277)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> at javax.swing.SwingWorker.run(SwingWorker.java:316)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:662)
> Caused by: org.apache.derby.client.am.SqlException: The locator that was
> supplied for this CLOB/BLOB is invalid
> at org.apache.derby.client.am.Statement.completeExecute(Unknown Source)
> at
> org.apache.derby.client.net.NetStatementReply.parseEXCSQLSTTreply(Unknown
> Source)
> at
> org.apache.derby.client.net.NetStatementReply.readExecuteCall(Unknown Source)
> at org.apache.derby.client.net.StatementReply.readExecuteCall(Unknown
> Source)
> at org.apache.derby.client.net.NetStatement.readExecuteCall_(Unknown
> Source)
> at org.apache.derby.client.am.Statement.readExecuteCall(Unknown Source)
> at org.apache.derby.client.am.PreparedStatement.flowExecute(Unknown
> Source)
> at org.apache.derby.client.am.PreparedStatement.executeX(Unknown Source)
> at
> org.apache.derby.client.am.CallableLocatorProcedures.clobGetLength(Unknown
> Source)
> at org.apache.derby.client.am.Clob.getLocatorLength(Unknown Source)
> at org.apache.derby.client.am.Lob.sqlLength(Unknown Source)
> ... 35 more
> We tried default openjpa properties configuration but nothing change. We also
> looked into OpenJPA to find calls on Blob/Clob free() method,
> unsuccessfully... Is it normal to not explicitly free blob/clob fields after
> reading values ? In any event, I will tried to write a unitary test as soon
> as possible.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira