[ 
https://issues.apache.org/jira/browse/OPENJPA-2344?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13593649#comment-13593649
 ] 

Kevin Sutter commented on OPENJPA-2344:
---------------------------------------

Thanks for your experimentation and testcase.  That should help greatly with 
narrowing in on a proper fix.
                
> 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

Reply via email to