You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2006/03/26 17:50:56 UTC
svn commit: r388916 - in /jakarta/jmeter/branches/rel-2-1:
src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java
src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerBeanInfo.java
xdocs/changes.xml
Author: sebb
Date: Sun Mar 26 07:50:54 2006
New Revision: 388916
URL: http://svn.apache.org/viewcvs?rev=388916&view=rev
Log:
Bug 38682 - add CallableStatement functionality to JDBC Sampler
Modified:
jakarta/jmeter/branches/rel-2-1/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java
jakarta/jmeter/branches/rel-2-1/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerBeanInfo.java
jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml
Modified: jakarta/jmeter/branches/rel-2-1/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java?rev=388916&r1=388915&r2=388916&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java Sun Mar 26 07:50:54 2006
@@ -1,6 +1,5 @@
-// $Header$
/*
- * Copyright 2001-2005 The Apache Software Foundation.
+ * Copyright 2001-2006 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,6 +17,7 @@
package org.apache.jmeter.protocol.jdbc.sampler;
+import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
@@ -25,10 +25,10 @@
import java.sql.Statement;
import org.apache.avalon.excalibur.datasource.DataSourceComponent;
+import org.apache.jmeter.samplers.AbstractSampler;
import org.apache.jmeter.samplers.Entry;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.testbeans.TestBean;
-import org.apache.jmeter.samplers.AbstractSampler;
import org.apache.jorphan.collections.Data;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
@@ -38,19 +38,22 @@
*
* @author Original author unknown
* @author <a href="mailto:jeremy_a@bigfoot.com">Jeremy Arnold</a>
- * @version $Revision$
*/
public class JDBCSampler extends AbstractSampler implements TestBean {
- private static Logger log = LoggingManager.getLoggerForClass();
+ private static final Logger log = LoggingManager.getLoggerForClass();
- public static final String QUERY = "query";
- public static final String SELECT = "Select Statement";
+ static final String QUERY = "query";
+
+ // Query types
+ static final String SELECT = "Select Statement";
+ static final String UPDATE = "Update Statement";
+ static final String CALLABLE = "Callable Statement";
- public String query = "";
+ private String query = "";
- public String dataSource = "";
+ private String dataSource = "";
- public String queryType = SELECT;
+ private String queryType = SELECT;
/**
* Creates a JDBCSampler.
@@ -60,15 +63,24 @@
public SampleResult sample(Entry e) {
log.debug("sampling jdbc");
- SampleResult res = new SampleResult();
+
+ SampleResult res = new SampleResult();
res.setSampleLabel(getName());
res.setSamplerData(toString());
+ res.setDataType(SampleResult.TEXT);
+ // Bug 31184 - make sure encoding is specified
+ res.setDataEncoding(System.getProperty("file.encoding"));
+
+ // Assume we will be successful
+ res.setSuccessful(true);
+
res.sampleStart();
DataSourceComponent pool = (DataSourceComponent) getThreadContext().getVariables().getObject(getDataSource());
log.debug("DataSourceComponent: " + pool);
Connection conn = null;
Statement stmt = null;
+ CallableStatement cs = null;
try {
@@ -80,52 +92,45 @@
conn = pool.getConnection();
stmt = conn.createStatement();
- // Based on query return value, get results
- if (SELECT.equals(getQueryType())) {
+ // Based on query return value, get results
+ String _queryType = getQueryType();
+ if (SELECT.equals(_queryType)) {
ResultSet rs = null;
try {
rs = stmt.executeQuery(getQuery());
Data data = getDataFromResultSet(rs);
res.setResponseData(data.toString().getBytes());
} finally {
- if (rs != null) {
- try {
- rs.close();
- } catch (SQLException exc) {
- log.warn("Error closing ResultSet", exc);
- }
- }
+ close(rs);
+ }
+ } else if (CALLABLE.equals(_queryType)) {
+ try {
+ cs = conn.prepareCall(getQuery());
+ cs.execute();
+ String results = "Executed";
+ res.setResponseData(results.getBytes());
+ } finally {
+ close(cs);
}
- } else {
+ } else if (UPDATE.equals(_queryType)) {
stmt.execute(getQuery());
int updateCount = stmt.getUpdateCount();
String results = updateCount + " updates";
res.setResponseData(results.getBytes());
+ // TODO add support for PreparedStatments
+ } else { // User provided incorrect query type
+ String results="Unexpected query type: "+_queryType;
+ res.setResponseMessage(results);
+ res.setSuccessful(false);
}
- res.setDataType(SampleResult.TEXT);
- // Bug 31184 - make sure encoding is specified
- res.setDataEncoding(System.getProperty("file.encoding"));
- res.setSuccessful(true);
} catch (SQLException ex) {
log.error("Error in JDBC sampling", ex);
res.setResponseMessage(ex.toString());
res.setSuccessful(false);
} finally {
- if (stmt != null) {
- try {
- stmt.close();
- } catch (SQLException ex) {
- log.warn("Error closing statement", ex);
- }
- }
- if (conn != null) {
- try {
- conn.close();
- } catch (SQLException ex) {
- log.warn("Error closing connection", ex);
- }
- }
+ close(stmt);
+ close(conn);
}
res.sampleEnd();
@@ -164,12 +169,49 @@
return data;
}
+ public static void close(Connection c) {
+ try {
+ if (c != null) c.close();
+ } catch (SQLException e) {
+ log.warn("Error closing Connection", e);
+ }
+ }
+
+ public static void close(Statement s) {
+ try {
+ if (s != null) s.close();
+ } catch (SQLException e) {
+ log.warn("Error closing Statement", e);
+ }
+ }
+
+ public static void close(CallableStatement cs) {
+ try {
+ if (cs != null) cs.close();
+ } catch (SQLException e) {
+ log.warn("Error closing CallableStatement", e);
+ }
+ }
+
+ public static void close(ResultSet rs) {
+ try {
+ if (rs != null) rs.close();
+ } catch (SQLException e) {
+ log.warn("Error closing ResultSet", e);
+ }
+ }
+
public String getQuery() {
return query;
}
public String toString() {
- return getQuery();
+ StringBuffer sb = new StringBuffer(80);
+ sb.append("[");
+ sb.append(getQueryType());
+ sb.append("] ");
+ sb.append(getQuery());
+ return sb.toString();
}
/**
Modified: jakarta/jmeter/branches/rel-2-1/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerBeanInfo.java
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerBeanInfo.java?rev=388916&r1=388915&r2=388916&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerBeanInfo.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerBeanInfo.java Sun Mar 26 07:50:54 2006
@@ -50,7 +50,7 @@
p.setValue(NOT_UNDEFINED, Boolean.TRUE);
p.setValue(DEFAULT, JDBCSampler.SELECT);
p.setValue(NOT_OTHER,Boolean.TRUE);
- p.setValue(TAGS,new String[]{JDBCSampler.SELECT,"Update Statement"});
+ p.setValue(TAGS,new String[]{JDBCSampler.SELECT,JDBCSampler.UPDATE,JDBCSampler.CALLABLE});
p = property("query");
p.setValue(NOT_UNDEFINED, Boolean.TRUE);
Modified: jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml?rev=388916&r1=388915&r2=388916&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-1/xdocs/changes.xml Sun Mar 26 07:50:54 2006
@@ -68,6 +68,7 @@
<li>Bug 38901 - Add optional SOAPAction header to SOAP Sampler</li>
<li>New BeanShell test elements: Timer, PreProcessor, PostProcessor, Listener</li>
<li>__split() function now clears next variable, so it can be used with ForEach Controller</li>
+<li>Bug 38682 - add CallableStatement functionality to JDBC Sampler</li>
</ul>
<h4>Bug fixes:</h4>
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org