Hi,
Thanks for the information, I will see what will be the best way to
integrate your code into the PosgresDictionary to support Streams.
On Tue, Apr 8, 2008 at 4:48 PM, David Goodenough <
[EMAIL PROTECTED]> wrote:
> On Friday 04 April 2008, Ignacio Andreu wrote:
> > I review the conversation If you're using PostgreSQL, the actual
> > InputStream / Reader don't have support for PostgreSQL, although if
> you've
> > a good solution for Large Object in PostgreSQL please e-mail me.
> >
> >
> > - Ignacio
> >
> > On Fri, Apr 4, 2008 at 7:16 PM, Ignacio Andreu <[EMAIL PROTECTED]>
> wrote:
> > > Hi,
> > >
> > > The InputStream / reader support is not documented yet, I want to
> provide
> > > some documentation soon.
> > >
> > >
> > > BTW I sent a patch for the InputStream / Reader support a week ago,
> this
> > > patch solves some bugs, Can you review and commit the patch? Thanks in
> > > advance!!
> > >
> > >
> > >
> > >
> > > On Fri, Apr 4, 2008 at 5:32 PM, Patrick Linskey <[EMAIL PROTECTED]>
> > >
> > > wrote:
> > > > > > Additionally, note that OpenJPA 1.1.0-SNAPSHOT has support for
> > > >
> > > > fields
> > > >
> > > > > > of type InputStream; with this support, OpenJPA will never
> fully
> > > >
> > > > load
> > > >
> > > > > > the data into memory.
> > > > >
> > > > > I can see how this will work for readonly values, how about write
> > > >
> > > > ones?
> > > >
> > > > > Also looking in the 1.1.0 manual I can not find any reference to
> > > >
> > > > InputStream.
> > > >
> > > > I think it hasn't been documented yet. Take a look at
> > > > InputStreamLobTest for an example.
> > > >
> > > > For write values, you simply assign the InputStream field to the
> > > > stream that OpenJPA should read from when streaming to the database:
> > > >
> > > > @Entity
> > > > public class Picture {
> > > > @Persistent private InputStream data;
> > > >
> > > > public void streamContentsIntoDatabase(InputStream is) {
> > > > data = is;
> > > > }
> > > >
> > > > public InputStream streamContentsFromDatabase() {
> > > > return is;
> > > > }
> > > > }
> > > >
> > > > -Patrick
> > > >
> > > > On Fri, Apr 4, 2008 at 6:57 AM, David Goodenough
> > > >
> > > > <[EMAIL PROTECTED]> wrote:
> > > > > On Tuesday 01 April 2008, Patrick Linskey wrote:
> > > > > > Or, even more simply:
> > > > > >
> > > > > > em.getTransaction().begin();
> > > > > > Connection c = OpenJPAPersistence.cast(em).getConnection();
> > > > >
> > > > > Actually for what I need I need to cast this to a
> > > >
> > > > DelegatingConnection
> > > >
> > > > > and then get the PGConnection by casting its InnermostDelegate.
> > > > > But yes, this works - thank you.
> > > > >
> > > > > > try {
> > > > > >
> > > > > > ...
> > > > > > } finally {
> > > > > > c.close(); // the connection is a wrapper; this decrements
> the
> > > > > > reference count
> > > > > > }
> > > > > > em.getTransaction().commit();
> > > > > >
> > > > > > Additionally, note that OpenJPA 1.1.0-SNAPSHOT has support for
> > > >
> > > > fields
> > > >
> > > > > > of type InputStream; with this support, OpenJPA will never
> fully
> > > >
> > > > load
> > > >
> > > > > > the data into memory.
> > > > >
> > > > > I can see how this will work for readonly values, how about write
> > > >
> > > > ones?
> > > >
> > > > > Also looking in the 1.1.0 manual I can not find any reference to
> > > >
> > > > InputStream.
> > > >
> > > > > David
> > > > >
> > > > > > -Patrick
> > > > > >
> > > > > > On Mon, Mar 31, 2008 at 8:31 PM, Pinaki Poddar
> > > > > > <[EMAIL PROTECTED]>
> > > >
> > > > wrote:
> > > > > > > Hi,
> > > > > > > Following should work:
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > import javax.persistence.EntityManager;
> > > > > > > import org.apache.openjpa.kernel.Broker;
> > > > > > > import org.apache.openjpa.jdbc.kernel.JDBCStore;
> > > > > > > import org.apache.openjpa.persistence.JPAFacadeHelper;
> > > > > > > import java.sql.Connection;
> > > > > > >
> > > > > > > EntityManager em = emf.createEntityManager();
> > > > > > > Broker broker = JPAFacadeHelper.toBroker(em);
> > > > > > >
> > > > > > > JDBCStore store =
> (JDBCStore)broker.getStoreManager();
> > > > > > > Connection con = store.getConnection();
> > > > > > >
> > > > > > > David Goodenough-3 wrote:
> > > > > > > > I need to get to the real JDBC Connection object so that I
> > > > > > > > can
> > > >
> > > > do some
> > > >
> > > > > > > > processing using Postgresql extensions (in particular the
> > > >
> > > > LargeObject
> > > >
> > > > > > > > support). I do not expect OpenJPA to understand what I am
> > > >
> > > > doing, but
> > > >
> > > > > > > > I need to access the Connection object and I need what I
> do
> > > > > > > > to
> > > >
> > > > be
> > > >
> > > > > > > > in the same transaction as that used by OpenJPA (so also
> it
> > > >
> > > > needs to
> > > >
> > > > > > > > be the same transaction).
> > > > > > > >
> > > > > > > > The manual suggests:-
> > > > > > > >
> > > > > > > > OpenJPAEntityManagerFactory kemf =
> > > >
> > > > OpenJPAPersistence.cast(emf);
> > > >
> > > > > > > > OpenJPAConfiguration conf = kemf.getConfiguration();
> > > > > > > >
> > > > > > > > on page 190, but kemf does not have a getConfiguration
> method
> > > > > > > > according to Eclipse (using OpenJPA 1.0.2).
> > > > > > > >
> > > > > > > > The OpenJPAConfiguration javadoc is not much use either in
> > > >
> > > > that it
> > > >
> > > > > > > > does tell me where to get it from.
> > > > > > > >
> > > > > > > > Any ideas?
> > > > > > > >
> > > > > > > > David
> > > > > > >
> > > > > > > --
> > > > > > > View this message in context:
> > > >
> > > >
> http://www.nabble.com/How-to-get-I-get-to-the-read-JDBC-Connection-obje
> > > >ct
> > > >
> > > > > > >...-tp16400383p16401689.html Sent from the OpenJPA Users
> mailing
> > > >
> > > > list
> > > >
> > > > > > > archive at Nabble.com.
> > > >
> > > > --
> > > > Patrick Linskey
> > > > 202 669 5907
>
>
> Actually it is even easier than I throught;
>
> Postgresql provides BlobInputStream and BlobOutputStream classes which
> do exactly what is needed.
>
> So to write you do:-
>
> DelegatingConnection conn =
> (DelegatingConnection)OpenJPAPersistence.cast(em).getConnection();
> try {
> conn.setAutoCommit(false);
> Connection c = conn.getInnermostDelegate();
> if(c.isClosed()) throw new SQLException("innermost
> delegate is closed");
> PGConnection pgconn = (PGConnection)c;
> LargeObjectManager lom =
> pgconn.getLargeObjectAPI();
> long oid = lom.createLO();
> LargeObject lo = lom.open(oid,
> LargeObjectManager.WRITE);
> OutputStream loos = lo.getOutputStream();
>
> and now you can write to the OutputStream loos in the normal way.
>
> and to read you:-
>
> LargeObjectManager lom =
> ((PGConnection)conn).getLargeObjectAPI();
> long oid = Long.parseLong(args[0]);
> LargeObject lo = lom.open(oid);
> InputStream lois = lo.getInputStream();
>
> and you can read in the normal way.
>
> David
>