You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/02/04 21:15:26 UTC

svn commit: r1442327 - in /tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb: assembler/classic/Assembler.java resource/jdbc/logging/LoggingPreparedSqlStatement.java

Author: rmannibucau
Date: Mon Feb  4 20:15:25 2013
New Revision: 1442327

URL: http://svn.apache.org/viewvc?rev=1442327&view=rev
Log:
stopping @Async pool later to be sure singleton are stopped for instance + logging batch sql params

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/logging/LoggingPreparedSqlStatement.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1442327&r1=1442326&r2=1442327&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Mon Feb  4 20:15:25 2013
@@ -1287,11 +1287,6 @@ public class Assembler extends Assembler
             logger.warning("Application id '" + appInfo.appId + "' not found in: " + Arrays.toString(containerSystem.getAppContextKeys()));
             return;
         } else {
-            final AsynchronousPool pool = appContext.get(AsynchronousPool.class);
-            if (pool != null) {
-                pool.stop();
-            }
-
             final WebBeansContext webBeansContext = appContext.getWebBeansContext();
             if (webBeansContext != null) {
                 final ClassLoader old = Thread.currentThread().getContextClassLoader();
@@ -1437,6 +1432,12 @@ public class Assembler extends Assembler
                 }
         }
 
+        // stop this executor only now since @PreDestroy can trigger some stop events
+        final AsynchronousPool pool = appContext.get(AsynchronousPool.class);
+        if (pool != null) {
+            pool.stop();
+        }
+
         for (final String sId : moduleIds) {
             try {
                 globalContext.unbind(VALIDATOR_FACTORY_NAMING_CONTEXT + sId);

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/logging/LoggingPreparedSqlStatement.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/logging/LoggingPreparedSqlStatement.java?rev=1442327&r1=1442326&r2=1442327&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/logging/LoggingPreparedSqlStatement.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/logging/LoggingPreparedSqlStatement.java Mon Feb  4 20:15:25 2013
@@ -32,10 +32,12 @@ public class LoggingPreparedSqlStatement
     private final PreparedStatement delegate;
     private final String sql;
     private final List<Parameter> parameters = new ArrayList<Parameter>();
+    private int parameterIndex;
 
     public LoggingPreparedSqlStatement(final PreparedStatement result, final String query) {
         delegate = result;
         sql= query;
+        parameterIndex = 0;
     }
 
     @Override
@@ -46,39 +48,72 @@ public class LoggingPreparedSqlStatement
         final TimeWatcherExecutor.TimerWatcherResult result = TimeWatcherExecutor.execute(method, delegate, args, execute);
 
         if (mtdName.startsWith("set") && args.length >= 2 && (args[0].getClass().equals(Integer.TYPE) || args[0].getClass().equals(Integer.class))) {
-            parameters.add(new Parameter(mtdName.substring(3), (Integer) args[0], args[1]));
+            parameters.add(new Parameter(mtdName.substring(3), parameterIndex, (Integer) args[0], args[1]));
         } else if (execute) {
             String str = sql;
             if (str.contains("?")) {
                 Collections.sort(parameters);
-                for (Parameter param : parameters) {
-                    try {
-                        str = str.replaceFirst("\\?", param.value.toString());
-                    } catch (Exception e) {
-                        str = str.replaceFirst("\\?", param.value.getClass().getName());
+                int lastBatch = 0;
+                for (int i = 0; i < parameters.size(); i++) {
+                    final Parameter param = parameters.get(i);
+                    if (str.contains("?")) {
+                        try {
+                            str = str.replaceFirst("\\?", param.value.toString());
+                        } catch (Exception e) {
+                            str = str.replaceFirst("\\?", param.value.getClass().getName());
+                        }
+                        lastBatch = param.batchIndex;
+                    } else {
+                        if (lastBatch != param.batchIndex) {
+                            str += ", (";
+                            lastBatch = param.batchIndex;
+                        }
+
+                        try {
+                            str += param.value.toString();
+                        } catch (Exception e) {
+                            str += param.value.getClass().getName();
+                        }
+
+                        if (i == parameters.size() - 1 || parameters.get(i + 1).batchIndex != lastBatch) {
+                            str += ")";
+                        } else {
+                            str += ",";
+                        }
                     }
                 }
             }
             LOGGER.info(format(str, result.getDuration()));
+        } else if ("clearParameters".equals(mtdName)) {
+            parameters.clear();
+            parameterIndex = 0;
+        } else if ("addBatch".equals(mtdName)) {
+            parameterIndex++;
         }
 
         return result.getResult();
     }
 
     protected static class Parameter implements Comparable<Parameter> {
-        private String type;
-        private int key;
-        private Object value;
+        private final String type;
+        private final int batchIndex;
+        private final int key;
+        private final Object value;
 
-        public Parameter(String type, int key, Object value) {
+        public Parameter(String type, int batchIdx, int key, Object value) {
             this.type = type;
+            this.batchIndex = batchIdx;
             this.key = key;
             this.value = value;
         }
 
         @Override
         public int compareTo(final Parameter o) {
-            return key - o.key;
+            int comp = batchIndex - o.batchIndex;
+            if (comp == 0) {
+                return key - o.key;
+            }
+            return comp;
         }
 
         @Override