openjpa-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mik...@apache.org
Subject svn commit: r953339 - in /openjpa/branches/1.3.x: openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/batch/exception/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/pe...
Date Thu, 10 Jun 2010 14:43:51 GMT
Author: mikedd
Date: Thu Jun 10 14:43:51 2010
New Revision: 953339

URL: http://svn.apache.org/viewvc?rev=953339&view=rev
Log:
OPENJPA-1678: add printParameters property to prevent SQL parameter values from being logged
in exceptions or trace

Added:
    openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/exception/TestParameterLogging.java
  (with props)
Modified:
    openjpa/branches/1.3.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/LoggingConnectionDecorator.java
    openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/batch/exception/TestBatchLimitException.java

Modified: openjpa/branches/1.3.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/LoggingConnectionDecorator.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/LoggingConnectionDecorator.java?rev=953339&r1=953338&r2=953339&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/LoggingConnectionDecorator.java
(original)
+++ openjpa/branches/1.3.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/jdbc/LoggingConnectionDecorator.java
Thu Jun 10 14:43:51 2010
@@ -85,6 +85,7 @@ public class LoggingConnectionDecorator 
     private int _warningAction = WARN_IGNORE;
     private SQLWarningHandler _warningHandler;
     private boolean _trackParameters = true;
+    private boolean _printParameters = false;
 
     /**
      * If set to <code>true</code>, pretty-print SQL by running it
@@ -143,6 +144,21 @@ public class LoggingConnectionDecorator 
     }
 
     /**
+     * <p>
+     * Whether parameter values will be printed in exception messages or in trace. This is
different from
+     * trackParameters which controls whether OpenJPA will track parameters internally (visible
while debugging and used
+     * in batching).
+     * </p>
+     */
+    public boolean getPrintParameters() {
+        return _printParameters;
+    }
+
+    public void setPrintParameters(boolean printParameters) {
+        _printParameters = printParameters;
+    }
+
+    /**
      * What to do with SQL warnings.
      */
     public void setWarningAction(String warningAction) {
@@ -1318,7 +1334,12 @@ public class LoggingConnectionDecorator 
                 if (_params != null && !_params.isEmpty()) {
                     paramBuf = new StringBuffer();
                     for (Iterator itr = _params.iterator(); itr.hasNext();) {
-                        paramBuf.append(itr.next());
+                        if(_printParameters) { 
+                            paramBuf.append(itr.next());
+                        } else {
+                            paramBuf.append("?");
+                            itr.next();
+                        }
                         if (itr.hasNext())
                             paramBuf.append(", ");
                     }

Modified: openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/batch/exception/TestBatchLimitException.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/batch/exception/TestBatchLimitException.java?rev=953339&r1=953338&r2=953339&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/batch/exception/TestBatchLimitException.java
(original)
+++ openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/batch/exception/TestBatchLimitException.java
Thu Jun 10 14:43:51 2010
@@ -42,6 +42,7 @@ public class TestBatchLimitException ext
                 "openjpa.jdbc.SynchronizeMappings", 
                 "buildSchema(ForeignKeys=true)",
                 "openjpa.jdbc.DBDictionary", batchLimit, 
+                "openjpa.ConnectionFactoryProperties", "PrintParameters=true",
                 CLEAR_TABLES);
 
         assertNotNull("Unable to create EntityManagerFactory", emf);

Added: openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/exception/TestParameterLogging.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/exception/TestParameterLogging.java?rev=953339&view=auto
==============================================================================
--- openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/exception/TestParameterLogging.java
(added)
+++ openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/exception/TestParameterLogging.java
Thu Jun 10 14:43:51 2010
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.openjpa.persistence.exception;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.regex.Pattern;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.RollbackException;
+
+import org.apache.openjpa.persistence.test.PersistenceTestCase;
+
+public class TestParameterLogging extends PersistenceTestCase {
+
+    String _regex = ".*params=.*1,.*]";
+
+    /*
+     * Persist the same row twice in the same transaction - will throw an exception with
the failing SQL statement
+     */
+    private RollbackException getRollbackException(Object... props) {
+        EntityManagerFactory emf = createEMF(props);
+        EntityManager em = emf.createEntityManager();
+        EntityTransaction tran = em.getTransaction();
+
+        PObject p1, p2;
+        p1 = new PObject();
+        p2 = new PObject();
+
+        p1.setId(1);
+        p2.setId(1);
+
+        try {
+            tran.begin();
+            em.persist(p1);
+            em.persist(p2);
+            tran.commit();
+            em.close();
+            fail("Expected a RollbackException");
+            return null;
+        } catch (RollbackException re) {
+            return re;
+        } finally {
+            if (tran.isActive()) {
+                tran.rollback();
+            }
+            if (em.isOpen()) {
+                em.close();
+            }
+            if (emf.isOpen()) {
+                emf.close();
+            }
+        }
+    }
+
+    /*
+     * Ensure that parameter values are not included in exception text by default.
+     */
+    public void testNoParamsByDefault() {
+        RollbackException e = getRollbackException(PObject.class, CLEAR_TABLES);
+
+        assertFalse(Pattern.matches(_regex, e.toString()));
+        Throwable nested = e.getCause();
+        while (nested != null) {
+            if (Pattern.matches(".*INSERT.*", nested.toString())) {
+                // only check if the message contains the insert statement.
+                assertFalse(Pattern.matches(_regex, nested.toString()));
+            }
+            nested = nested.getCause();
+        }
+    }
+
+    /*
+     * If the EMF is created with PrintParameters=true the parameter values will be logged
in exception text.
+     */
+    public void testParamsEnabledByConfig() {
+        RollbackException e =
+            getRollbackException(PObject.class, CLEAR_TABLES, "openjpa.ConnectionFactoryProperties",
+                "PrintParameters=true");
+        assertFalse(Pattern.matches(_regex, e.toString()));
+        Throwable nested = e.getCause();
+        assertNotNull(nested); // expecting at least one nested exception.
+        while (nested != null) {
+            if (Pattern.matches(".*INSERT.*", nested.toString())) {
+                // only check if the message contains the insert statement.
+                assertTrue(Pattern.matches(_regex, nested.toString()));
+            }
+            nested = nested.getCause();
+        }
+    }
+}

Propchange: openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/exception/TestParameterLogging.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message