You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2006/05/14 02:44:08 UTC

svn commit: r406175 - in /db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob: BlobHandle.java ClobHandle.java LobHandle.java

Author: arminw
Date: Sat May 13 17:44:07 2006
New Revision: 406175

URL: http://svn.apache.org/viewcvs?rev=406175&view=rev
Log:
improve method separation

Modified:
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/BlobHandle.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/ClobHandle.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHandle.java

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/BlobHandle.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/BlobHandle.java?rev=406175&r1=406174&r2=406175&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/BlobHandle.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/BlobHandle.java Sat May 13 17:44:07 2006
@@ -29,89 +29,75 @@
  */
 public class BlobHandle extends LobHandle implements Blob
 {
-    private Blob blob;
-
     BlobHandle(PersistenceBrokerInternal broker, Blob blob)
     {
-        super(broker);
-        this.blob = blob;
-        if(blob instanceof Lob)
-        {
-            setTransient(true);
-        }
-    }
-
-    protected void txFail()
-    {
-        super.txFail();
-        if(!isTransient()) this.blob = null;
+        super(broker, blob);
     }
 
-    protected void txSuccess()
+    /**
+     * Returns the innermost {@link java.sql.Blob} instance.
+     *
+     * @return The innermost wrapped LOB instance.
+     */
+    public Blob getBlob()
     {
-        super.txSuccess();
-        this.blob = null;
+        Blob result = (Blob) getLocator(false);
+        if(result instanceof BlobHandle)
+        {
+            result = ((BlobHandle) result).getBlob();
+        }
+        return result;
     }
 
-    protected void inactivate()
+    private Blob getLocalBlob()
     {
-        super.inactivate();
-        if(!isTransient()) this.blob = null;
+        return (Blob) getLocator(true);
     }
 
     public long length() throws SQLException
     {
-        checkActive();
-        return blob.length();
+        return getLocalBlob().length();
     }
 
     public byte[] getBytes(long pos, int length) throws SQLException
     {
-        checkActive();
-        return blob.getBytes(pos, length);
+        return getLocalBlob().getBytes(pos, length);
     }
 
     public long position(byte pattern[], long start) throws SQLException
     {
-        checkActive();
-        return blob.position(pattern, start);
+        return getLocalBlob().position(pattern, start);
     }
 
     public InputStream getBinaryStream() throws SQLException
     {
-        checkActive();
-        return blob.getBinaryStream();
+        return getLocalBlob().getBinaryStream();
     }
 
     public long position(Blob pattern, long start) throws SQLException
     {
-        checkActive();
-        return blob.position(pattern, start);
+        return getLocalBlob().position(pattern, start);
     }
 //#ifdef JDBC30
 
     public OutputStream setBinaryStream(long pos) throws SQLException
     {
-        checkActive();
-        return blob.setBinaryStream(pos);
+        return getLocalBlob().setBinaryStream(pos);
     }
 
     public int setBytes(long pos, byte[] bytes, int offset, int len) throws SQLException
     {
-        checkActive();
-        return blob.setBytes(pos, bytes, offset, len);
+        return getLocalBlob().setBytes(pos, bytes, offset, len);
     }
 
     public int setBytes(long pos, byte[] bytes) throws SQLException
     {
-        checkActive();
-        return blob.setBytes(pos, bytes);
+        return getLocalBlob().setBytes(pos, bytes);
     }
 
     public void truncate(long len) throws SQLException
     {
-        checkActive();
-        blob.truncate(len);
+        getLocalBlob().truncate(len);
     }
 
 //#endif

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/ClobHandle.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/ClobHandle.java?rev=406175&r1=406174&r2=406175&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/ClobHandle.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/ClobHandle.java Sat May 13 17:44:07 2006
@@ -31,102 +31,86 @@
  */
 public class ClobHandle extends LobHandle implements Clob
 {
-    private Clob clob;
-
     ClobHandle(PersistenceBrokerInternal broker, Clob clob)
     {
-        super(broker);
-        this.clob = clob;
-        if(clob instanceof Lob)
-        {
-            setTransient(true);
-        }
-    }
-
-    protected void txFail()
-    {
-        super.txFail();
-        if(!isTransient()) this.clob = null;
+        super(broker, clob);
     }
 
-    protected void txSuccess()
+    /**
+     * Returns the innermost {@link java.sql.Clob} instance.
+     *
+     * @return The innermost wrapped LOB instance.
+     */
+    public Clob getClob()
     {
-        super.txSuccess();
-        this.clob = null;
+        Clob result = (Clob) getLocator(false);
+        if(result instanceof ClobHandle)
+        {
+            result = ((ClobHandle) result).getClob();
+        }
+        return result;
     }
 
-    protected void inactivate()
+    private Clob getLocalClob()
     {
-        super.inactivate();
-        if(!isTransient()) this.clob = null;
+        return (Clob) getLocator(true);
     }
 
     public long length() throws SQLException
     {
-        checkActive();
-        return clob.length();
+        return getLocalClob().length();
     }
 
     public InputStream getAsciiStream() throws SQLException
     {
-        checkActive();
-        return clob.getAsciiStream();
+        return getLocalClob().getAsciiStream();
     }
 
     public Reader getCharacterStream() throws SQLException
     {
-        checkActive();
-        return clob.getCharacterStream();
+        return getLocalClob().getCharacterStream();
     }
 
     public String getSubString(long pos, int length) throws SQLException
     {
-        checkActive();
-        return clob.getSubString(pos, length);
+        return getLocalClob().getSubString(pos, length);
     }
 
     public long position(String searchstr, long start) throws SQLException
     {
-        checkActive();
-        return clob.position(searchstr, start);
+        return getLocalClob().position(searchstr, start);
     }
 
     public long position(Clob searchstr, long start) throws SQLException
     {
-        checkActive();
-        return clob.position(searchstr, start);
+        return getLocalClob().position(searchstr, start);
     }
 
 //#ifdef JDBC30
 
     public int setString(long pos, String str) throws SQLException
     {
-        checkActive();
-        return clob.setString(pos, str);
+        return getLocalClob().setString(pos, str);
     }
 
     public int setString(long pos, String str, int offset, int len) throws SQLException
     {
-        checkActive();
-        return clob.setString(pos, str, offset, len);
+        return getLocalClob().setString(pos, str, offset, len);
     }
 
     public Writer setCharacterStream(long pos) throws SQLException
     {
-        checkActive();
-        return clob.setCharacterStream(pos);
+        return getLocalClob().setCharacterStream(pos);
     }
 
     public OutputStream setAsciiStream(long pos) throws SQLException
     {
-        checkActive();
-        return clob.setAsciiStream(pos);
+        return getLocalClob().setAsciiStream(pos);
     }
 
     public void truncate(long len) throws SQLException
     {
-        checkActive();
-        clob.truncate(len);
+        getLocalClob().truncate(len);
     }
 
 //#endif

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHandle.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHandle.java?rev=406175&r1=406174&r2=406175&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHandle.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHandle.java Sat May 13 17:44:07 2006
@@ -28,24 +28,33 @@
 {
     private boolean active;
     private boolean isTransient;
+    private Object locator;
 
-    public LobHandle(PersistenceBrokerInternal broker)
+    LobHandle(PersistenceBrokerInternal broker, Object locator)
     {
+        this.locator = locator;
         isTransient = false;
         active = broker.isInTransaction();
+        if(locator instanceof Lob)
+        {
+            setTransient(true);
+        }
         if(active)
         {
             broker.addListener(this, false);
         }
-        /*
-        Think we should allow to query objects with LOB fields without a running
-        PB-tx. If the user try to access the LOB field, method #checkActive() will throw an
-        exception.
-        */
-//        else
-//        {
-//            throw new LobException("LOB opertations only valid when the used PersistanceBroker is in PB-tx");
-//        }
+    }
+
+    /**
+     * Return the locator object.
+     *
+     * @param check If <em>true</em> a validation check is done, else simply the locator is returned.
+     * @return The locator object.
+     */
+    protected Object getLocator(boolean check)
+    {
+        if(check) checkActive();
+        return locator;
     }
 
     public boolean isTransient()
@@ -61,18 +70,21 @@
     protected void txFail()
     {
         this.active = false;
+        if(!isTransient()) this.locator = null;
     }
 
     protected void txSuccess()
     {
         this.active = false;
         this.isTransient = false;
+        this.locator = null;
     }
 
     protected void inactivate()
     {
         this.active = false;
         this.isTransient = false;
+        if(!isTransient()) this.locator = null;
     }
 
     protected boolean isActive()
@@ -84,7 +96,7 @@
     {
         if(!isTransient() && !isActive()) throw new InactiveLobException(
                 "Current LOB is not valid for access (no active PB-tx or PB-tx changed), "
-                + "refresh the persistent object this LOB belongs too");
+                        + "refresh the persistent object LOB content after PB-tx starts");
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org