Return-Path: X-Original-To: apmail-openjpa-dev-archive@www.apache.org Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id B5BBD9007 for ; Wed, 6 Mar 2013 23:30:14 +0000 (UTC) Received: (qmail 88844 invoked by uid 500); 6 Mar 2013 23:30:14 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 88798 invoked by uid 500); 6 Mar 2013 23:30:14 -0000 Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list dev@openjpa.apache.org Received: (qmail 88714 invoked by uid 99); 6 Mar 2013 23:30:14 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 06 Mar 2013 23:30:14 +0000 Date: Wed, 6 Mar 2013 23:30:14 +0000 (UTC) From: "Kevin Sutter (JIRA)" To: dev@openjpa.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (OPENJPA-2344) 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. MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/OPENJPA-2344?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13595277#comment-13595277 ] Kevin Sutter commented on OPENJPA-2344: --------------------------------------- Thanks for the proposed patch for the "derby issue" section. Although very specific, it could help future users. In general, I'm wondering if we need to beef up the explanation of this property: The doc currently only states this: SupportsMultipleNontransactionalResultSets: When true, a nontransactional connection is capable of having multiple open ResultSet instances. But, really this property is controlling whether to support autocommit on the unmanaged connection or not. By setting this property to false, we are essentially turning off autocommit. This, in turn, allows the ResultSets to stay open across the individual queries and allows proper access to your clob/blob fields. Shouldn't we also beef up the explanation of this DBDictionary property? > 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: Documentation > Components: jdbc > Affects Versions: 2.3.0, 2.2.1 > Reporter: Guillaume Chauvet > Attachments: OPENJPA-2344-DOC.patch, 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 : > 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