From ad33d5c5dcbf3b481731dfadda995cd95ac73af2 Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Mon, 14 May 2007 03:02:14 +0000 Subject: More lob and sequence tests; LobEngine fixes. --- .../java/com/amazon/carbonado/spi/LobEngine.java | 33 +++++++++++++--------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'src/main/java/com/amazon/carbonado') diff --git a/src/main/java/com/amazon/carbonado/spi/LobEngine.java b/src/main/java/com/amazon/carbonado/spi/LobEngine.java index d6ab994..8cc1bf9 100644 --- a/src/main/java/com/amazon/carbonado/spi/LobEngine.java +++ b/src/main/java/com/amazon/carbonado/spi/LobEngine.java @@ -295,17 +295,16 @@ public class LobEngine { data.close(); } + // Close but don't commit the transaction. This close is explicitly + // not put into a finally block in order for an exception to cause + // the transaction to rollback. + out.close(false); + if (total < lob.getLength()) { + // Adjust length after closing stream to avoid OptimisticLockException. new BlobImpl(lob).setLength(total); } - // Note: Closing Output commits the transaction. No other resources - // are freed. This close is explicitly not put into a finally block - // in order for an exception to cause the transaction to rollback. - out.close(); - - // This isn't really needed due to closing Output, but it is good - // practice to include it anyhow. txn.commit(); } catch (IOException e) { if (e.getCause() instanceof RepositoryException) { @@ -1012,7 +1011,11 @@ public class LobEngine { } @Override - public synchronized void close() throws IOException { + public void close() throws IOException { + close(true); + } + + synchronized void close(boolean commit) throws IOException { if (mTxn != null) { try { updateBlock(); @@ -1020,14 +1023,18 @@ public class LobEngine { mStoredLob.setLength(mPos); mStoredLob.update(); } - mTxn.commit(); + if (commit) { + mTxn.commit(); + } } catch (PersistException e) { throw toIOException(e); } finally { - try { - mTxn.exit(); - } catch (PersistException e) { - throw toIOException(e); + if (commit) { + try { + mTxn.exit(); + } catch (PersistException e) { + throw toIOException(e); + } } } mTxn = null; -- cgit v1.2.3