mirror of https://github.com/apache/jmeter.git
				
				
				
			Bug 55084 - Add timeout support for JDBC Request
Bugzilla Id: 55084
git-svn-id: https://svn.apache.org/repos/asf/jmeter/trunk@1491213 13f79535-47bb-0310-9956-ffa450edef68
Former-commit-id: 8b6438ad9b
			
			
This commit is contained in:
		
							parent
							
								
									c1c64f6324
								
							
						
					
					
						commit
						a26ea01b0d
					
				|  | @ -35,6 +35,7 @@ import java.util.List; | |||
| import java.util.Map; | ||||
| import java.util.concurrent.ConcurrentHashMap; | ||||
| 
 | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.apache.jmeter.samplers.SampleResult; | ||||
| import org.apache.jmeter.save.CSVSaveService; | ||||
| import org.apache.jmeter.testelement.AbstractTestElement; | ||||
|  | @ -111,7 +112,8 @@ public abstract class AbstractJDBCTestElement extends AbstractTestElement implem | |||
|     private String queryArguments = ""; // $NON-NLS-1$ | ||||
|     private String queryArgumentsTypes = ""; // $NON-NLS-1$ | ||||
|     private String variableNames = ""; // $NON-NLS-1$ | ||||
|     private String resultVariable = ""; | ||||
|     private String resultVariable = ""; // $NON-NLS-1$ | ||||
|     private String queryTimeout = ""; // $NON-NLS-1$ | ||||
| 
 | ||||
|     /** | ||||
|      *  Cache of PreparedStatements stored in a per-connection basis. Each entry of this | ||||
|  | @ -142,6 +144,7 @@ public abstract class AbstractJDBCTestElement extends AbstractTestElement implem | |||
|             String _queryType = getQueryType(); | ||||
|             if (SELECT.equals(_queryType)) { | ||||
|                 stmt = conn.createStatement(); | ||||
|                 stmt.setQueryTimeout(getIntegerQueryTimeout()); | ||||
|                 ResultSet rs = null; | ||||
|                 try { | ||||
|                     rs = stmt.executeQuery(getQuery()); | ||||
|  | @ -159,6 +162,7 @@ public abstract class AbstractJDBCTestElement extends AbstractTestElement implem | |||
|                 return sb.getBytes(ENCODING); | ||||
|             } else if (UPDATE.equals(_queryType)) { | ||||
|                 stmt = conn.createStatement(); | ||||
|                 stmt.setQueryTimeout(getIntegerQueryTimeout()); | ||||
|                 stmt.executeUpdate(getQuery()); | ||||
|                 int updateCount = stmt.getUpdateCount(); | ||||
|                 String results = updateCount + " updates"; | ||||
|  | @ -332,9 +336,15 @@ public abstract class AbstractJDBCTestElement extends AbstractTestElement implem | |||
|             } else { | ||||
|                 pstmt = conn.prepareStatement(getQuery()); | ||||
|             } | ||||
|             pstmt.setQueryTimeout(getIntegerQueryTimeout()); | ||||
|             // PreparedStatementMap is associated to one connection so  | ||||
|             //  2 threads cannot use the same PreparedStatement map at the same time | ||||
|             preparedStatementMap.put(getQuery(), pstmt); | ||||
|         } else { | ||||
|             int timeoutInS = getIntegerQueryTimeout(); | ||||
|             if(pstmt.getQueryTimeout() != timeoutInS) { | ||||
|                 pstmt.setQueryTimeout(getIntegerQueryTimeout()); | ||||
|             } | ||||
|         } | ||||
|         pstmt.clearParameters(); | ||||
|         return pstmt; | ||||
|  | @ -457,6 +467,35 @@ public abstract class AbstractJDBCTestElement extends AbstractTestElement implem | |||
|         } catch (SQLException e) { | ||||
|             log.warn("Error closing ResultSet", e); | ||||
|         } | ||||
|     }     | ||||
|      | ||||
|     /** | ||||
|      * @return the integer representation queryTimeout | ||||
|      */ | ||||
|     public int getIntegerQueryTimeout() { | ||||
|         int timeout = 0; | ||||
|         try { | ||||
|             if(StringUtils.isNumeric(query)) { | ||||
|                 timeout = Integer.parseInt(queryTimeout); | ||||
|             } | ||||
|         } catch (NumberFormatException nfe) { | ||||
|             timeout = 0; | ||||
|         } | ||||
|         return timeout; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @return the queryTimeout | ||||
|      */ | ||||
|     public String getQueryTimeout() { | ||||
|         return queryTimeout ; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @param resultVariable the variable name in which results will be stored | ||||
|      */ | ||||
|     public void setQueryTimeout(String queryTimeout) { | ||||
|         this.queryTimeout = queryTimeout; | ||||
|     } | ||||
| 
 | ||||
|     public String getQuery() { | ||||
|  |  | |||
|  | @ -42,28 +42,33 @@ public abstract class JDBCTestElementBeanInfoSupport extends BeanInfoSupport { | |||
|                 "queryArgumentsTypes", // $NON-NLS-1$ | ||||
|                 "variableNames", // $NON-NLS-1$ | ||||
|                 "resultVariable", // $NON-NLS-1$ | ||||
|                 "queryTimeout" // $NON-NLS-1$ | ||||
|                 }); | ||||
| 
 | ||||
|         PropertyDescriptor p = property("dataSource"); // $NON-NLS-1$ | ||||
|         p.setValue(NOT_UNDEFINED, Boolean.TRUE); | ||||
|         p.setValue(DEFAULT, ""); | ||||
|         p.setValue(DEFAULT, ""); // $NON-NLS-1$ | ||||
| 
 | ||||
|         p = property("queryArguments"); // $NON-NLS-1$ | ||||
|         p.setValue(NOT_UNDEFINED, Boolean.TRUE); | ||||
|         p.setValue(DEFAULT, ""); | ||||
|         p.setValue(DEFAULT, ""); // $NON-NLS-1$ | ||||
| 
 | ||||
|         p = property("queryArgumentsTypes"); // $NON-NLS-1$ | ||||
|         p.setValue(NOT_UNDEFINED, Boolean.TRUE); | ||||
|         p.setValue(DEFAULT, ""); | ||||
|         p.setValue(DEFAULT, ""); // $NON-NLS-1$ | ||||
| 
 | ||||
|         p = property("variableNames"); // $NON-NLS-1$ | ||||
|         p.setValue(NOT_UNDEFINED, Boolean.TRUE); | ||||
|         p.setValue(DEFAULT, ""); | ||||
|         p.setValue(DEFAULT, ""); // $NON-NLS-1$ | ||||
| 
 | ||||
|         p = property("resultVariable"); // $NON-NLS-1$ | ||||
|         p.setValue(NOT_UNDEFINED, Boolean.TRUE); | ||||
|         p.setValue(DEFAULT, ""); | ||||
|         p.setValue(DEFAULT, ""); // $NON-NLS-1$ | ||||
| 
 | ||||
|         p = property("queryTimeout"); // $NON-NLS-1$ | ||||
|         p.setValue(NOT_UNDEFINED, Boolean.TRUE); | ||||
|         p.setValue(DEFAULT, ""); | ||||
|          | ||||
|         p = property("queryType"); // $NON-NLS-1$ | ||||
|         p.setValue(NOT_UNDEFINED, Boolean.TRUE); | ||||
|         p.setValue(DEFAULT, AbstractJDBCTestElement.SELECT); | ||||
|  | @ -82,7 +87,7 @@ public abstract class JDBCTestElementBeanInfoSupport extends BeanInfoSupport { | |||
| 
 | ||||
|         p = property("query"); // $NON-NLS-1$ | ||||
|         p.setValue(NOT_UNDEFINED, Boolean.TRUE); | ||||
|         p.setValue(DEFAULT, ""); | ||||
|         p.setValue(DEFAULT, ""); // $NON-NLS-1$ | ||||
|         p.setPropertyEditorClass(TextAreaEditor.class); | ||||
| 
 | ||||
|     } | ||||
|  |  | |||
|  | @ -30,4 +30,5 @@ variableNames.displayName=Variable names | |||
| variableNames.shortDescription=Output variable names for each column  (comma separated) | ||||
| resultVariable.displayName=Result variable name | ||||
| resultVariable.shortDescription=Name of the JMeter variable that stores the result set objects in a list of maps for looking up results by column name. | ||||
| 
 | ||||
| queryTimeout.displayName=Query timeout | ||||
| queryTimeout.shortDescription=The timeout of statement measured in seconds | ||||
|  | @ -31,3 +31,5 @@ sql.displayName=Requ\u00EAte SQL | |||
| varName.displayName=Nom de liaison avec le pool | ||||
| variableNames.displayName=Noms des variables  | ||||
| variableNames.shortDescription=Noms des variables en sortie pour chaque colonne (s\u00E9par\u00E9s par des virgules) | ||||
| queryTimeout.displayName=Timeout de la requ\u00EAte | ||||
| queryTimeout.shortDescription=Timeout de le requ\u00EAte en secondes | ||||
|  | @ -174,6 +174,7 @@ Transaction Controller now sets Response Code of Generated Parent Sampler (if Ge | |||
| <li><bugzilla>54798</bugzilla> - Using subject from EML-file for SMTP Sampler</li> | ||||
| <li><bugzilla>54759</bugzilla> - SSLPeerUnverifiedException using HTTPS , property documented</li> | ||||
| <li><bugzilla>54896</bugzilla> - JUnit sampler gives only “failed to create an instance of the class” message with constructor problems</li> | ||||
| <li><bugzilla>55084</bugzilla> - Add timeout support for JDBC Request</li> | ||||
| </ul> | ||||
| 
 | ||||
| <h3>Controllers</h3> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue