diff --git a/src/main/java/com/alibaba/druid/filter/trace/TraceFilter.java b/src/main/java/com/alibaba/druid/filter/trace/TraceFilter.java index 9038b06297..a34550caa9 100644 --- a/src/main/java/com/alibaba/druid/filter/trace/TraceFilter.java +++ b/src/main/java/com/alibaba/druid/filter/trace/TraceFilter.java @@ -335,8 +335,10 @@ public class TraceFilter extends FilterAdapter implements TraceFilterMBean { event.putContext(TRACE_CONN_INFO, connection.getProperties().clone()); event.putContext(TRACE_CONN_CONNECTED_TIME, connection.getConnectedTime()); event.putContext(TRACE_CONN_ID, connection.getId()); - event.putContext("savepointId", savepoint.getSavepointId()); - event.putContext("savepointName", savepoint.getSavepointName()); + if (savepoint != null) { + event.putContext("savepointId", savepoint.getSavepointId()); + event.putContext("savepointName", savepoint.getSavepointName()); + } fireEvent(event); } @@ -349,8 +351,10 @@ public class TraceFilter extends FilterAdapter implements TraceFilterMBean { event.putContext(TRACE_CONN_INFO, connection.getProperties().clone()); event.putContext(TRACE_CONN_CONNECTED_TIME, connection.getConnectedTime()); event.putContext(TRACE_CONN_ID, connection.getId()); - event.putContext("savepointId", savepoint.getSavepointId()); - event.putContext("savepointName", savepoint.getSavepointName()); + if (savepoint != null) { + event.putContext("savepointId", savepoint.getSavepointId()); + event.putContext("savepointName", savepoint.getSavepointName()); + } fireEvent(event); } } catch (SQLException ex) { @@ -359,8 +363,10 @@ public class TraceFilter extends FilterAdapter implements TraceFilterMBean { event.putContext(TRACE_CONN_INFO, connection.getProperties().clone()); event.putContext(TRACE_CONN_CONNECTED_TIME, connection.getConnectedTime()); event.putContext(TRACE_CONN_ID, connection.getId()); - event.putContext("savepointId", savepoint.getSavepointId()); - event.putContext("savepointName", savepoint.getSavepointName()); + if (savepoint != null) { + event.putContext("savepointId", savepoint.getSavepointId()); + event.putContext("savepointName", savepoint.getSavepointName()); + } fireEvent(event); } throw ex; @@ -370,8 +376,10 @@ public class TraceFilter extends FilterAdapter implements TraceFilterMBean { event.putContext(TRACE_CONN_INFO, connection.getProperties().clone()); event.putContext(TRACE_CONN_CONNECTED_TIME, connection.getConnectedTime()); event.putContext(TRACE_CONN_ID, connection.getId()); - event.putContext("savepointId", savepoint.getSavepointId()); - event.putContext("savepointName", savepoint.getSavepointName()); + if (savepoint != null) { + event.putContext("savepointId", savepoint.getSavepointId()); + event.putContext("savepointName", savepoint.getSavepointName()); + } fireEvent(event); } throw ex; @@ -381,8 +389,10 @@ public class TraceFilter extends FilterAdapter implements TraceFilterMBean { event.putContext(TRACE_CONN_INFO, connection.getProperties().clone()); event.putContext(TRACE_CONN_CONNECTED_TIME, connection.getConnectedTime()); event.putContext(TRACE_CONN_ID, connection.getId()); - event.putContext("savepointId", savepoint.getSavepointId()); - event.putContext("savepointName", savepoint.getSavepointName()); + if (savepoint != null) { + event.putContext("savepointId", savepoint.getSavepointId()); + event.putContext("savepointName", savepoint.getSavepointName()); + } fireEvent(event); } throw ex; diff --git a/src/test/java/com/alibaba/druid/bvt/pool/basic/ConnectionTest3.java b/src/test/java/com/alibaba/druid/bvt/pool/basic/ConnectionTest3.java index 5ca460254d..783ddad70d 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/basic/ConnectionTest3.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/basic/ConnectionTest3.java @@ -11,6 +11,8 @@ import com.alibaba.druid.mock.MockDriver; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.PoolableConnection; import com.alibaba.druid.stat.DruidDataSourceStatManager; +import com.alibaba.druid.stat.JdbcStatContext; +import com.alibaba.druid.stat.JdbcStatManager; public class ConnectionTest3 extends TestCase { @@ -35,11 +37,17 @@ public class ConnectionTest3 extends TestCase { dataSource.setTestOnBorrow(false); dataSource.setValidationQuery("SELECT 1"); dataSource.setFilters("stat,trace"); + + JdbcStatContext context = new JdbcStatContext(); + context.setTraceEnable(true); + JdbcStatManager.getInstance().setStatContext(context); } protected void tearDown() throws Exception { dataSource.close(); Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); + + JdbcStatManager.getInstance().setStatContext(null); } public void test_basic() throws Exception {