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;