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