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
}