I am trying to use the new lob streaming functionality in 1.1.0. My
database is Derby. Is Derby even supported for lob streaming? My initial
test is to simply write a file to Derby and then read it back out to disk.
I can save the stream to the db without any errors. However, when I attempt
to retrieve the instance I always get an error when I try to read from the
stream.
The basic code looks like this:
Write:
InstanceEntity instance = new InstanceEntity();
InputStream fis = new BufferedInputStream(new FileInputStream(file));
instance.setInstanceData(fis);
entityManager.persist(instance);
Read:
InstanceEntity instance = entityManager.find(InstanceEntity.class, id);
InputStream fis = (InputStream) instance.getInstanceData();
int b = fis.read();
I've tried a variety of InputStreams (FileInputStream, BufferedInputStream,
etc.) and they all seem to fail when I attempt to read() from them. Writing
the object to the db using a BufferedInputStream results in a
"
java.io.IOException: Stream closed" on the read().
In the openjpa tests, I see some code for an InputStreamWrapper
(./openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/meta/strat
s/InputStreamWrapper.java). There seems to be some handling surrounding the
flushing of a stream. Is this related to (or a fix for) the issue I'm
encountering?
Thanks,
Mike