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/06/16 23:34:25 UTC

svn commit: r414928 - in /db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob: LobHandle.java LobHelper.java LobHelperImpl.java

Author: arminw
Date: Fri Jun 16 14:34:25 2006
New Revision: 414928

URL: http://svn.apache.org/viewvc?rev=414928&view=rev
Log:
improve lob handling (using better support for advanced jdbc data types)

Modified:
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHandle.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHelper.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHelperImpl.java

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHandle.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHandle.java?rev=414928&r1=414927&r2=414928&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 Fri Jun 16 14:34:25 2006
@@ -161,9 +161,14 @@
 
     public void checkActive()
     {
-        if(!isTransient() && !isCoupled()) throw new InactiveLobException(
+        if(!(isTransient() || isCoupled())) throw new InactiveLobException(
                 "Current LOB is not valid for access (no active PB-tx or PB-tx changed), "
                         + "refresh the persistent object LOB content after PB-tx starts");
+    }
+
+    public boolean isActive()
+    {
+        return isTransient() || isCoupled();
     }
 
 

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHelper.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHelper.java?rev=414928&r1=414927&r2=414928&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHelper.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHelper.java Fri Jun 16 14:34:25 2006
@@ -21,6 +21,7 @@
 import java.sql.Clob;
 
 import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.metadata.FieldDescriptor;
 
 /**
  * Helper class support handling of LOB-locator-object
@@ -107,14 +108,13 @@
 
     /**
      * Refresh all LOB-locator instances of the specified persistence capable object
-     * if the following conditions are true for the target object:
+     * if the following conditions are <em>true</em> for the target object:
      * <ul>
      * <li>active {@link org.apache.ojb.broker.PersistenceBroker}-tx is running</li>
      * <li>contains LOB fields</li>
      * <li>LOB fields wrapped by OJB's LOB wrapping classes (normally
      * all LOB fields of persistence capable objects are automatically wrapped
-     * with OJB specific wrapper classes by internal calls to
-     * {@link #wrapLobFields(org.apache.ojb.broker.metadata.ClassDescriptor, Object)})</li>
+     * internal with OJB specific wrapper classes</li>
      * <li>one or more fields are inactive/invalid (there is no active
      * {@link org.apache.ojb.broker.PersistenceBroker} instance associated with detected LOB-fields)</li>
      * </ul>
@@ -126,6 +126,18 @@
      */
     public void refreshLob(Object target, ClassDescriptor cld);
 
+    /**
+     * Internal used method!
+     * <br/>
+     * Wrap the specified LOB value ({@link java.sql.Blob} and {@link java.sql.Clob}
+     * instances returned by the database) with OJB specific LOB-wrapper class.
+     *
+     * @param fld The field of the specified value.
+     * @param value The LOB content value of the field.
+     * @return The wrapped LOB content.
+     */
+    public Object wrapLobField(FieldDescriptor fld, Object value);
+
 //    /**
 //     * Internal used method!
 //     * <br/>
@@ -140,16 +152,16 @@
 //     */
 //    public void refreshLob(FieldDescriptor lobField, Object target, FieldDescriptor[] pkFields);
 
-    /**
-     * Internal used method!
-     * <br/>
-     * Wraps the target object LOB instances ({@link java.sql.Blob} and {@link java.sql.Clob}
-     * instances returned by the database) with OJB specific LOB-wrapper classes.
-     *
-     * @param cld The {@link org.apache.ojb.broker.metadata.ClassDescriptor} of the target object.
-     * @param target The target object.
-     */
-    public void wrapLobFields(ClassDescriptor cld, Object target);
+//    /**
+//     * Internal used method!
+//     * <br/>
+//     * Wraps the target object LOB instances ({@link java.sql.Blob} and {@link java.sql.Clob}
+//     * instances returned by the database) with OJB specific LOB-wrapper classes.
+//     *
+//     * @param cld The {@link org.apache.ojb.broker.metadata.ClassDescriptor} of the target object.
+//     * @param target The target object.
+//     */
+//    public void wrapLobFields(ClassDescriptor cld, Object target);
 
 //    /**
 //     * Returns <em>true</em> if the specified persistence capable object

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHelperImpl.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHelperImpl.java?rev=414928&r1=414927&r2=414928&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHelperImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/lob/LobHelperImpl.java Fri Jun 16 14:34:25 2006
@@ -213,30 +213,46 @@
         return FieldTypes.BlobFieldType.class.isAssignableFrom(fld.getJdbcType().getFieldType().getClass());
     }
 
-    public void wrapLobFields(ClassDescriptor cld, Object target)
+//    public void wrapLobFields(ClassDescriptor cld, Object target)
+//    {
+//        if(cld.hasLobField())
+//        {
+//            FieldDescriptor[] fields = cld.getFieldDescriptor(true);
+//            for(int i = 0; i < fields.length; i++)
+//            {
+//                FieldDescriptor field = fields[i];
+//                if(field.isLobFieldType())
+//                {
+//                    Object lob = field.getPersistentField().get(target);
+//                    if(lob != null && !(lob instanceof LobHandle))
+//                    {
+//                        if(isBlobField(field))
+//                        {
+//                            field.getPersistentField().set(target, new BlobHandle(broker, (Blob) lob));
+//                        }
+//                        else
+//                        {
+//                            field.getPersistentField().set(target, new ClobHandle(broker, (Clob) lob));
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//    }
+
+    public Object wrapLobField(FieldDescriptor fld, Object value)
     {
-        if(cld.hasLobField())
+        if(value != null && !(value instanceof LobHandle))
         {
-            FieldDescriptor[] fields = cld.getFieldDescriptor(true);
-            for(int i = 0; i < fields.length; i++)
+            if(isBlobField(fld))
             {
-                FieldDescriptor field = fields[i];
-                if(field.isLobFieldType())
-                {
-                    Object lob = field.getPersistentField().get(target);
-                    if(lob != null && !(lob instanceof LobHandle))
-                    {
-                        if(isBlobField(field))
-                        {
-                            field.getPersistentField().set(target, new BlobHandle(broker, (Blob) lob));
-                        }
-                        else
-                        {
-                            field.getPersistentField().set(target, new ClobHandle(broker, (Clob) lob));
-                        }
-                    }
-                }
+                return new BlobHandle(broker, (Blob) value);
+            }
+            else
+            {
+                return new ClobHandle(broker, (Clob) value);
             }
         }
+        return value;
     }
 }



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