You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2010/03/20 05:11:07 UTC

svn commit: r925540 - in /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc: conf/JDBCConfiguration.java kernel/JDBCStoreManager.java sql/LogicalUnion.java sql/Select.java sql/SelectImpl.java

Author: fancy
Date: Sat Mar 20 04:11:05 2010
New Revision: 925540

URL: http://svn.apache.org/viewvc?rev=925540&view=rev
Log:
OPENJPA-1585: Additional trace helps users to relate query or entity actions to SQL pushdowns

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/JDBCConfiguration.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/LogicalUnion.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/Select.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/JDBCConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/JDBCConfiguration.java?rev=925540&r1=925539&r2=925540&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/JDBCConfiguration.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/JDBCConfiguration.java Sat Mar 20 04:11:05 2010
@@ -54,6 +54,12 @@ public interface JDBCConfiguration
     public static final String LOG_SQL = "openjpa.jdbc.SQL";
 
     /**
+     * Name of the logger for additional jdbc messages:
+     * <code>openjpa.jdbc.DIAG</code>.
+     */
+    public static final String LOG_DIAG = "openjpa.jdbc.SQLDiag";
+
+    /**
      * Name of the logger for JDBC-related messages:
      * <code>openjpa.jdbc.JDBC</code>.
      */

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java?rev=925540&r1=925539&r2=925540&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java Sat Mar 20 04:11:05 2010
@@ -69,6 +69,8 @@ import org.apache.openjpa.kernel.exps.Ex
 import org.apache.openjpa.lib.jdbc.DelegatingConnection;
 import org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement;
 import org.apache.openjpa.lib.jdbc.DelegatingStatement;
+import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.log.LogFactoryImpl.LogImpl;
 import org.apache.openjpa.lib.rop.MergedResultObjectProvider;
 import org.apache.openjpa.lib.rop.ResultObjectProvider;
 import org.apache.openjpa.lib.util.ConcreteClassGenerator;
@@ -107,6 +109,7 @@ public class JDBCStoreManager 
     private DataSource _ds = null;
     private RefCountConnection _conn = null;
     private boolean _active = false;
+    private Log _log = null;
 
     // track the pending statements so we can cancel them
     private Set<Statement> _stmnts = Collections.synchronizedSet(new HashSet<Statement>());
@@ -144,6 +147,7 @@ public class JDBCStoreManager 
         _conf = conf;
         _dict = _conf.getDBDictionaryInstance();
         _sql = _conf.getSQLFactoryInstance();
+        _log = _conf.getLog(JDBCConfiguration.LOG_DIAG);
 
         LockManager lm = ctx.getLockManager();
         if (lm instanceof JDBCLockManager)
@@ -299,6 +303,9 @@ public class JDBCStoreManager 
             mapping = mapping.getJoinablePCSuperclassMapping();
 
         sel.wherePrimaryKey(oid, mapping, this);
+        if (_log.isTraceEnabled()) {
+            _log.trace("exists: oid="+oid+" "+mapping.getDescribedType());
+        }
         try {
             return sel.getCount(this) != 0;
         } catch (SQLException se) {
@@ -564,6 +571,9 @@ public class JDBCStoreManager 
             return null;
         sel.wherePrimaryKey(sm.getObjectId(), mapping, this);
         sel.setExpectedResultCount(1, false);
+        if (_log.isTraceEnabled()) {
+            _log.trace("getInitializeStateResult: oid="+sm.getObjectId()+" "+mapping.getDescribedType());
+        }
         Result result = sel.execute(this, fetch);
         cacheFinder(mapping, sel, fetch);
         return result;
@@ -615,6 +625,9 @@ public class JDBCStoreManager 
         Select sel = _sql.newSelect();
         sel.select(base.getPrimaryKeyColumns());
         sel.wherePrimaryKey(sm.getObjectId(), base, this);
+        if (_log.isTraceEnabled()) {
+            _log.trace("selectPrimaryKey: oid="+sm.getObjectId()+" "+mapping.getDescribedType());
+        }
         Result exists = sel.execute(this, fetch);
         try {
             if (isEmptyResult(exists))
@@ -666,6 +679,9 @@ public class JDBCStoreManager 
             if (select(sel, mapping, Select.SUBS_EXACT, sm, fields, jfetch,
                 EagerFetchModes.EAGER_JOIN, true, false)) {
                 sel.wherePrimaryKey(sm.getObjectId(), mapping, this);
+                if (_log.isTraceEnabled()) {
+                    _log.trace("load: "+mapping.getDescribedType()+" oid: "+sm.getObjectId()); 
+                }
                 res = sel.execute(this, jfetch, lockLevel);
                 try {
                  	if (isEmptyResult(res))
@@ -679,8 +695,13 @@ public class JDBCStoreManager 
             // now allow the fields to load themselves individually too
             FieldMapping[] fms = mapping.getFieldMappings();
             for (int i = 0; i < fms.length; i++)
-                if (fields.get(i) && !sm.getLoaded().get(i))
+                if (fields.get(i) && !sm.getLoaded().get(i)) {
+                    if (_log.isTraceEnabled()) {
+                        _log.trace("load field: '"+ fms[i].getName() + "' for oid="+sm.getObjectId()
+                            +" "+mapping.getDescribedType());
+                    }
                     fms[i].load(sm, this, jfetch.traverseJDBC(fms[i]));
+                }
             mapping.getVersion().afterLoad(sm, this);
             return true;
         } catch (ClassNotFoundException cnfe) {
@@ -714,6 +735,11 @@ public class JDBCStoreManager 
                 _conn.setReadOnly(false);
         } catch (SQLException e) {
         }
+        if (_log.isTraceEnabled()) {
+            for (OpenJPAStateManager sm: (Collection<OpenJPAStateManager>)sms) {
+                _log.trace("flush: "+sm.getPCState().getClass().getName() + " for oid="+sm.getObjectId());
+            }
+        }
         return _conf.getUpdateManagerInstance().flush(sms, this);
     }
 
@@ -824,6 +850,10 @@ public class JDBCStoreManager 
 
                     Select sel = _sql.newSelect();
                     sel.setLRS(true);
+                    if (_log.isTraceEnabled()) {
+                        _log.trace("executeExtent: "+mappings[i].getDescribedType());
+                        sel.logEagerRelations();
+                    }
                     BitSet paged = selectExtent(sel, mappings[i], jfetch,
                         subclasses);
                     if (paged == null)
@@ -958,6 +988,9 @@ public class JDBCStoreManager 
         JDBCFetchConfiguration fetch) {
         if (oid == null)
             return null;
+        if (_log.isTraceEnabled()) {
+            _log.trace("find: oid="+oid+" "+vm.getDeclaredTypeMapping().getDescribedType());
+        }
         Object pc = _ctx.find(oid, fetch, null, null, 0);
         if (pc == null && vm != null) {
             OrphanedKeyAction action = _conf.getOrphanedKeyActionInstance();
@@ -1016,9 +1049,13 @@ public class JDBCStoreManager 
     private void load(ClassMapping mapping, OpenJPAStateManager sm,
         JDBCFetchConfiguration fetch, Result res) throws SQLException {
         FieldMapping eagerToMany = load(mapping, sm, fetch, res, null);
-        if (eagerToMany != null)
+        if (eagerToMany != null) {
+            if (_log.isTraceEnabled()) {
+                _log.trace("Loading eager toMany: "+eagerToMany.getName()+" for "+mapping);
+            }
             eagerToMany.loadEagerJoin(sm, this, fetch.traverseJDBC(eagerToMany),
                 res);
+        }
         if (_active && _lm != null && res.isLocking())
             _lm.loadedForUpdate(sm);
     }

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/LogicalUnion.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/LogicalUnion.java?rev=925540&r1=925539&r2=925540&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/LogicalUnion.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/LogicalUnion.java Sat Mar 20 04:11:05 2010
@@ -901,6 +901,10 @@ public class LogicalUnion
         public void setSchemaAlias(String schemaAlias) {
             sel.setSchemaAlias(schemaAlias);
         }
+
+        public void logEagerRelations() {
+            sel.logEagerRelations();            
+        }
     }
 
     /**

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/Select.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/Select.java?rev=925540&r1=925539&r2=925540&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/Select.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/Select.java Sat Mar 20 04:11:05 2010
@@ -733,4 +733,8 @@ public interface Select
      */
     public boolean getHasSubselect();
    
+    /**
+     * Extended trace that logs eager relations
+     */
+    public void logEagerRelations();
 }

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java?rev=925540&r1=925539&r2=925540&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java Sat Mar 20 04:11:05 2010
@@ -377,6 +377,7 @@ public class SelectImpl
                 forUpdate = lm.selectForUpdate(this, lockLevel);
         }
 
+        logEagerRelations();
         SQLBuffer sql = toSelect(forUpdate, fetch);
         boolean isLRS = isLRS();
         int rsType = (isLRS && supportsRandomAccess(forUpdate))
@@ -1768,6 +1769,13 @@ public class SelectImpl
         return _eager;
     }
 
+    public void logEagerRelations() {
+        if (_eagerKeys != null) {
+            _conf.getLog(JDBCConfiguration.LOG_DIAG).trace(
+                "Eager relations: "+_eagerKeys);
+        }
+    }
+
     public SelectExecutor getEager(FieldMapping key) {
         if (_eager == null || !_eagerKeys.contains(key))
             return null;