diff --git a/pom.xml b/pom.xml
index 21ba1ea794..a0fac6f6c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -545,5 +545,11 @@
3.3.0
test
+
+ com.google.guava
+ guava
+ 14.0.1
+ test
+
diff --git a/src/main/java/com/alibaba/druid/filter/FilterManager.java b/src/main/java/com/alibaba/druid/filter/FilterManager.java
index db4b489bdf..5a44d41106 100644
--- a/src/main/java/com/alibaba/druid/filter/FilterManager.java
+++ b/src/main/java/com/alibaba/druid/filter/FilterManager.java
@@ -27,8 +27,8 @@ import java.util.concurrent.ConcurrentHashMap;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
-import com.alibaba.druid.util.IOUtils;
import com.alibaba.druid.util.JdbcUtils;
+import com.alibaba.druid.util.Utils;
public class FilterManager {
@@ -99,7 +99,7 @@ public class FilterManager {
continue;
}
- Class> filterClass = IOUtils.loadClass(filterClassName);
+ Class> filterClass = Utils.loadClass(filterClassName);
if (filterClass == null) {
LOG.error("load filter error, filter not found : " + filterClassName);
@@ -126,7 +126,7 @@ public class FilterManager {
return;
}
- Class> filterClass = IOUtils.loadClass(filterName);
+ Class> filterClass = Utils.loadClass(filterName);
if (filterClass == null) {
LOG.error("load filter error, filter not found : " + filterName);
return;
diff --git a/src/main/java/com/alibaba/druid/filter/encoding/EncodingConvertFilter.java b/src/main/java/com/alibaba/druid/filter/encoding/EncodingConvertFilter.java
index c7b04afab7..5864b8811f 100644
--- a/src/main/java/com/alibaba/druid/filter/encoding/EncodingConvertFilter.java
+++ b/src/main/java/com/alibaba/druid/filter/encoding/EncodingConvertFilter.java
@@ -32,7 +32,7 @@ import com.alibaba.druid.proxy.jdbc.ConnectionProxy;
import com.alibaba.druid.proxy.jdbc.PreparedStatementProxy;
import com.alibaba.druid.proxy.jdbc.ResultSetProxy;
import com.alibaba.druid.proxy.jdbc.StatementProxy;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
/**
* @author wenshao
@@ -196,7 +196,7 @@ public class EncodingConvertFilter extends FilterAdapter {
if (object instanceof Reader) {
Reader reader = (Reader) object;
- String text = IOUtils.read(reader);
+ String text = Utils.read(reader);
return new StringReader(decode(connection, text));
}
@@ -210,7 +210,7 @@ public class EncodingConvertFilter extends FilterAdapter {
if (object instanceof Reader) {
Reader reader = (Reader) object;
- String text = IOUtils.read(reader);
+ String text = Utils.read(reader);
return new StringReader(decode(stmt.getConnectionProxy(), text));
}
@@ -382,7 +382,7 @@ public class EncodingConvertFilter extends FilterAdapter {
@Override
public void preparedStatement_setCharacterStream(FilterChain chain, PreparedStatementProxy statement,
int parameterIndex, java.io.Reader reader) throws SQLException {
- String text = IOUtils.read(reader);
+ String text = Utils.read(reader);
String encodedText = encode(statement.getConnectionProxy(), text);
super.preparedStatement_setCharacterStream(chain, statement, parameterIndex, new StringReader(encodedText));
}
@@ -391,7 +391,7 @@ public class EncodingConvertFilter extends FilterAdapter {
public void preparedStatement_setCharacterStream(FilterChain chain, PreparedStatementProxy statement,
int parameterIndex, java.io.Reader reader, int length)
throws SQLException {
- String text = IOUtils.read(reader, length);
+ String text = Utils.read(reader, length);
String encodedText = encode(statement.getConnectionProxy(), text);
super.preparedStatement_setCharacterStream(chain, statement, parameterIndex, new StringReader(encodedText),
encodedText.length());
@@ -401,7 +401,7 @@ public class EncodingConvertFilter extends FilterAdapter {
public void preparedStatement_setCharacterStream(FilterChain chain, PreparedStatementProxy statement,
int parameterIndex, java.io.Reader reader, long length)
throws SQLException {
- String text = IOUtils.read(reader, (int) length);
+ String text = Utils.read(reader, (int) length);
String encodedText = encode(statement.getConnectionProxy(), text);
super.preparedStatement_setCharacterStream(chain, statement, parameterIndex, new StringReader(encodedText),
encodedText.length());
@@ -414,7 +414,7 @@ public class EncodingConvertFilter extends FilterAdapter {
String encodedText = encode(statement.getConnectionProxy(), (String) x);
super.preparedStatement_setObject(chain, statement, parameterIndex, encodedText);
} else if (x instanceof Reader) {
- String text = IOUtils.read((Reader) x);
+ String text = Utils.read((Reader) x);
String encodedText = encode(statement.getConnectionProxy(), text);
super.preparedStatement_setObject(chain, statement, parameterIndex, new StringReader(encodedText));
} else {
@@ -429,7 +429,7 @@ public class EncodingConvertFilter extends FilterAdapter {
String encodedText = encode(statement.getConnectionProxy(), (String) x);
super.preparedStatement_setObject(chain, statement, parameterIndex, encodedText, targetSqlType);
} else if (x instanceof Reader) {
- String text = IOUtils.read((Reader) x);
+ String text = Utils.read((Reader) x);
String encodedText = encode(statement.getConnectionProxy(), text);
super.preparedStatement_setObject(chain, statement, parameterIndex, new StringReader(encodedText),
targetSqlType);
@@ -446,7 +446,7 @@ public class EncodingConvertFilter extends FilterAdapter {
super.preparedStatement_setObject(chain, statement, parameterIndex, encodedText, targetSqlType,
scaleOrLength);
} else if (x instanceof Reader) {
- String text = IOUtils.read((Reader) x);
+ String text = Utils.read((Reader) x);
String encodedText = encode(statement.getConnectionProxy(), text);
super.preparedStatement_setObject(chain, statement, parameterIndex, new StringReader(encodedText),
targetSqlType, scaleOrLength);
@@ -471,7 +471,7 @@ public class EncodingConvertFilter extends FilterAdapter {
@Override
public java.io.Reader clob_getCharacterStream(FilterChain chain, ClobProxy wrapper) throws SQLException {
Reader reader = super.clob_getCharacterStream(chain, wrapper);
- String text = IOUtils.read(reader);
+ String text = Utils.read(reader);
return new StringReader(decode(wrapper.getConnectionWrapper(), text));
}
@@ -479,7 +479,7 @@ public class EncodingConvertFilter extends FilterAdapter {
public Reader clob_getCharacterStream(FilterChain chain, ClobProxy wrapper, long pos, long length)
throws SQLException {
Reader reader = super.clob_getCharacterStream(chain, wrapper, pos, length);
- String text = IOUtils.read(reader);
+ String text = Utils.read(reader);
return new StringReader(decode(wrapper.getConnectionWrapper(), text));
}
@@ -499,7 +499,7 @@ public class EncodingConvertFilter extends FilterAdapter {
@Override
public void callableStatement_setCharacterStream(FilterChain chain, CallableStatementProxy statement,
String parameterName, java.io.Reader reader) throws SQLException {
- String text = IOUtils.read(reader);
+ String text = Utils.read(reader);
Reader encodeReader = new StringReader(encode(statement.getConnectionProxy(), text));
super.callableStatement_setCharacterStream(chain, statement, parameterName, encodeReader);
}
@@ -508,7 +508,7 @@ public class EncodingConvertFilter extends FilterAdapter {
public void callableStatement_setCharacterStream(FilterChain chain, CallableStatementProxy statement,
String parameterName, java.io.Reader reader, int length)
throws SQLException {
- String text = IOUtils.read(reader, length);
+ String text = Utils.read(reader, length);
String encodeText = encode(statement.getConnectionProxy(), text);
Reader encodeReader = new StringReader(encodeText);
super.callableStatement_setCharacterStream(chain, statement, parameterName, encodeReader, encodeText.length());
@@ -518,7 +518,7 @@ public class EncodingConvertFilter extends FilterAdapter {
public void callableStatement_setCharacterStream(FilterChain chain, CallableStatementProxy statement,
String parameterName, java.io.Reader reader, long length)
throws SQLException {
- String text = IOUtils.read(reader, (int) length);
+ String text = Utils.read(reader, (int) length);
String encodeText = encode(statement.getConnectionProxy(), text);
Reader encodeReader = new StringReader(encodeText);
super.callableStatement_setCharacterStream(chain, statement, parameterName, encodeReader,
@@ -538,7 +538,7 @@ public class EncodingConvertFilter extends FilterAdapter {
String encodedText = encode(statement.getConnectionProxy(), (String) x);
super.callableStatement_setObject(chain, statement, parameterName, encodedText);
} else if (x instanceof Reader) {
- String text = IOUtils.read((Reader) x);
+ String text = Utils.read((Reader) x);
String encodedText = encode(statement.getConnectionProxy(), text);
super.callableStatement_setObject(chain, statement, parameterName, new StringReader(encodedText));
} else {
@@ -553,7 +553,7 @@ public class EncodingConvertFilter extends FilterAdapter {
String encodedText = encode(statement.getConnectionProxy(), (String) x);
super.callableStatement_setObject(chain, statement, parameterName, encodedText, targetSqlType);
} else if (x instanceof Reader) {
- String text = IOUtils.read((Reader) x);
+ String text = Utils.read((Reader) x);
String encodedText = encode(statement.getConnectionProxy(), text);
super.callableStatement_setObject(chain, statement, parameterName, new StringReader(encodedText),
targetSqlType);
@@ -569,7 +569,7 @@ public class EncodingConvertFilter extends FilterAdapter {
String encodedText = encode(statement.getConnectionProxy(), (String) x);
super.callableStatement_setObject(chain, statement, parameterName, encodedText, targetSqlType, scale);
} else if (x instanceof Reader) {
- String text = IOUtils.read((Reader) x);
+ String text = Utils.read((Reader) x);
String encodedText = encode(statement.getConnectionProxy(), text);
super.callableStatement_setObject(chain, statement, parameterName, new StringReader(encodedText),
targetSqlType, scale);
diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java
index 3b072b6c04..b632636f14 100644
--- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java
+++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java
@@ -61,7 +61,7 @@ import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
import com.alibaba.druid.util.DruidPasswordCallback;
import com.alibaba.druid.util.Histogram;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
import com.alibaba.druid.util.StringUtils;
@@ -563,7 +563,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
}
public void setValidConnectionCheckerClassName(String validConnectionCheckerClass) throws Exception {
- Class> clazz = IOUtils.loadClass(validConnectionCheckerClass);
+ Class> clazz = Utils.loadClass(validConnectionCheckerClass);
ValidConnectionChecker validConnectionChecker = null;
if (clazz != null) {
validConnectionChecker = (ValidConnectionChecker) clazz.newInstance();
@@ -798,7 +798,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
}
public void setPasswordCallbackClassName(String passwordCallbackClassName) throws Exception {
- Class> clazz = IOUtils.loadClass(passwordCallbackClassName);
+ Class> clazz = Utils.loadClass(passwordCallbackClassName);
if (clazz != null) {
this.passwordCallback = (PasswordCallback) clazz.newInstance();
} else {
@@ -1130,7 +1130,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
return;
}
- Class> clazz = IOUtils.loadClass(exceptionSorter);
+ Class> clazz = Utils.loadClass(exceptionSorter);
if (clazz == null) {
LOG.error("load exceptionSorter error : " + exceptionSorter);
} else {
@@ -1286,7 +1286,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
List list = new ArrayList();
for (DruidPooledConnection conn : this.getActiveConnections()) {
- list.add(IOUtils.toString(conn.getConnectStackTrace()));
+ list.add(Utils.toString(conn.getConnectStackTrace()));
}
return list;
@@ -1515,7 +1515,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
if (createError != null) {
map.put("ConnectionConnectErrorLastTime", getLastCreateErrorTime());
map.put("ConnectionConnectErrorLastMessage", createError.getMessage());
- map.put("ConnectionConnectErrorLastStackTrace", IOUtils.getStackTrace(createError));
+ map.put("ConnectionConnectErrorLastStackTrace", Utils.getStackTrace(createError));
} else {
map.put("ConnectionConnectErrorLastTime", null);
map.put("ConnectionConnectErrorLastMessage", null);
@@ -1561,7 +1561,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
map.put("ConnectionConnectCount", this.getConnectCount());
if (createError != null) {
map.put("ConnectionErrorLastMessage", createError.getMessage());
- map.put("ConnectionErrorLastStackTrace", IOUtils.getStackTrace(createError));
+ map.put("ConnectionErrorLastStackTrace", Utils.getStackTrace(createError));
} else {
map.put("ConnectionErrorLastMessage", null);
map.put("ConnectionErrorLastStackTrace", null);
diff --git a/src/main/java/com/alibaba/druid/pool/DruidConnectionHolder.java b/src/main/java/com/alibaba/druid/pool/DruidConnectionHolder.java
index c6830d4979..1e30f31077 100644
--- a/src/main/java/com/alibaba/druid/pool/DruidConnectionHolder.java
+++ b/src/main/java/com/alibaba/druid/pool/DruidConnectionHolder.java
@@ -28,7 +28,7 @@ import javax.sql.StatementEventListener;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcConstants;
/**
@@ -251,14 +251,14 @@ public final class DruidConnectionHolder {
buf.append("{ID:");
buf.append(System.identityHashCode(conn));
buf.append(", ConnectTime:\"");
- buf.append(IOUtils.toString(new Date(this.connecttimeMillis)));
+ buf.append(Utils.toString(new Date(this.connecttimeMillis)));
buf.append("\", UseCount:");
buf.append(useCount);
if (lastActiveTimeMillis > 0) {
buf.append(", LastActiveTime:\"");
- buf.append(IOUtils.toString(new Date(this.lastActiveTimeMillis)));
+ buf.append(Utils.toString(new Date(this.lastActiveTimeMillis)));
buf.append("\"");
}
diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java
index 4d98ee97d5..c34ee53cf2 100644
--- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java
+++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java
@@ -15,7 +15,7 @@
*/
package com.alibaba.druid.pool;
-import static com.alibaba.druid.util.IOUtils.getBoolean;
+import static com.alibaba.druid.util.Utils.getBoolean;
import java.io.Closeable;
import java.security.AccessController;
@@ -82,7 +82,7 @@ import com.alibaba.druid.stat.JdbcSqlStat;
import com.alibaba.druid.stat.JdbcSqlStatValue;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JMXUtils;
import com.alibaba.druid.util.JdbcConstants;
import com.alibaba.druid.util.JdbcUtils;
@@ -492,7 +492,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
init = true;
- initStackTrace = IOUtils.toString(Thread.currentThread().getStackTrace());
+ initStackTrace = Utils.toString(Thread.currentThread().getStackTrace());
this.id = DruidDriver.createDataSourceId();
if (this.id > 1) {
@@ -1995,7 +1995,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
buf.append("{");
buf.append("\n\tCreateTime:\"");
- buf.append(IOUtils.toString(getCreatedTime()));
+ buf.append(Utils.toString(getCreatedTime()));
buf.append("\"");
buf.append(",\n\tActiveCount:");
diff --git a/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java b/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java
index 68f316b08a..84822d0f28 100644
--- a/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java
+++ b/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java
@@ -30,8 +30,8 @@ import com.alibaba.druid.pool.ValidConnectionCheckerAdapter;
import com.alibaba.druid.proxy.jdbc.ConnectionProxy;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
-import com.alibaba.druid.util.IOUtils;
import com.alibaba.druid.util.JdbcUtils;
+import com.alibaba.druid.util.Utils;
public class MySqlValidConnectionChecker extends ValidConnectionCheckerAdapter implements ValidConnectionChecker, Serializable {
@@ -44,7 +44,7 @@ public class MySqlValidConnectionChecker extends ValidConnectionCheckerAdapter i
public MySqlValidConnectionChecker(){
try {
- clazz = IOUtils.loadClass("com.mysql.jdbc.Connection");
+ clazz = Utils.loadClass("com.mysql.jdbc.Connection");
ping = clazz.getMethod("ping");
if (ping != null) {
usePingMethod = true;
diff --git a/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java b/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java
index e9f4c2f4da..f8181df441 100644
--- a/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java
+++ b/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java
@@ -29,8 +29,8 @@ import com.alibaba.druid.pool.ValidConnectionCheckerAdapter;
import com.alibaba.druid.proxy.jdbc.ConnectionProxy;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
-import com.alibaba.druid.util.IOUtils;
import com.alibaba.druid.util.JdbcUtils;
+import com.alibaba.druid.util.Utils;
public class OracleValidConnectionChecker extends ValidConnectionCheckerAdapter implements ValidConnectionChecker, Serializable {
@@ -44,7 +44,7 @@ public class OracleValidConnectionChecker extends ValidConnectionCheckerAdapter
public OracleValidConnectionChecker(){
try {
- clazz = IOUtils.loadClass("oracle.jdbc.driver.OracleConnection");
+ clazz = Utils.loadClass("oracle.jdbc.driver.OracleConnection");
if (clazz != null) {
ping = clazz.getMethod("pingDatabase", new Class[] { Integer.TYPE });
} else {
diff --git a/src/main/java/com/alibaba/druid/proxy/DruidDriver.java b/src/main/java/com/alibaba/druid/proxy/DruidDriver.java
index 314abebb29..ca9d59830c 100644
--- a/src/main/java/com/alibaba/druid/proxy/DruidDriver.java
+++ b/src/main/java/com/alibaba/druid/proxy/DruidDriver.java
@@ -43,7 +43,7 @@ import com.alibaba.druid.proxy.jdbc.DataSourceProxyImpl;
import com.alibaba.druid.stat.JdbcStatManager;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JMXUtils;
import com.alibaba.druid.util.JdbcUtils;
@@ -256,7 +256,7 @@ public class DruidDriver implements Driver, DruidDriverMBean {
}
public Driver createDriver(String className) throws SQLException {
- Class> rawDriverClass = IOUtils.loadClass(className);
+ Class> rawDriverClass = Utils.loadClass(className);
if (rawDriverClass == null) {
throw new SQLException("jdbc-driver's class not found. '" + className + "'");
diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java
index 83d7603cfd..041f998f2b 100644
--- a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java
+++ b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java
@@ -35,7 +35,7 @@ import com.alibaba.druid.filter.FilterChain;
import com.alibaba.druid.filter.FilterChainImpl;
import com.alibaba.druid.stat.JdbcDataSourceStat;
import com.alibaba.druid.stat.JdbcStatManager;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
/**
@@ -216,7 +216,7 @@ public class DataSourceProxyImpl implements DataSourceProxy, DataSourceProxyImpl
if (lastConnectionConnectError != null) {
map.put("ConnectionConnectErrorLastTime", stat.getConnectionStat().getErrorLastTime());
map.put("ConnectionConnectErrorLastMessage", lastConnectionConnectError.getMessage());
- map.put("ConnectionConnectErrorLastStackTrace", IOUtils.getStackTrace(lastConnectionConnectError));
+ map.put("ConnectionConnectErrorLastStackTrace", Utils.getStackTrace(lastConnectionConnectError));
} else {
map.put("ConnectionConnectErrorLastTime", null);
map.put("ConnectionConnectErrorLastMessage", null);
@@ -237,7 +237,7 @@ public class DataSourceProxyImpl implements DataSourceProxy, DataSourceProxyImpl
map.put("StatementLastErrorTime", stat.getStatementStat().getLastErrorTime());
map.put("StatementLastErrorMessage", lastStatementError.getMessage());
- map.put("StatementLastErrorStackTrace", IOUtils.getStackTrace(lastStatementError));
+ map.put("StatementLastErrorStackTrace", Utils.getStackTrace(lastStatementError));
} else {
map.put("StatementLastErrorTime", null);
map.put("StatementLastErrorMessage", null);
@@ -261,7 +261,7 @@ public class DataSourceProxyImpl implements DataSourceProxy, DataSourceProxyImpl
Throwable lastResultSetError = stat.getResultSetStat().getLastError();
if (lastResultSetError != null) {
map.put("ResultSetLastErrorMessage", lastResultSetError.getMessage());
- map.put("ResultSetLastErrorStackTrace", IOUtils.getStackTrace(lastResultSetError));
+ map.put("ResultSetLastErrorStackTrace", Utils.getStackTrace(lastResultSetError));
} else {
map.put("ResultSetLastErrorMessage", null);
map.put("ResultSetLastErrorStackTrace", null);
@@ -271,7 +271,7 @@ public class DataSourceProxyImpl implements DataSourceProxy, DataSourceProxyImpl
Throwable lastConnectionError = stat.getConnectionStat().getErrorLast();
if (lastConnectionError != null) {
map.put("ConnectionErrorLastMessage", lastConnectionError.getMessage());
- map.put("ConnectionErrorLastStackTrace", IOUtils.getStackTrace(lastConnectionError));
+ map.put("ConnectionErrorLastStackTrace", Utils.getStackTrace(lastConnectionError));
} else {
map.put("ConnectionErrorLastMessage", null);
map.put("ConnectionErrorLastStackTrace", null);
diff --git a/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java b/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java
index f2a6c16b81..8e0f59139f 100644
--- a/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java
+++ b/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java
@@ -34,7 +34,7 @@ import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils;
import com.alibaba.druid.support.http.stat.WebAppStatManager;
import com.alibaba.druid.support.spring.stat.SpringStatManager;
import com.alibaba.druid.util.DruidDataSourceUtils;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcSqlStatUtils;
import com.alibaba.druid.util.StringUtils;
@@ -344,7 +344,7 @@ public final class DruidStatManagerFacade {
dataMap.put("JavaVMName", System.getProperty("java.vm.name"));
dataMap.put("JavaVersion", System.getProperty("java.version"));
dataMap.put("JavaClassPath", System.getProperty("java.class.path"));
- dataMap.put("StartTime", IOUtils.getStartTime());
+ dataMap.put("StartTime", Utils.getStartTime());
return dataMap;
}
diff --git a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java
index fe3fb749f6..34a449a8ee 100644
--- a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java
+++ b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java
@@ -32,10 +32,12 @@ import javax.management.openmbean.SimpleType;
import com.alibaba.druid.proxy.DruidDriver;
import com.alibaba.druid.proxy.jdbc.StatementExecuteType;
import com.alibaba.druid.util.JMXUtils;
+import com.alibaba.druid.util.Utils;
public final class JdbcSqlStat implements JdbcSqlStatMBean {
private final String sql;
+ private long sqlHash;
private long id;
private String dataSource;
private long executeLastStartTime;
@@ -385,6 +387,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
val.setDbType(dbType);
val.setSql(sql);
+ val.setSqlHash(getSqlHash());
val.setId(id);
val.setExecuteLastStartTime(executeLastStartTime);
if (reset) {
@@ -586,6 +589,13 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
public String getSql() {
return sql;
}
+
+ public long getSqlHash() {
+ if (sqlHash == 0) {
+ sqlHash = Utils.murmurhash2_64(sql);
+ }
+ return sqlHash;
+ }
public Date getExecuteLastStartTime() {
if (executeLastStartTime <= 0) {
diff --git a/src/main/java/com/alibaba/druid/stat/JdbcSqlStatValue.java b/src/main/java/com/alibaba/druid/stat/JdbcSqlStatValue.java
index 8b9648bf78..418da41ca6 100644
--- a/src/main/java/com/alibaba/druid/stat/JdbcSqlStatValue.java
+++ b/src/main/java/com/alibaba/druid/stat/JdbcSqlStatValue.java
@@ -21,61 +21,139 @@ import java.util.Map;
import javax.management.JMException;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.support.monitor.MField;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JMXUtils;
public class JdbcSqlStatValue {
- protected String sql;
protected long id;
+
+ protected String sql;
+
+ @MField
+ private long sqlHash;
+
+ @MField
protected String dataSource;
+
+ @MField
protected long executeLastStartTime;
+ @MField
protected long executeBatchSizeTotal;
+
+ @MField
protected int executeBatchSizeMax;
+ @MField
protected long executeSuccessCount;
+
+ @MField
protected long executeSpanNanoTotal;
+
+ @MField
protected long executeSpanNanoMax;
+
+ @MField
protected int runningCount;
+
+ @MField
protected int concurrentMax;
+
+ @MField
protected long resultSetHoldTimeNano;
+
+ @MField
protected long executeAndResultSetHoldTime;
+ @MField
protected String name;
+
+ @MField
protected String file;
+
+ @MField
protected String dbType;
+ @MField
protected long executeNanoSpanMaxOccurTime;
+ @MField
protected long executeErrorCount;
+
protected Throwable executeErrorLast;
+
+ @MField
+ protected String executeErrorLastMessage;
+
+ @MField
+ protected String executeErrorLastClass;
+
+ @MField
+ protected String executeErrorLastStackTrace;
+
+ @MField
protected long executeErrorLastTime;
+ @MField
protected long updateCount;
+
+ @MField
protected long updateCountMax;
+
+ @MField
protected long fetchRowCount;
+
+ @MField
protected long fetchRowCountMax;
+ @MField
protected long inTransactionCount;
+ @MField
protected String lastSlowParameters;
+ @MField
protected long clobOpenCount;
+
+ @MField
protected long blobOpenCount;
+
+ @MField
protected long readStringLength;
+
+ @MField
protected long readBytesLength;
+ @MField
protected long inputStreamOpenCount;
+
+ @MField
protected long readerOpenCount;
+ @MField(name = "h1")
protected long histogram_0_1;
+
+ @MField(name = "h10")
protected long histogram_1_10;
+
+ @MField(name = "h100")
protected int histogram_10_100;
+
+ @MField(name = "h1000")
protected int histogram_100_1000;
+
+ @MField(name = "h10000")
protected int histogram_1000_10000;
+
+ @MField(name = "h100000")
protected int histogram_10000_100000;
+
+ @MField(name = "h1000000")
protected int histogram_100000_1000000;
+
+ @MField(name = "hmore")
protected int histogram_1000000_more;
public long[] getExecuteHistogram() {
@@ -90,13 +168,28 @@ public class JdbcSqlStatValue {
};
}
+ @MField(name = "eh1")
protected long executeAndResultHoldTime_0_1;
+
+ @MField(name = "eh10")
protected long executeAndResultHoldTime_1_10;
+
+ @MField(name = "eh100")
protected int executeAndResultHoldTime_10_100;
+
+ @MField(name = "eh1000")
protected int executeAndResultHoldTime_100_1000;
+
+ @MField(name = "eh10000")
protected int executeAndResultHoldTime_1000_10000;
+
+ @MField(name = "eh100000")
protected int executeAndResultHoldTime_10000_100000;
+
+ @MField(name = "eh1000000")
protected int executeAndResultHoldTime_100000_1000000;
+
+ @MField(name = "ehmore")
protected int executeAndResultHoldTime_1000000_more;
public long[] getExecuteAndResultHoldHistogram() {
@@ -111,11 +204,22 @@ public class JdbcSqlStatValue {
};
}
+ @MField(name = "f1")
protected long fetchRowCount_0_1;
+
+ @MField(name = "f10")
protected long fetchRowCount_1_10;
+
+ @MField(name = "f100")
protected long fetchRowCount_10_100;
+
+ @MField(name = "f1000")
protected int fetchRowCount_100_1000;
+
+ @MField(name = "f10000")
protected int fetchRowCount_1000_10000;
+
+ @MField(name = "fmore")
protected int fetchRowCount_10000_more;
public long[] getFetchRowHistogram() {
@@ -128,11 +232,22 @@ public class JdbcSqlStatValue {
};
}
+ @MField(name = "u1")
protected long updateCount_0_1;
+
+ @MField(name = "u10")
protected long updateCount_1_10;
+
+ @MField(name = "u100")
protected long updateCount_10_100;
+
+ @MField(name = "u1000")
protected int updateCount_100_1000;
+
+ @MField(name = "u10000")
protected int updateCount_1000_10000;
+
+ @MField(name = "umore")
protected int updateCount_10000_more;
public long[] getUpdateHistogram() {
@@ -165,6 +280,14 @@ public class JdbcSqlStatValue {
this.sql = sql;
}
+ public long getSqlHash() {
+ return sqlHash;
+ }
+
+ public void setSqlHash(long sqlHash) {
+ this.sqlHash = sqlHash;
+ }
+
public long getId() {
return id;
}
@@ -184,7 +307,7 @@ public class JdbcSqlStatValue {
public long getExecuteLastStartTimeMillis() {
return executeLastStartTime;
}
-
+
public Date getExecuteLastStartTime() {
if (executeLastStartTime <= 0) {
return null;
@@ -296,7 +419,7 @@ public class JdbcSqlStatValue {
public long getExecuteNanoSpanMaxOccurTimeMillis() {
return executeNanoSpanMaxOccurTime;
}
-
+
public Date getExecuteNanoSpanMaxOccurTime() {
if (executeNanoSpanMaxOccurTime <= 0) {
return null;
@@ -329,6 +452,12 @@ public class JdbcSqlStatValue {
public void setExecuteErrorLast(Throwable executeErrorLast) {
this.executeErrorLast = executeErrorLast;
+
+ if (executeErrorLast != null) {
+ this.executeErrorLastMessage = executeErrorLast.getMessage();
+ this.executeErrorLastClass = executeErrorLast.getClass().getName();
+ this.executeErrorLastStackTrace = Utils.toString(executeErrorLast.getStackTrace());
+ }
}
public long getExecuteErrorLastTimeMillis() {
@@ -448,7 +577,7 @@ public class JdbcSqlStatValue {
histogram_1000000_more //
};
}
-
+
public long[] getFetchRowCountHistogramValues() {
return new long[] {
//
@@ -472,7 +601,7 @@ public class JdbcSqlStatValue {
updateCount_10000_more //
};
}
-
+
public long[] getExecuteAndResultHoldTimeHistogramValues() {
return new long[] {
//
@@ -524,12 +653,11 @@ public class JdbcSqlStatValue {
map.put("Name", getName()); // 16
map.put("File", getFile()); // 17
- Throwable lastError = this.executeErrorLast;
- if (lastError != null) {
- map.put("LastErrorMessage", lastError.getMessage()); // 18
- map.put("LastErrorClass", lastError.getClass().getName()); // 19
+ if (executeErrorLastMessage != null) {
+ map.put("LastErrorMessage", executeErrorLastMessage); // 18
+ map.put("LastErrorClass", executeErrorLastClass); // 19
- map.put("LastErrorStackTrace", IOUtils.getStackTrace(lastError)); // 20
+ map.put("LastErrorStackTrace", executeErrorLastStackTrace); // 20
map.put("LastErrorTime", new Date(executeErrorLastTime)); // 21
} else {
map.put("LastErrorMessage", null);
@@ -562,4 +690,69 @@ public class JdbcSqlStatValue {
return map;
}
+
+ public long getHistogram_0_1() {
+ return histogram_0_1;
+ }
+
+ public void setHistogram_0_1(long histogram_0_1) {
+ this.histogram_0_1 = histogram_0_1;
+ }
+
+ public long getHistogram_1_10() {
+ return histogram_1_10;
+ }
+
+ public void setHistogram_1_10(long histogram_1_10) {
+ this.histogram_1_10 = histogram_1_10;
+ }
+
+ public int getHistogram_10_100() {
+ return histogram_10_100;
+ }
+
+ public void setHistogram_10_100(int histogram_10_100) {
+ this.histogram_10_100 = histogram_10_100;
+ }
+
+ public int getHistogram_100_1000() {
+ return histogram_100_1000;
+ }
+
+ public void setHistogram_100_1000(int histogram_100_1000) {
+ this.histogram_100_1000 = histogram_100_1000;
+ }
+
+ public int getHistogram_1000_10000() {
+ return histogram_1000_10000;
+ }
+
+ public void setHistogram_1000_10000(int histogram_1000_10000) {
+ this.histogram_1000_10000 = histogram_1000_10000;
+ }
+
+ public int getHistogram_10000_100000() {
+ return histogram_10000_100000;
+ }
+
+ public void setHistogram_10000_100000(int histogram_10000_100000) {
+ this.histogram_10000_100000 = histogram_10000_100000;
+ }
+
+ public int getHistogram_100000_1000000() {
+ return histogram_100000_1000000;
+ }
+
+ public void setHistogram_100000_1000000(int histogram_100000_1000000) {
+ this.histogram_100000_1000000 = histogram_100000_1000000;
+ }
+
+ public int getHistogram_1000000_more() {
+ return histogram_1000000_more;
+ }
+
+ public void setHistogram_1000000_more(int histogram_1000000_more) {
+ this.histogram_1000000_more = histogram_1000000_more;
+ }
+
}
diff --git a/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java b/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java
index 49fc35cb7d..49ce11dd0c 100644
--- a/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java
+++ b/src/main/java/com/alibaba/druid/support/http/StatViewServlet.java
@@ -37,7 +37,7 @@ import com.alibaba.druid.support.http.util.IPAddress;
import com.alibaba.druid.support.http.util.IPRange;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.StringUtils;
/**
@@ -89,7 +89,7 @@ public class StatViewServlet extends HttpServlet {
initAuthEnv();
try {
- templatePage = IOUtils.readFromResource(TEMPLATE_PAGE_RESOURCE_PATH);
+ templatePage = Utils.readFromResource(TEMPLATE_PAGE_RESOURCE_PATH);
} catch (IOException e) {
throw new ServletException("error read templatePage:" + TEMPLATE_PAGE_RESOURCE_PATH, e);
@@ -392,7 +392,7 @@ public class StatViewServlet extends HttpServlet {
private void returnResourceFile(String fileName, String uri, HttpServletResponse response) throws ServletException,
IOException {
if (fileName.endsWith(".jpg")) {
- byte[] bytes = IOUtils.readByteArrayFromResource(RESOURCE_PATH + fileName);
+ byte[] bytes = Utils.readByteArrayFromResource(RESOURCE_PATH + fileName);
if (bytes != null) {
response.getOutputStream().write(bytes);
}
@@ -400,7 +400,7 @@ public class StatViewServlet extends HttpServlet {
return;
}
- String text = IOUtils.readFromResource(RESOURCE_PATH + fileName);
+ String text = Utils.readFromResource(RESOURCE_PATH + fileName);
if (text == null) {
response.sendRedirect(uri + "/index.html");
return;
diff --git a/src/main/java/com/alibaba/druid/support/http/stat/WebURIStatValue.java b/src/main/java/com/alibaba/druid/support/http/stat/WebURIStatValue.java
index 712f9abf63..493ae9a6e1 100644
--- a/src/main/java/com/alibaba/druid/support/http/stat/WebURIStatValue.java
+++ b/src/main/java/com/alibaba/druid/support/http/stat/WebURIStatValue.java
@@ -60,8 +60,8 @@ public class WebURIStatValue {
protected long histogram_0_1;
protected long histogram_1_10;
- protected long histogram_10_100;
- protected long histogram_100_1000;
+ protected long histogram_10_100;
+ protected long histogram_100_1000;
protected int histogram_1000_10000;
protected int histogram_10000_100000;
protected int histogram_100000_1000000;
diff --git a/src/main/java/com/alibaba/druid/support/json/JSONWriter.java b/src/main/java/com/alibaba/druid/support/json/JSONWriter.java
index 7fe7ff3203..d8c1f30bb2 100644
--- a/src/main/java/com/alibaba/druid/support/json/JSONWriter.java
+++ b/src/main/java/com/alibaba/druid/support/json/JSONWriter.java
@@ -23,7 +23,7 @@ import java.util.Map;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.TabularData;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
public class JSONWriter {
@@ -152,7 +152,7 @@ public class JSONWriter {
write(",\"Message\":");
writeString(error.getMessage());
write(",\"StackTrace\":");
- writeString(IOUtils.getStackTrace(error));
+ writeString(Utils.getStackTrace(error));
write('}');
}
diff --git a/src/main/java/com/alibaba/druid/support/monitor/MField.java b/src/main/java/com/alibaba/druid/support/monitor/MField.java
new file mode 100644
index 0000000000..4559cca414
--- /dev/null
+++ b/src/main/java/com/alibaba/druid/support/monitor/MField.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 1999-2011 Alibaba Group Holding Ltd.
+ *
+ * Licensed 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 com.alibaba.druid.support.monitor;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })
+public @interface MField {
+ String name() default "";
+}
diff --git a/src/main/java/com/alibaba/druid/support/monitor/MonitorService.java b/src/main/java/com/alibaba/druid/support/monitor/MonitorClient.java
similarity index 97%
rename from src/main/java/com/alibaba/druid/support/monitor/MonitorService.java
rename to src/main/java/com/alibaba/druid/support/monitor/MonitorClient.java
index e4bbc56116..1975fd2076 100644
--- a/src/main/java/com/alibaba/druid/support/monitor/MonitorService.java
+++ b/src/main/java/com/alibaba/druid/support/monitor/MonitorClient.java
@@ -34,9 +34,9 @@ import com.alibaba.druid.support.monitor.dao.MonitorDao;
import com.alibaba.druid.support.spring.stat.SpringMethodStatValue;
import com.alibaba.druid.support.spring.stat.SpringStat;
import com.alibaba.druid.support.spring.stat.SpringStatManager;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
-public class MonitorService {
+public class MonitorClient {
private final static long DEFAULT_TIME_BETWEEN_COLLECT = 60 * 5;
@@ -111,8 +111,8 @@ public class MonitorService {
private MonitorContext createContext() {
MonitorContext ctx = new MonitorContext();
ctx.setCollectTime(new Date());
- ctx.setPID(IOUtils.getPID());
- ctx.setCollectTime(IOUtils.getStartTime());
+ ctx.setPID(Utils.getPID());
+ ctx.setCollectTime(Utils.getStartTime());
return ctx;
}
diff --git a/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java
index fa91e8526c..f9f91b61f7 100644
--- a/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java
+++ b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java
@@ -15,19 +15,152 @@
*/
package com.alibaba.druid.support.monitor.dao;
+import java.lang.reflect.Field;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
+import javax.sql.DataSource;
+
+import com.alibaba.druid.DruidRuntimeException;
import com.alibaba.druid.pool.DruidDataSourceStatValue;
+import com.alibaba.druid.stat.JdbcSqlStatValue;
import com.alibaba.druid.support.http.stat.WebAppStatValue;
import com.alibaba.druid.support.http.stat.WebURIStatValue;
+import com.alibaba.druid.support.logging.Log;
+import com.alibaba.druid.support.logging.LogFactory;
+import com.alibaba.druid.support.monitor.MField;
import com.alibaba.druid.support.monitor.MonitorContext;
import com.alibaba.druid.support.spring.stat.SpringMethodStatValue;
+import com.alibaba.druid.util.JdbcUtils;
+import com.alibaba.druid.util.StringUtils;
+import com.alibaba.druid.util.Utils;
public class MonitorDaoJdbcImpl implements MonitorDao {
+ private final static Log LOG = LogFactory.getLog(MonitorDaoJdbcImpl.class);
+
+ private DataSource dataSource;
+
+ private BeanInfo sqlStatBeanInfo = new BeanInfo(JdbcSqlStatValue.class);
+
+ public MonitorDaoJdbcImpl(){
+ }
+
+ public DataSource getDataSource() {
+ return dataSource;
+ }
+
+ public void setDataSource(DataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
@Override
public void saveSql(MonitorContext ctx, List dataSourceList) {
+ for (DruidDataSourceStatValue dataSourceStatValue : dataSourceList) {
+ List sqlList = dataSourceStatValue.getSqlList();
+ String sql = buildInsertSql(sqlStatBeanInfo);
+ Connection conn = null;
+ PreparedStatement stmt = null;
+ try {
+ conn = dataSource.getConnection();
+ stmt = conn.prepareStatement(sql);
+
+ for (JdbcSqlStatValue statValue : sqlList) {
+ setParameterForSqlStat(sqlStatBeanInfo, stmt, statValue);
+ stmt.addBatch();
+ }
+
+ stmt.executeBatch();
+
+ stmt.close();
+ } catch (SQLException ex) {
+ LOG.error("save sql error", ex);
+ } finally {
+ JdbcUtils.close(stmt);
+ JdbcUtils.close(conn);
+ }
+ }
+ }
+
+ protected void setParameterForSqlStat(BeanInfo beanInfo, PreparedStatement stmt, JdbcSqlStatValue sqlStat)
+ throws SQLException {
+ int paramIndex = 1;
+ try {
+ List fields = beanInfo.getFields();
+ for (int i = 0; i < fields.size(); ++i) {
+ FieldInfo field = fields.get(i);
+ Class> fieldType = field.getFieldType();
+ Object value = field.getField().get(sqlStat);
+
+ if (fieldType.equals(int.class) || fieldType.equals(Integer.class)) {
+ setParam(stmt, paramIndex, (Integer) value);
+ } else if (fieldType.equals(long.class) || fieldType.equals(Long.class)) {
+ setParam(stmt, paramIndex, (Long) value);
+ } else if (fieldType.equals(String.class)) {
+ setParam(stmt, paramIndex, (String) value);
+ } else if (fieldType.equals(Date.class)) {
+ setParam(stmt, paramIndex, (Date) value);
+ } else {
+ throw new UnsupportedOperationException();
+ }
+
+ paramIndex++;
+ }
+ } catch (RuntimeException ex) {
+ throw ex;
+ } catch (Exception ex) {
+ throw new DruidRuntimeException("setParam error", ex);
+ }
+ }
+
+ public String buildInsertSql(BeanInfo beanInfo) {
+ String sql = beanInfo.insertSql;
+
+ if (sql != null) {
+ return sql;
+ }
+
+ StringBuilder buf = new StringBuilder();
+
+ buf.append("INSERT INTO ") //
+ .append(getTableName(beanInfo));
+
+ buf.append(" (");
+ List fields = beanInfo.getFields();
+ for (int i = 0; i < fields.size(); ++i) {
+ FieldInfo field = fields.get(i);
+ if (i != 0) {
+ buf.append(", ");
+ }
+ buf.append(field.getColumnName());
+ }
+ buf.append(")\nVALUES (");
+ for (int i = 0; i < fields.size(); ++i) {
+ if (i != 0) {
+ buf.append(", ?");
+ } else {
+ buf.append("?");
+ }
+ }
+ buf.append(")");
+ sql = buf.toString();
+ beanInfo.setInsertSql(sql);
+ return sql;
+ }
+
+ protected String getTableName(BeanInfo beanInfo) {
+ return "druid_sql";
+ }
+
+ protected long getSqlHash(String sql) {
+ return Utils.murmurhash2_64(sql);
}
@Override
@@ -42,7 +175,104 @@ public class MonitorDaoJdbcImpl implements MonitorDao {
@Override
public void saveWebApp(MonitorContext ctx, List uriList) {
-
+
}
+ static void setParam(PreparedStatement stmt, int paramIndex, String value) throws SQLException {
+ if (value == null) {
+ stmt.setNull(paramIndex, Types.VARCHAR);
+ } else {
+ stmt.setString(paramIndex, value);
+ }
+ }
+
+ static void setParam(PreparedStatement stmt, int paramIndex, Long value) throws SQLException {
+ if (value == null || value == 0) {
+ stmt.setNull(paramIndex, Types.BIGINT);
+ } else {
+ stmt.setLong(paramIndex, value);
+ }
+ }
+
+ static void setParam(PreparedStatement stmt, int paramIndex, Integer value) throws SQLException {
+ if (value == null || value == 0) {
+ stmt.setNull(paramIndex, Types.INTEGER);
+ } else {
+ stmt.setInt(paramIndex, value);
+ }
+ }
+
+ static void setParam(PreparedStatement stmt, int paramIndex, Date value) throws SQLException {
+ if (value == null) {
+ stmt.setNull(paramIndex, Types.TIMESTAMP);
+ } else {
+ stmt.setTimestamp(paramIndex, new Timestamp(value.getTime()));
+ }
+ }
+
+ public static class BeanInfo {
+
+ private final Class> clazz;
+ private final List fields = new ArrayList();
+ private String insertSql;
+
+ public BeanInfo(Class> clazz){
+ this.clazz = clazz;
+ for (Field field : JdbcSqlStatValue.class.getDeclaredFields()) {
+ MField annotation = field.getAnnotation(MField.class);
+ if (annotation == null) {
+ continue;
+ }
+
+ String columnName = annotation.name();
+ if (StringUtils.isEmpty(columnName)) {
+ columnName = field.getName();
+ }
+
+ fields.add(new FieldInfo(field, columnName));
+ }
+ }
+
+ public Class> getClazz() {
+ return clazz;
+ }
+
+ public String getInsertSql() {
+ return insertSql;
+ }
+
+ public void setInsertSql(String insertSql) {
+ this.insertSql = insertSql;
+ }
+
+ public List getFields() {
+ return fields;
+ }
+
+ }
+
+ public static class FieldInfo {
+
+ private final Field field;
+ private final String columnName;
+
+ public FieldInfo(Field field, String columnName){
+ this.field = field;
+ this.columnName = columnName;
+
+ field.setAccessible(true);
+ }
+
+ public Field getField() {
+ return field;
+ }
+
+ public String getColumnName() {
+ return columnName;
+ }
+
+ public Class> getFieldType() {
+ return field.getType();
+ }
+ }
}
diff --git a/src/main/java/com/alibaba/druid/util/JMXUtils.java b/src/main/java/com/alibaba/druid/util/JMXUtils.java
index d7a91fc266..222d198e72 100644
--- a/src/main/java/com/alibaba/druid/util/JMXUtils.java
+++ b/src/main/java/com/alibaba/druid/util/JMXUtils.java
@@ -91,7 +91,7 @@ public final class JMXUtils {
map.put("class", error.getClass().getName());
map.put("message", error.getMessage());
- map.put("stackTrace", IOUtils.getStackTrace(error));
+ map.put("stackTrace", Utils.getStackTrace(error));
return new CompositeDataSupport(getThrowableCompositeType(), map);
}
diff --git a/src/main/java/com/alibaba/druid/util/IOUtils.java b/src/main/java/com/alibaba/druid/util/Utils.java
similarity index 72%
rename from src/main/java/com/alibaba/druid/util/IOUtils.java
rename to src/main/java/com/alibaba/druid/util/Utils.java
index 67875f3720..4f91e903ca 100644
--- a/src/main/java/com/alibaba/druid/util/IOUtils.java
+++ b/src/main/java/com/alibaba/druid/util/Utils.java
@@ -29,7 +29,7 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
-public class IOUtils {
+public class Utils {
public final static int DEFAULT_BUFFER_SIZE = 1024 * 4;
@@ -48,14 +48,14 @@ public class IOUtils {
try {
in = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
if (in == null) {
- in = IOUtils.class.getResourceAsStream(resource);
+ in = Utils.class.getResourceAsStream(resource);
}
if (in == null) {
return null;
}
- String text = IOUtils.read(in);
+ String text = Utils.read(in);
return text;
} finally {
JdbcUtils.close(in);
@@ -150,6 +150,19 @@ public class IOUtils {
return buf.toString();
}
+ public static String toString(Throwable error) {
+ if (error == null) {
+ return null;
+ }
+
+ StringWriter strWriter = new StringWriter();
+ PrintWriter out = new PrintWriter(strWriter);
+ error.printStackTrace(out);
+ out.close();
+ String text = strWriter.toString();
+ return text;
+ }
+
public static String toString(StackTraceElement[] stackTrace) {
StringBuilder buf = new StringBuilder();
for (StackTraceElement item : stackTrace) {
@@ -246,4 +259,69 @@ public class IOUtils {
}
return startTime;
}
+
+ public static long murmurhash2_64(String text) {
+ final byte[] bytes = text.getBytes();
+ return murmurhash2_64(bytes, bytes.length, 0xe17a1465);
+ }
+
+ /**
+ * murmur hash 2.0, The murmur hash is a relatively fast hash function from http://murmurhash.googlepages.com/ for
+ * platforms with efficient multiplication.
+ *
+ * @author Viliam Holub
+ */
+ public static long murmurhash2_64(final byte[] data, int length, int seed) {
+ final long m = 0xc6a4a7935bd1e995L;
+ final int r = 47;
+
+ long h = (seed & 0xffffffffl) ^ (length * m);
+
+ int length8 = length / 8;
+
+ for (int i = 0; i < length8; i++) {
+ final int i8 = i * 8;
+ long k = ((long) data[i8 + 0] & 0xff) //
+ + (((long) data[i8 + 1] & 0xff) << 8) //
+ + (((long) data[i8 + 2] & 0xff) << 16)//
+ + (((long) data[i8 + 3] & 0xff) << 24) //
+ + (((long) data[i8 + 4] & 0xff) << 32)//
+ + (((long) data[i8 + 5] & 0xff) << 40)//
+ + (((long) data[i8 + 6] & 0xff) << 48) //
+ + (((long) data[i8 + 7] & 0xff) << 56);
+
+ k *= m;
+ k ^= k >>> r;
+ k *= m;
+
+ h ^= k;
+ h *= m;
+ }
+
+ switch (length % 8) {
+ case 7:
+ h ^= (long) (data[(length & ~7) + 6] & 0xff) << 48;
+ case 6:
+ h ^= (long) (data[(length & ~7) + 5] & 0xff) << 40;
+ case 5:
+ h ^= (long) (data[(length & ~7) + 4] & 0xff) << 32;
+ case 4:
+ h ^= (long) (data[(length & ~7) + 3] & 0xff) << 24;
+ case 3:
+ h ^= (long) (data[(length & ~7) + 2] & 0xff) << 16;
+ case 2:
+ h ^= (long) (data[(length & ~7) + 1] & 0xff) << 8;
+ case 1:
+ h ^= (long) (data[length & ~7] & 0xff);
+ h *= m;
+ }
+ ;
+
+ h ^= h >>> r;
+ h *= m;
+ h ^= h >>> r;
+
+ return h;
+ }
+
}
diff --git a/src/main/java/com/alibaba/druid/wall/WallFilter.java b/src/main/java/com/alibaba/druid/wall/WallFilter.java
index 9a56bc5c4f..51e67ba71e 100644
--- a/src/main/java/com/alibaba/druid/wall/WallFilter.java
+++ b/src/main/java/com/alibaba/druid/wall/WallFilter.java
@@ -15,7 +15,7 @@
*/
package com.alibaba.druid.wall;
-import static com.alibaba.druid.util.IOUtils.getBoolean;
+import static com.alibaba.druid.util.Utils.getBoolean;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
@@ -45,9 +45,9 @@ import com.alibaba.druid.wall.violation.SyntaxErrorViolation;
public class WallFilter extends FilterAdapter implements WallFilterMBean {
- private final static Log LOG = LogFactory.getLog(WallFilter.class);
+ private final static Log LOG = LogFactory.getLog(WallFilter.class);
- private boolean inited = false;
+ private boolean inited = false;
private WallProvider provider;
@@ -55,12 +55,10 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean {
private WallConfig config;
- private volatile boolean logViolation = false;
- private volatile boolean throwException = true;
+ private volatile boolean logViolation = false;
+ private volatile boolean throwException = true;
- private boolean autoRegisterToGlobalTimer = false;
-
- public final static String ATTR_SQL_STAT = "wall.sqlStat";
+ public final static String ATTR_SQL_STAT = "wall.sqlStat";
public WallFilter(){
configFromProperties(System.getProperties());
@@ -80,12 +78,6 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean {
this.throwException = value;
}
}
- {
- Boolean value = getBoolean(properties, "druid.wall.autoRegisterToGlobalTimer");
- if (value != null) {
- this.autoRegisterToGlobalTimer = value;
- }
- }
}
@Override
@@ -138,15 +130,6 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean {
throw new IllegalStateException("dbType not support : " + dbType + ", url " + dataSource.getUrl());
}
- if (autoRegisterToGlobalTimer) {
- WallProviderStatTimer timer = WallProviderStatTimer.getInstance();
- if (timer == null) {
- timer = new WallProviderStatTimer();
- timer.start();
- }
- timer.register(provider);
- }
-
this.inited = true;
}
diff --git a/src/main/java/com/alibaba/druid/wall/WallProviderStatTimer.java b/src/main/java/com/alibaba/druid/wall/WallProviderStatTimer.java
deleted file mode 100644
index 9bb9826fd9..0000000000
--- a/src/main/java/com/alibaba/druid/wall/WallProviderStatTimer.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 1999-2011 Alibaba Group Holding Ltd.
- *
- * Licensed 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 com.alibaba.druid.wall;
-
-import static com.alibaba.druid.util.IOUtils.getInteger;
-import static com.alibaba.druid.util.IOUtils.getLong;
-
-import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-import com.alibaba.druid.support.logging.Log;
-import com.alibaba.druid.support.logging.LogFactory;
-import com.alibaba.druid.util.IOUtils;
-
-public class WallProviderStatTimer implements Runnable {
-
- private final static Log LOG = LogFactory.getLog(WallProviderStatTimer.class);
-
- private ScheduledExecutorService scheduler;
- private int threadCount = 1;
- private long period = 60 * 5;
- private TimeUnit unit = TimeUnit.SECONDS;
-
- private final List providers = new CopyOnWriteArrayList();
-
- private WallProviderStatLogger statLogger = new WallProviderStatLoggerImpl();
-
- private static WallProviderStatTimer instance;
-
- public WallProviderStatTimer(){
- configFromPropety(System.getProperties());
- }
-
- public static WallProviderStatTimer getInstance() {
- return instance;
- }
-
- public static void setInstance(WallProviderStatTimer instance) {
- WallProviderStatTimer.instance = instance;
- }
-
- public void configFromPropety(Properties properties) {
- {
- Long value = getLong(properties, "druid.wall.timer.period");
- if (value != null && value.intValue() > 0) {
- this.period = value.intValue();
- }
- }
- {
- Integer value = getInteger(properties, "druid.wall.timer.threadCount");
- if (value != null && value.intValue() > 0) {
- this.threadCount = value.intValue();
- }
- }
- {
- String value = properties.getProperty("druid.wall.timer.statLoggerClass");
- if (value != null && value.length() > 0) {
- Class> clazz = IOUtils.loadClass(value);
- try {
- statLogger = (WallProviderStatLogger) clazz.newInstance();
- } catch (Exception ex) {
- LOG.error("configStatLogger error", ex);
- }
- }
- }
- }
-
- public List getProviders() {
- return providers;
- }
-
- public void register(WallProvider provider) {
- this.providers.add(provider);
- }
-
- public void setProviders(List providers) {
- this.providers.clear();
- this.providers.addAll(providers);
- }
-
- public WallProviderStatLogger getStatLogger() {
- return statLogger;
- }
-
- public void setStatLogger(WallProviderStatLogger statLogger) {
- this.statLogger = statLogger;
- }
-
- public void start() {
- if (statLogger == null) {
- throw new IllegalStateException("statLogger is null");
- }
-
- scheduler = Executors.newScheduledThreadPool(threadCount);
- scheduler.scheduleAtFixedRate(this, period, period, unit);
- }
-
- @Override
- public void run() {
- for (WallProvider provider : this.providers) {
- WallProviderStatValue statValue = getStatValue(provider);
- log(statValue);
- }
- }
-
- protected WallProviderStatValue getStatValue(WallProvider provider) {
- return provider.getStatValue(true);
- }
-
- protected void log(WallProviderStatValue statValue) {
- statLogger.log(statValue);
- }
-}
diff --git a/src/test/java/com/alibaba/druid/TestReplaceLicense.java b/src/test/java/com/alibaba/druid/TestReplaceLicense.java
index 0505b8cc69..9fe0248375 100644
--- a/src/test/java/com/alibaba/druid/TestReplaceLicense.java
+++ b/src/test/java/com/alibaba/druid/TestReplaceLicense.java
@@ -26,7 +26,7 @@ import java.io.Writer;
import junit.framework.TestCase;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
public class TestReplaceLicense extends TestCase {
@@ -36,7 +36,7 @@ public class TestReplaceLicense extends TestCase {
protected void setUp() throws Exception {
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("License.txt");
Reader reader = new InputStreamReader(is);
- license = IOUtils.read(reader);
+ license = Utils.read(reader);
reader.close();
System.out.println(license);
@@ -65,7 +65,7 @@ public class TestReplaceLicense extends TestCase {
public void listJavaFile(File file) throws Exception {
FileInputStream in = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(in, "utf-8");
- String content = IOUtils.read(reader);
+ String content = Utils.read(reader);
reader.close();
if (!content.startsWith(license)) {
diff --git a/src/test/java/com/alibaba/druid/benckmark/sql/MySqlPerfMain.java b/src/test/java/com/alibaba/druid/benckmark/sql/MySqlPerfMain.java
index 5a4ebadf77..a2c0477082 100644
--- a/src/test/java/com/alibaba/druid/benckmark/sql/MySqlPerfMain.java
+++ b/src/test/java/com/alibaba/druid/benckmark/sql/MySqlPerfMain.java
@@ -22,7 +22,7 @@ import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import com.alibaba.druid.sql.test.TestUtils;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
public class MySqlPerfMain {
@@ -31,7 +31,7 @@ public class MySqlPerfMain {
List arguments = ManagementFactory.getRuntimeMXBean().getInputArguments();
System.out.println(arguments);
- String sql = IOUtils.readFromResource("benchmark/sql/ob_sql.txt");
+ String sql = Utils.readFromResource("benchmark/sql/ob_sql.txt");
for (int i = 0; i < 10; ++i) {
perfMySql(sql);
diff --git a/src/test/java/com/alibaba/druid/benckmark/sql/MySqlPerfTest.java b/src/test/java/com/alibaba/druid/benckmark/sql/MySqlPerfTest.java
index 39f07768c4..5b63a7a943 100644
--- a/src/test/java/com/alibaba/druid/benckmark/sql/MySqlPerfTest.java
+++ b/src/test/java/com/alibaba/druid/benckmark/sql/MySqlPerfTest.java
@@ -23,7 +23,7 @@ import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import com.alibaba.druid.sql.test.TestUtils;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
public class MySqlPerfTest extends TestCase {
@@ -33,7 +33,7 @@ public class MySqlPerfTest extends TestCase {
sql = "SELECT * FROM T";
sql = "SELECT ID, NAME, AGE FROM USER WHERE ID = ?";
- sql = IOUtils.readFromResource("benchmark/sql/ob_sql.txt");
+ sql = Utils.readFromResource("benchmark/sql/ob_sql.txt");
}
public void test_pert() throws Exception {
diff --git a/src/test/java/com/alibaba/druid/bvt/bug/Bug_for_JeffYin.java b/src/test/java/com/alibaba/druid/bvt/bug/Bug_for_JeffYin.java
index b4087cf83e..717f95c9eb 100644
--- a/src/test/java/com/alibaba/druid/bvt/bug/Bug_for_JeffYin.java
+++ b/src/test/java/com/alibaba/druid/bvt/bug/Bug_for_JeffYin.java
@@ -17,18 +17,19 @@ package com.alibaba.druid.bvt.bug;
import java.sql.Driver;
-import org.junit.Assert;
import junit.framework.TestCase;
-import com.alibaba.druid.util.IOUtils;
+import org.junit.Assert;
+
import com.alibaba.druid.util.JdbcUtils;
+import com.alibaba.druid.util.Utils;
public class Bug_for_JeffYin extends TestCase {
public void test_0() throws Exception {
String url = "jdbc:sqlserver://localhost:1433;";
String driverClassName = JdbcUtils.getDriverClassName(url);
- Class> driverClass = IOUtils.loadClass(driverClassName);
+ Class> driverClass = Utils.loadClass(driverClassName);
Assert.assertNotNull(driverClass);
Driver driver = (Driver) driverClass.newInstance();
diff --git a/src/test/java/com/alibaba/druid/bvt/filter/EncodingConvertFilterTest2.java b/src/test/java/com/alibaba/druid/bvt/filter/EncodingConvertFilterTest2.java
index 1d5e272008..503bcf567f 100644
--- a/src/test/java/com/alibaba/druid/bvt/filter/EncodingConvertFilterTest2.java
+++ b/src/test/java/com/alibaba/druid/bvt/filter/EncodingConvertFilterTest2.java
@@ -39,7 +39,7 @@ import com.alibaba.druid.mock.MockStatementBase;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import com.alibaba.druid.proxy.jdbc.ConnectionProxy;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
import com.alibaba.druid.util.jdbc.ResultSetMetaDataBase.ColumnMetaData;
@@ -163,26 +163,26 @@ public class EncodingConvertFilterTest2 extends TestCase {
Assert.assertEquals(param1, raw.getParameters().get(0));
stmt.setObject(2, new StringReader(C_TEXT));
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(1)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(1)));
stmt.setCharacterStream(3, new StringReader(C_TEXT));
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(2)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(2)));
stmt.setCharacterStream(4, new StringReader(C_TEXT), C_TEXT.length());
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(3)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(3)));
stmt.setCharacterStream(5, new StringReader(C_TEXT), (long) C_TEXT.length());
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(4)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(4)));
stmt.setObject(6, C_TEXT, Types.VARCHAR);
Assert.assertEquals(param1, raw.getParameters().get(5));
stmt.setObject(7, new StringReader(C_TEXT), Types.VARCHAR);
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(6)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(6)));
stmt.setObject(8, C_TEXT, Types.VARCHAR, 0);
Assert.assertEquals(param1, raw.getParameters().get(7));
stmt.setObject(9, new StringReader(C_TEXT), Types.VARCHAR, 0);
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(8)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(8)));
stmt.setObject(10, 1, Types.INTEGER);
Assert.assertEquals(1, raw.getParameters().get(9));
@@ -196,12 +196,12 @@ public class EncodingConvertFilterTest2 extends TestCase {
stmt.setObject("13", C_TEXT, Types.VARCHAR);
Assert.assertEquals(param1, raw.getParameters().get(12));
stmt.setObject("14", new StringReader(C_TEXT), Types.VARCHAR);
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(13)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(13)));
stmt.setObject("15", C_TEXT, Types.VARCHAR, 0);
Assert.assertEquals(param1, raw.getParameters().get(14));
stmt.setObject("16", new StringReader(C_TEXT), Types.VARCHAR, 0);
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(15)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(15)));
stmt.setObject("17", 1, Types.INTEGER);
Assert.assertEquals(1, raw.getParameters().get(16));
@@ -213,19 +213,19 @@ public class EncodingConvertFilterTest2 extends TestCase {
Assert.assertEquals(3, raw.getParameters().get(18));
stmt.setCharacterStream("20", new StringReader(C_TEXT));
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(19)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(19)));
stmt.setCharacterStream("21", new StringReader(C_TEXT), C_TEXT.length());
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(20)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(20)));
stmt.setCharacterStream("22", new StringReader(C_TEXT), (long) C_TEXT.length());
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(21)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(21)));
stmt.setObject("23", C_TEXT);
Assert.assertEquals(param1, raw.getParameters().get(22));
stmt.setObject("24", new StringReader(C_TEXT));
- Assert.assertEquals(param1, IOUtils.read((Reader) raw.getParameters().get(23)));
+ Assert.assertEquals(param1, Utils.read((Reader) raw.getParameters().get(23)));
stmt.setObject("25", 1, Types.INTEGER);
Assert.assertEquals(1, raw.getParameters().get(24));
diff --git a/src/test/java/com/alibaba/druid/bvt/log/LoggerTest.java b/src/test/java/com/alibaba/druid/bvt/log/LoggerTest.java
index 5aee798397..1f927213d4 100644
--- a/src/test/java/com/alibaba/druid/bvt/log/LoggerTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/log/LoggerTest.java
@@ -13,7 +13,7 @@ import junit.framework.TestCase;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.proxy.DruidDriver;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
public class LoggerTest extends TestCase {
@@ -66,7 +66,7 @@ public class LoggerTest extends TestCase {
throw new ClassNotFoundException();
}
try {
- byte[] bytes = IOUtils.readByteArray(is);
+ byte[] bytes = Utils.readByteArray(is);
this.defineClass(name, bytes, 0, bytes.length, DOMAIN);
definedSet.add(name);
} catch (IOException e) {
diff --git a/src/test/java/com/alibaba/druid/bvt/proxy/JdbcUtilsTest.java b/src/test/java/com/alibaba/druid/bvt/proxy/JdbcUtilsTest.java
index a3ab75aeee..69df064106 100644
--- a/src/test/java/com/alibaba/druid/bvt/proxy/JdbcUtilsTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/proxy/JdbcUtilsTest.java
@@ -36,7 +36,7 @@ import com.alibaba.druid.mock.MockResultSetMetaData;
import com.alibaba.druid.mock.MockStatement;
import com.alibaba.druid.proxy.DruidDriver;
import com.alibaba.druid.stat.JdbcStatManager;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
public class JdbcUtilsTest extends TestCase {
@@ -193,7 +193,7 @@ public class JdbcUtilsTest extends TestCase {
{
Exception error = null;
try {
- IOUtils.read(new Reader() {
+ Utils.read(new Reader() {
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
@@ -214,7 +214,7 @@ public class JdbcUtilsTest extends TestCase {
{
Exception error = null;
try {
- IOUtils.read(new Reader() {
+ Utils.read(new Reader() {
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
@@ -234,7 +234,7 @@ public class JdbcUtilsTest extends TestCase {
}
{
- String text = IOUtils.read(new Reader() {
+ String text = Utils.read(new Reader() {
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
@@ -250,7 +250,7 @@ public class JdbcUtilsTest extends TestCase {
Assert.assertEquals("", text);
}
{
- String text = IOUtils.read(new Reader() {
+ String text = Utils.read(new Reader() {
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
@@ -283,7 +283,7 @@ public class JdbcUtilsTest extends TestCase {
}
};
- String text = IOUtils.read(reader, 2);
+ String text = Utils.read(reader, 2);
Assert.assertEquals("AA", text);
}
}
diff --git a/src/test/java/com/alibaba/druid/bvt/proxy/filter/MergeStatFilterTest3.java b/src/test/java/com/alibaba/druid/bvt/proxy/filter/MergeStatFilterTest3.java
index 53678876e1..bb2954ff59 100644
--- a/src/test/java/com/alibaba/druid/bvt/proxy/filter/MergeStatFilterTest3.java
+++ b/src/test/java/com/alibaba/druid/bvt/proxy/filter/MergeStatFilterTest3.java
@@ -24,7 +24,7 @@ import junit.framework.TestCase;
import org.junit.Assert;
import com.alibaba.druid.pool.DruidDataSource;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
public class MergeStatFilterTest3 extends TestCase {
private DruidDataSource dataSource;
@@ -41,7 +41,7 @@ public class MergeStatFilterTest3 extends TestCase {
}
public void test_merge() throws Exception {
- String sqllist = IOUtils.read(new InputStreamReader(this.getClass().getResourceAsStream("/bvt/parser/postgresql.txt")));
+ String sqllist = Utils.read(new InputStreamReader(this.getClass().getResourceAsStream("/bvt/parser/postgresql.txt")));
String[] ss = sqllist.split("--");
for(String sql:ss)
{
diff --git a/src/test/java/com/alibaba/druid/bvt/proxy/utils/DruidLoaderUtilsTest.java b/src/test/java/com/alibaba/druid/bvt/proxy/utils/DruidLoaderUtilsTest.java
index 821ec4c4ea..5fd7d8bb54 100644
--- a/src/test/java/com/alibaba/druid/bvt/proxy/utils/DruidLoaderUtilsTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/proxy/utils/DruidLoaderUtilsTest.java
@@ -20,13 +20,14 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import org.junit.Assert;
import junit.framework.TestCase;
+import org.junit.Assert;
+
import com.alibaba.druid.bvt.proxy.DruidDriverTest.PublicJdbcFilterAdapter;
import com.alibaba.druid.filter.Filter;
import com.alibaba.druid.filter.FilterManager;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
/**
* druidLoader util 测试
@@ -94,12 +95,12 @@ public class DruidLoaderUtilsTest extends TestCase {
}
public void twest_loadClass() throws Exception {
- Assert.assertEquals(null, IOUtils.loadClass(null));
- Assert.assertEquals(null, IOUtils.loadClass("xxx"));
+ Assert.assertEquals(null, Utils.loadClass(null));
+ Assert.assertEquals(null, Utils.loadClass("xxx"));
Assert.assertEquals(PublicJdbcFilterAdapter.class,
- IOUtils.loadClass(PublicJdbcFilterAdapter.class.getName()));
- Assert.assertNull(IOUtils.loadClass(null));
- Assert.assertNull(IOUtils.loadClass(""));
+ Utils.loadClass(PublicJdbcFilterAdapter.class.getName()));
+ Assert.assertNull(Utils.loadClass(null));
+ Assert.assertNull(Utils.loadClass(""));
}
}
diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/parser/MySqlParserResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/parser/MySqlParserResourceTest.java
index be6bfcfbb6..5837f05bd9 100644
--- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/parser/MySqlParserResourceTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/parser/MySqlParserResourceTest.java
@@ -27,7 +27,7 @@ import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
public class MySqlParserResourceTest extends TestCase {
@@ -55,7 +55,7 @@ public class MySqlParserResourceTest extends TestCase {
is = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
Reader reader = new InputStreamReader(is, "UTF-8");
- String input = IOUtils.read(reader);
+ String input = Utils.read(reader);
JdbcUtils.close(reader);
String[] items = input.split("---------------------------");
String sql = items[0].trim();
diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java
index 63a70a5d44..8934680874 100644
--- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java
@@ -28,7 +28,7 @@ import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
public class MySqlResourceTest extends TestCase {
@@ -57,7 +57,7 @@ public class MySqlResourceTest extends TestCase {
is = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
Reader reader = new InputStreamReader(is, "UTF-8");
- String input = IOUtils.read(reader);
+ String input = Utils.read(reader);
JdbcUtils.close(reader);
String[] items = input.split("---------------------------");
String sql = items[0].trim();
diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSQLParserResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSQLParserResourceTest.java
index 69f183e122..326c0093fb 100644
--- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSQLParserResourceTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSQLParserResourceTest.java
@@ -26,7 +26,7 @@ import junit.framework.TestCase;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.test.TestUtils;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
public class OracleSQLParserResourceTest extends TestCase {
@@ -45,7 +45,7 @@ public class OracleSQLParserResourceTest extends TestCase {
is = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
Reader reader = new InputStreamReader(is, "UTF-8");
- String input = IOUtils.read(reader);
+ String input = Utils.read(reader);
JdbcUtils.close(reader);
String[] items = input.split("---------------------------");
String sql = items[0].trim();
diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java
index 4dd1303b2d..c2e7ec1fe7 100644
--- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java
@@ -28,7 +28,7 @@ import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
public class OracleResourceTest extends OracleTest {
@@ -47,7 +47,7 @@ public class OracleResourceTest extends OracleTest {
is = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
Reader reader = new InputStreamReader(is, "UTF-8");
- String input = IOUtils.read(reader);
+ String input = Utils.read(reader);
JdbcUtils.close(reader);
String[] items = input.split("---------------------------");
String sql = items[0].trim();
diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PostgresqlResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PostgresqlResourceTest.java
index e68b5adbd3..d2821983b3 100644
--- a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PostgresqlResourceTest.java
+++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PostgresqlResourceTest.java
@@ -27,7 +27,7 @@ import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGSchemaStatVisitor;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
public class PostgresqlResourceTest extends PGTest {
@@ -46,7 +46,7 @@ public class PostgresqlResourceTest extends PGTest {
is = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
Reader reader = new InputStreamReader(is, "UTF-8");
- String input = IOUtils.read(reader);
+ String input = Utils.read(reader);
JdbcUtils.close(reader);
String[] items = input.split("---------------------------");
String sql = items[0].trim();
diff --git a/src/test/java/com/alibaba/druid/bvt/support/json/JSONParserTest2.java b/src/test/java/com/alibaba/druid/bvt/support/json/JSONParserTest2.java
index 490834f7f2..09989593e8 100644
--- a/src/test/java/com/alibaba/druid/bvt/support/json/JSONParserTest2.java
+++ b/src/test/java/com/alibaba/druid/bvt/support/json/JSONParserTest2.java
@@ -7,11 +7,11 @@ import org.junit.Assert;
import junit.framework.TestCase;
import com.alibaba.druid.support.json.JSONUtils;
-import com.alibaba.druid.util.IOUtils;
+import com.alibaba.druid.util.Utils;
public class JSONParserTest2 extends TestCase {
public void test_parse() throws Exception {
- String text = IOUtils.readFromResource("bvt/sql.json");
+ String text = Utils.readFromResource("bvt/sql.json");
Map result = (Map)JSONUtils.parse(text);
List