Author: pmouawad
Date: Thu Oct 27 20:40:43 2011
New Revision: 1190010

URL: http://svn.apache.org/viewvc?rev=1190010&view=rev
Log:
Bug 52099 - Allow to set the transaction isolation in the JDBC Connection 
Configuration

Modified:
    
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElement.java
    
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementBeanInfo.java
    
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementResources.properties
    
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementResources_fr.properties
    jakarta/jmeter/trunk/xdocs/changes.xml

Modified: 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElement.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElement.java?rev=1190010&r1=1190009&r2=1190010&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElement.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElement.java
 Thu Oct 27 20:40:43 2011
@@ -49,7 +49,7 @@ public class DataSourceElement extends A
     private static final long serialVersionUID = 233L;
 
     private transient String dataSource, driver, dbUrl, username, password, 
checkQuery, poolMax, connectionAge, timeout,
-            trimInterval;
+            trimInterval,transactionIsolation;
 
     private transient boolean keepAlive, autocommit;
 
@@ -269,6 +269,18 @@ public class DataSourceElement extends A
             }
             if (dsc != null) {
                 conn=dsc.getConnection();
+                int transactionIsolation = 
DataSourceElementBeanInfo.getTransactionIsolationMode(getTransactionIsolation());
+                if (transactionIsolation >= 0 && 
conn.getTransactionIsolation() != transactionIsolation) {
+                    try {
+                        // make sure setting the new isolation mode is done in 
an auto committed transaction
+                        conn.setTransactionIsolation(transactionIsolation);
+                        log.debug("Setting transaction isolation: " + 
transactionIsolation + " @"
+                                + System.identityHashCode(dsc));
+                    } catch (SQLException ex) {
+                        log.error("Could not set transaction isolation: " + 
transactionIsolation + " @"
+                                + System.identityHashCode(dsc));
+                    }   
+                }
             }
             return conn;
         }
@@ -464,4 +476,19 @@ public class DataSourceElement extends A
     public void setKeepAlive(boolean keepAlive) {
         this.keepAlive = keepAlive;
     }
+
+    /**
+     * @return the transaction isolation level
+     */
+    public String getTransactionIsolation() {
+        return transactionIsolation;
+    }
+
+    /**
+     * @param transactionIsolation The transaction isolation level to set. 
<code>NULL</code> to
+     * use the default of the driver.
+     */
+    public void setTransactionIsolation(String transactionIsolation) {
+        this.transactionIsolation = transactionIsolation;
+    }
 }

Modified: 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementBeanInfo.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementBeanInfo.java?rev=1190010&r1=1190009&r2=1190010&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementBeanInfo.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementBeanInfo.java
 Thu Oct 27 20:40:43 2011
@@ -22,15 +22,33 @@
 package org.apache.jmeter.protocol.jdbc.config;
 
 import java.beans.PropertyDescriptor;
+import java.sql.Connection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.jmeter.testbeans.BeanInfoSupport;
 
 public class DataSourceElementBeanInfo extends BeanInfoSupport {
+    private static Map<String,Integer> TRANSACTION_ISOLATION_MAP = new 
HashMap<String, Integer>(5);
+    static {
+        // Will use default isolation
+        TRANSACTION_ISOLATION_MAP.put("DEFAULT", Integer.valueOf(-1));
+        TRANSACTION_ISOLATION_MAP.put("TRANSACTION_NONE", 
Integer.valueOf(Connection.TRANSACTION_NONE));
+        TRANSACTION_ISOLATION_MAP.put("TRANSACTION_READ_COMMITTED", 
Integer.valueOf(Connection.TRANSACTION_READ_COMMITTED));
+        TRANSACTION_ISOLATION_MAP.put("TRANSACTION_READ_UNCOMMITTED", 
Integer.valueOf(Connection.TRANSACTION_READ_UNCOMMITTED));
+        TRANSACTION_ISOLATION_MAP.put("TRANSACTION_REPEATABLE_READ", 
Integer.valueOf(Connection.TRANSACTION_REPEATABLE_READ));
+        TRANSACTION_ISOLATION_MAP.put("TRANSACTION_SERIALIZABLE", 
Integer.valueOf(Connection.TRANSACTION_SERIALIZABLE));
+    }
+    
     public DataSourceElementBeanInfo() {
         super(DataSourceElement.class);
+    
         createPropertyGroup("varName", new String[] { "dataSource" });
 
-        createPropertyGroup("pool", new String[] { "poolMax", "timeout", 
"trimInterval", "autocommit" });
+        createPropertyGroup("pool", new String[] { "poolMax", "timeout", 
+                "trimInterval", "autocommit", "transactionIsolation"  });
 
         createPropertyGroup("keep-alive", new String[] { "keepAlive", 
"connectionAge", "checkQuery" });
 
@@ -51,6 +69,14 @@ public class DataSourceElementBeanInfo e
         p = property("autocommit");
         p.setValue(NOT_UNDEFINED, Boolean.TRUE);
         p.setValue(DEFAULT, Boolean.TRUE);
+        p = property("transactionIsolation");
+        p.setValue(NOT_UNDEFINED, Boolean.TRUE);
+        p.setValue(DEFAULT, "DEFAULT");
+        p.setValue(NOT_EXPRESSION, true);
+        p.setValue(NOT_OTHER, true);
+        Set<String> modesSet = TRANSACTION_ISOLATION_MAP.keySet();
+        String[] modes = modesSet.toArray(new String[modesSet.size()]);
+        p.setValue(TAGS, modes);
         p = property("keepAlive");
         p.setValue(NOT_UNDEFINED, Boolean.TRUE);
         p.setValue(DEFAULT, Boolean.TRUE);
@@ -73,4 +99,15 @@ public class DataSourceElementBeanInfo e
         p.setValue(NOT_UNDEFINED, Boolean.TRUE);
         p.setValue(DEFAULT, "");
     }
+
+    /**
+     * @param tag 
+     * @return int value for String
+     */
+    public static int getTransactionIsolationMode(String tag) {
+        if (!StringUtils.isEmpty(tag)) {
+            return TRANSACTION_ISOLATION_MAP.get(tag);
+        }
+        return -1;
+    }
 }

Modified: 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementResources.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementResources.properties?rev=1190010&r1=1190009&r2=1190010&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementResources.properties
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementResources.properties
 Thu Oct 27 20:40:43 2011
@@ -41,4 +41,6 @@ timeout.shortDescription=The pool blocks
 trimInterval.displayName=Idle Cleanup Interval (ms)
 trimInterval.shortDescription=The pool removes extra idle connections at 
regular intervals
 keepAlive.displayName=Keep-Alive
-keepAlive.shortDescription=Whether the pool should validate connections.  If 
no, Connection Age and Validation Query are ignored.
\ No newline at end of file
+keepAlive.shortDescription=Whether the pool should validate connections.  If 
no, Connection Age and Validation Query are ignored.
+transactionIsolation.displayName=Transaction Isolation
+transactionIsolation.shortDescription=Transaction Isolation Level
\ No newline at end of file

Modified: 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementResources_fr.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementResources_fr.properties?rev=1190010&r1=1190009&r2=1190010&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementResources_fr.properties
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElementResources_fr.properties
 Thu Oct 27 20:40:43 2011
@@ -43,3 +43,5 @@ trimInterval.shortDescription=Le pool su
 username.displayName=Identifiant 
 username.shortDescription=L'identifiant \u00E0 utiliser pour la connexion 
\u00E0 la base de donn\u00E9es
 varName.displayName=Nom de liaison du pool
+transactionIsolation.displayName=Isolation de la Transaction
+transactionIsolation.shortDescription=Niveau d'isolation de la transaction
\ No newline at end of file

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1190010&r1=1190009&r2=1190010&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Thu Oct 27 20:40:43 2011
@@ -189,6 +189,7 @@ Mirror server now uses default port 8081
 <li>Bug 52103 - Add automatic scrolling option to table visualizer</li>
 <li>Bug 52097 - Save As should point to same folder that was used to open a 
file if MRU list is used</li>
 <li>Bug 52085 - Allow multiple selection in arguments panel</li>
+<li>Bug 52099 - Allow to set the transaction isolation in the JDBC Connection 
Configuration</li>
 </ul>
 
 <h2>Non-functional changes</h2>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to