Author: curtisr7
Date: Tue Nov 16 22:12:18 2010
New Revision: 1035834

URL: http://svn.apache.org/viewvc?rev=1035834&view=rev
Log:
OPENJPA-1886: Remove query parameters when tracing.

Modified:
    
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java
    
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/exception/TestParameterLogging.java

Modified: 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java?rev=1035834&r1=1035833&r2=1035834&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java
 (original)
+++ 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java
 Tue Nov 16 22:12:18 2010
@@ -287,6 +287,9 @@ public class BrokerImpl
                 "RetainState",
                 }));
     }
+    
+    private boolean _printParameters = false;
+    private static final String PRINT_PARAMETERS_CONFIG_STR = 
"PrintParameters";
 
     /**
      * Set the persistence manager's authentication. This is the first
@@ -378,6 +381,9 @@ public class BrokerImpl
             _instm.start(InstrumentationLevel.BROKER, this);
         }
 
+        _printParameters =
+            
Boolean.parseBoolean(Configurations.parseProperties(_conf.getConnectionFactoryProperties()).getProperty(
+                PRINT_PARAMETERS_CONFIG_STR, "false"));
         // synch with the global transaction in progress, if any
         if (_factory.syncWithManagedTransaction(this, false))
             beginInternal();
@@ -4707,6 +4713,12 @@ public class BrokerImpl
     }
 
     /**
+     * @return The value of 
openjpa.ConnectionFactoryProperties.PrintParameters. Default is false.
+     */
+    public boolean getPrintParameters() {
+        return _printParameters;
+    }
+    /**
      * Transactional cache that holds soft refs to clean instances.
      */
     static class TransactionalCache

Modified: 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java?rev=1035834&r1=1035833&r2=1035834&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java
 (original)
+++ 
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java
 Tue Nov 16 22:12:18 2010
@@ -130,6 +130,7 @@ public class QueryImpl
     private transient final Collection<RemoveOnCloseResultList> _resultLists = 
         new ReferenceHashSet(ReferenceHashSet.WEAK);
 
+    private boolean _printParameters = false;
     /**
      * Construct a query managed by the given broker.
      */
@@ -140,7 +141,7 @@ public class QueryImpl
         _fc = (FetchConfiguration) broker.getFetchConfiguration().clone();
         _log = 
broker.getConfiguration().getLog(OpenJPAConfiguration.LOG_QUERY);
         _storeQuery.setContext(this);
-
+        _printParameters = _broker.getPrintParameters();
         if (_broker != null && _broker.getMultithreaded())
             _lock = new ReentrantLock();
     }
@@ -1195,16 +1196,19 @@ public class QueryImpl
     /**
      * Trace log that the query is executing.
      */
-    private void logExecution(int op, Map<?, ?> params) {
+    private void logExecution(int op, Map<Object, Object> params) {
         String s = _query;
         if (StringUtils.isEmpty(s))
             s = toString();
 
         String msg = "executing-query";
-        if (!params.isEmpty())
-            msg += "-with-params";
+        if (params.isEmpty() == false) {
+            msg = "executing-query-with-params";
+        }
 
-        _log.trace(_loc.get(msg, s, params));
+        // If we aren't supposed to print parameters, replace values with '?'
+        Object p = (_printParameters) ? params : "?";
+        _log.trace(_loc.get(msg, s, p));
     }
 
     /**

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/exception/TestParameterLogging.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/exception/TestParameterLogging.java?rev=1035834&r1=1035833&r2=1035834&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/exception/TestParameterLogging.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/exception/TestParameterLogging.java
 Tue Nov 16 22:12:18 2010
@@ -18,6 +18,8 @@
  */
 package org.apache.openjpa.persistence.exception;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.regex.Pattern;
 
 import javax.persistence.EntityManager;
@@ -25,12 +27,18 @@ import javax.persistence.EntityManagerFa
 import javax.persistence.EntityTransaction;
 import javax.persistence.RollbackException;
 
+import org.apache.openjpa.lib.log.AbstractLog;
+import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.log.LogFactory;
 import org.apache.openjpa.persistence.test.AbstractPersistenceTestCase;
 
-public class TestParameterLogging extends AbstractPersistenceTestCase {
-
+public class TestParameterLogging extends AbstractPersistenceTestCase 
implements LogFactory {
     String _regex = ".*params=.*1,.*]";
-
+    private static final String ID = Integer.toString(Integer.MIN_VALUE);
+    public void tearDown() throws Exception {
+        super.tearDown();
+        messages.clear();
+    }
     /*
      * Persist the same row twice in the same transaction - will throw an 
exception with the failing SQL statement
      */
@@ -100,4 +108,81 @@ public class TestParameterLogging extend
             nested = nested.getCause();
         }
     }
+
+    public void testDefaultPrintParameters() {
+        queryCachePrintParametersLogic(null);
+    }
+    
+    public void testPrintParametersTrue() {
+        queryCachePrintParametersLogic(true);
+    }
+
+    public void testPrintParametersFalse() {
+        queryCachePrintParametersLogic(false);
+    }
+    
+    private void queryCachePrintParametersLogic(Boolean printParameters){
+        Object[] props = null;
+        if (printParameters == null) {
+            props =
+                new Object[] { PObject.class, CLEAR_TABLES, 
"openjpa.DataCache", "true",
+                    "openjpa.Log", 
"org.apache.openjpa.persistence.exception.TestParameterLogging" };
+        } else {
+            props =
+                new Object[] { PObject.class, CLEAR_TABLES, 
"openjpa.DataCache", "true",
+                    "openjpa.Log", 
"org.apache.openjpa.persistence.exception.TestParameterLogging",
+                    "openjpa.ConnectionFactoryProperties", "PrintParameters=" 
+ printParameters.booleanValue() };
+        }
+        EntityManagerFactory emf = createEMF(props);
+        EntityManager em = emf.createEntityManager();
+        String queryStr = "SELECT c FROM PObject c WHERE c.id=:id";
+        em.createQuery(queryStr).setParameter("id", 
Integer.MIN_VALUE).getResultList();
+        em.createQuery(queryStr).setParameter("id", 
Integer.MIN_VALUE).getResultList();
+        boolean expected = (printParameters == null) ? false : 
printParameters.booleanValue();
+        boolean actual = false;
+        
+        // Look through all trace messages for the ID before doing asserts
+        for (String s : messages) {
+            actual |= s.contains(ID);
+        }
+        
+        assertEquals(expected, actual);
+    }
+
+    // Start LogFactory implementation
+    // This is static so both the test and the logger share
+    private static List<String> messages = new ArrayList<String>();
+    public Log getLog(String channel) {
+        return new AbstractLog() {
+
+            protected boolean isEnabled(short logLevel) {
+                return true;
+            }
+
+            @Override
+            public void trace(Object message) {
+                messages.add(message.toString());
+            }
+
+            protected void log(short type, String message, Throwable t) {
+                messages.add(message);
+            }
+            
+            @Override
+            public void error(Object message) {
+                messages.add(message.toString());
+            }
+            @Override
+            public void warn(Object message) {
+                // TODO Auto-generated method stub
+                super.warn(message.toString());
+            }
+            @Override
+            public void info(Object message) {
+                messages.add(message.toString());
+            }
+        };
+    }
+
+    // End LogFactory implementation
 }


Reply via email to