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 2007/05/16 00:53:16 UTC

svn commit: r538355 - /db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionImpl.java

Author: arminw
Date: Tue May 15 15:53:15 2007
New Revision: 538355

URL: http://svn.apache.org/viewvc?view=rev&rev=538355
Log:
use PersistenceChecker to detect object state, optimize source

Modified:
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionImpl.java

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionImpl.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionImpl.java?view=diff&rev=538355&r1=538354&r2=538355
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/odmg/TransactionImpl.java Tue May 15 15:53:15 2007
@@ -193,11 +193,11 @@
      */
     public boolean isOpen()
     {
-        return (getStatus() == Status.STATUS_ACTIVE ||
-                getStatus() == Status.STATUS_MARKED_ROLLBACK ||
-                getStatus() == Status.STATUS_PREPARED ||
-                getStatus() == Status.STATUS_PREPARING ||
-                getStatus() == Status.STATUS_COMMITTING);
+        return (txStatus == Status.STATUS_ACTIVE ||
+                txStatus == Status.STATUS_MARKED_ROLLBACK ||
+                txStatus == Status.STATUS_PREPARED ||
+                txStatus == Status.STATUS_PREPARING ||
+                txStatus == Status.STATUS_COMMITTING);
     }
 
     private void checkOpen()
@@ -206,7 +206,7 @@
         {
             throw new TransactionNotInProgressException(
                     "Transaction was not open, call tx.begin() before perform action, current status is: " +
-                    TxUtil.getStatusString(getStatus()));
+                    TxUtil.getStatusString(txStatus));
         }
     }
 
@@ -239,7 +239,7 @@
         if (log.isDebugEnabled()) log.debug("lock object was called on tx " + this + ", object is " + obj.toString());
         checkOpen();
         RuntimeObject rtObject = new RuntimeObject(obj, this);
-        lockAndRegister(rtObject, lockMode, isImplicitLocking());
+        lockAndRegister(rtObject, lockMode, implicitLocking);
     }
 
     /**
@@ -248,7 +248,7 @@
      */
     public void lockAndRegister(RuntimeObject rtObject, int lockMode)
     {
-        lockAndRegister(rtObject, lockMode, isImplicitLocking());
+        lockAndRegister(rtObject, lockMode, implicitLocking);
     }
 
     /**
@@ -501,7 +501,7 @@
                 log.error("Unexpected error while unregister transaction from proxy listener", e);
             }
 
-            LockManager lm = getImplementation().getLockManager();
+            LockManager lm = implementation.getLockManager();
             // this call is important to unlock registered
             // objects and unregistered proxies
             lm.releaseLocks(this);
@@ -692,8 +692,6 @@
      * indicating whether the lock was granted instead of generating an exception.
      * @param  obj          Description of Parameter
      * @param  lockMode     Description of Parameter
-     * @return              Description of the Returned Value
-     * </code>, <code>UPGRADE</code> , and <code>WRITE</code> .
      * @return true          if the lock has been acquired, otherwise false.
      */
     public boolean tryLock(Object obj, int lockMode)
@@ -1111,7 +1109,7 @@
             }
             ClassDescriptor cld = getBroker().getClassDescriptor(materializedObject.getClass());
             RuntimeObject rt = new RuntimeObject(getBrokerInternal(), materializedObject, oid, cld, false);
-            lockAndRegister(rt, Transaction.READ, isImplicitLocking());
+            lockAndRegister(rt, Transaction.READ, implicitLocking);
         }
         catch (Throwable t)
         {
@@ -1167,7 +1165,7 @@
     {
         registerToIndirectionHandler(handler);
         // TODO: remove this section when deprecated locking classes are removed
-        if(!(getImplementation().getLockManager() instanceof LockManagerOdmgImpl))
+        if(!(implementation.getLockManager() instanceof LockManagerOdmgImpl))
         {
             unmaterializedLocks.add(rtObj);
         }
@@ -1188,7 +1186,7 @@
     public void releaseUnmaterialzedLocks()
     {
         // TODO: remove this method when deprecated locking classes are removed
-        LockManager lm = getImplementation().getLockManager();
+        LockManager lm = implementation.getLockManager();
         if(!(lm instanceof LockManagerOdmgImpl) && unmaterializedLocks.size() > 0)
         {
             //remove locks for objects which haven't been materialized yet
@@ -1314,7 +1312,7 @@
             else
             {
                 RuntimeObject rt = new RuntimeObject(o, this, false);
-                lockAndRegister(rt, Transaction.READ, isImplicitLocking());
+                lockAndRegister(rt, Transaction.READ, implicitLocking);
             }
         }
         unregisterFromCollectionProxy(colProxy);
@@ -1387,37 +1385,19 @@
      */
     protected boolean isTransient(ClassDescriptor cld, Object obj, Identity oid)
     {
-        // if the Identity is transient we assume a non-persistent object
-        boolean isNew = oid.isTransient();
-        /*
-        detection of transient objects is costly (select of ID in DB to check if object
-        already exists) we do:
-        a. check if the object identity mark the specified object as transient
-        b. lookup from cache
-        c. and if not found, last option select on DB
-        */
-        if(!isNew)
+        boolean isTransient;
+        ObjectEnvelope mod = objectEnvelopeTable.getByIdentity(oid);
+        if(mod != null)
         {
-            ObjectEnvelope mod = objectEnvelopeTable.getByIdentity(oid);
-            if(mod != null)
-            {
-                // already registered object, use current state
-                isNew = mod.needsInsert();
-            }
-            else if(!optimizedTransientObjectDetection || cld.getAutoIncrementFields().length < 1)
-            {
-                PersistenceBrokerInternal pb = getBrokerInternal();
-                if(cld == null)
-                {
-                    cld = pb.getClassDescriptor(obj.getClass());
-                }
-                // if object was found cache, assume it's old
-                // else make costly check against the DB
-                isNew = pb.serviceObjectCache().lookup(oid) == null
-                        && !pb.serviceBrokerHelper().doesExist(cld, oid, obj);
-            }
+            // already registered object, use current state
+            isTransient = mod.needsInsert();
+        }
+        else
+        {
+            isTransient = !objectEnvelopeTable.getTransaction().getBrokerInternal()
+                    .getPersistenceChecker().isPersistent(obj, cld, oid);
         }
-        return isNew;
+        return isTransient;
     }
 
     /**
@@ -1500,7 +1480,7 @@
             /*
             arminw: Here we use the auto-delete flag defined in metadata
             */
-            result = ord.getCascadingDelete() == ObjectReferenceDescriptor.CASCADE_OBJECT;
+            result = ord.isCascadingDeleteObject();
         }
         else
         {
@@ -1569,7 +1549,7 @@
     public String toString()
     {
         return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE)
-                .append("tx-status", TxUtil.getStatusString(getStatus()))
+                .append("tx-status", TxUtil.getStatusString(txStatus))
                 .append("unclosed_broker", this.broker != null && !broker.isClosed())
                 .toString();
     }



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