Oystein Grovlen - Sun Norway wrote:

As part of the work on using locators for Blob/Clob, we will need to
be able to determine when to garbage collect information about locators.
The JDBC spec says the following about lifetime of Blobs [JDBC 4 spec,
section 16.3.1]:

    For locator based implementations, Blob, Clob and NClob objects
    remain valid for at least the duration of the transaction in which
    they are created, unless their free method is invoked or they are
    garbage collected.

    For implementations that fully materialize the Large Object (LOB),
    the Blob, Clob and NClob objects will remain valid until such time
    as the free method is called or the LOB is garbage collected.

    Portable applications should not depend upon the LOB persisting
    past the end of the transaction.

Note that the current Derby behavior diverges from this spec in
several aspects,

How does Derby diverge from the spec (quoted above)?

and I would say the current behavior is quite a mess.
Some observations I have made:

   - In embedded, objects for short LOB values are valid after
     transaction commit, objects for long values are not.  The same
     holds after the connection is closed.
seems to be within spec (lob is fully materialized)

   - On the client, objects are generally valid after commit.
seems to be within spec (lob is fully materialized?)

   - On the client, length() may be called on Clob objects after the
     connection is closed.  However, other methods are not allowed.
   - On the client, no operations can be performed on a Blob after
     connection is closed.
seems inconsistent and against the spec if lobs are fully materialized but within the spec if the lobs are locator based.

In my opinion, we should strive to get the same behavior regardless
of framework or LOB size.  The plan is to change the lifetime of LOB
objects to correspond to the lifetime of the transaction in which it
was created.  A life beyond the close of the connection, is not
possible on the client side, and an implementation where LOB objects
are valid after commit will be pretty complex, both generally on the
client side and for large LOBs in embedded.

For 10.3 are client LOB's locator based and embedded non-locator based?

In 10.2 client LOB's are fully materialized, right?

Changing the lifetime for Blob/Clob objects, may cause compatibility
issues for existing applications.  Client applications that currently
access LOB objects after commit, and embedded applications that access
small LOB objects after commit, will have to be changed.  Do people
think this is acceptable?

I guess I'm unclear at this point, how much of the behaviour will be changing due to the switch to locator LOB's and how much to due cleanup. Is it possible to have a summary of behaviour compared to 10.2?

Thanks,
Dan.


Reply via email to