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

Gary Shank commented on DERBY-6341:
-----------------------------------

I ran into a similar issue with DB2 v10.1 (regardless if I used db2jcc.jar or 
db2jcc4.jar) but found a way to fix it:  db2set DB2_RESTRICT_DDF=TRUE will turn 
off progressive streaming.  My test program now works correctly with DB2 v10.1, 
Oracle11g, and Microsoft SQL Server 2012.  If only Derby worked, I'd be good to 
go.  Is there a similar configuration change for Derby that would allow this to 
work?
                
> LOB streaming not working with ClientDriver - IOException: object already 
> closed
> --------------------------------------------------------------------------------
>
>                 Key: DERBY-6341
>                 URL: https://issues.apache.org/jira/browse/DERBY-6341
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.10.1.1
>            Reporter: Gary Shank
>
> I have a small test program using OpenJPA v2.2.2 with Derby database 
> 10.10.1.1 and the Derby org.apache.derby.jdbc.ClientDriver.  I also tried 
> ClientDriver40.
> My entity is defined like this:
> @Entity(name = "BLOB_TEST")
> public class BlobTest implements java.io.Serializable {
>    public BlobTest() {}
>    @Id @Column(name = "PRIM_KEY", columnDefinition="VARCHAR(10)")
>    private String primKey = null;
>    public void setKey(String key) { primKey = key; }
>    public String getKey() { return primKey; }
>    @Persistent @Column(name = "DATA")
>    private InputStream data = null;
>    public void setData(InputStream data) { this.data = data; }
>    public InputStream getData() { return data; }
> }
> Putting data into the database works fine:
> EntityManager em = open(); // performs configuration and 
> emf.createEntityManager();
> em.getTransaction().begin();
> FileInputStream fis = new FileInputStream("someInputFile");
> BlobTest bt = new BlobTest();
> bt.setKey("1");
> bt.setData(fis);
> em.persist(bt);
> em.getTransaction().commit();
> em.close();
> Getting the data fails with "IOException: The object is already closed." when 
> any InputStream.read method is called:
> EntityManager em = open(); // performs configuration and 
> emf.createEntityManager();
> BlobTest bt = em.find(BlobTest.class, "1"); // the record is found
> InputStream is = bt.getData();
> while ( (bytesRead = is.read(buffer, 0, len)) != -1 )
> java.io.IOException: The object is already closed.
> at org.apache.derby.client.am.CloseFilterInputStream.read(Unknown Source)
> Getting the data works if I use JDBC directly like this:
> EntityManager em = open(); // performs configuration and 
> emf.createEntityManager();
> Connection conx = 
> (Connection)org.apache.openjpa.persistence.OpenJPAPersistence.cast(em).getConnection();
> PreparedStatement pstmt = conx.prepareStatement("select DATA from BLOB_TEST 
> where PRIM_KEY='1'");
> ResultSet rs = pstmt.executeQuery();
> InputStream is = rs.getBinaryStream(1);
> while ( (bytesRead = is.read(buffer, 0, len)) != -1 )
> Is this a bug or am I just doing something wrong?  My code has to work with 
> multiple databases so I can't really use JDBC directly - which is I opted for 
> using OpenJPA.  I'm not sure if this is an OpenJPA issue or Derby issue but, 
> at the moment, I'm assuming is a problem with the client driver.  By the way, 
> I did not test with the embedded driver since we need it to work with the 
> client driver.  I've looked at the following other issues:
> DERBY-3646 mentions "object already close" and the CloseFilterInputStream
> OPENJPA-1248 - LOB streaming does not work as expected
> OPENJPA-130 - use of InputStream for LOB streaming

--
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