Configure transaction Isolation via XML
---------------------------------------

                 Key: IBATIS-554
                 URL: https://issues.apache.org/jira/browse/IBATIS-554
             Project: iBatis for Java
          Issue Type: Improvement
          Components: SQL Maps
    Affects Versions: 2.3.3, 2.3.2, 2.3.1, 2.3.0
         Environment: not relevant
            Reporter: Dirk Ohst


In a current project we have the requirement to configure the transaction 
isolation level for all transactions using the XML configuration, e.g.:

        <transactionManager type="JDBC" commitRequired="true">
                <property name="JDBC.Connection.transactionIsolation"
                                value="2" />
                <dataSource type="JNDI">
                        <property name="DataSource"
                                value="jdbc/WqSqlAx4" />
                </dataSource>
        </transactionManager>

The value corresponds to the int values defined by the constants in the 
Connection class of Java.

To realize this I have modified the class JdbcTransactionConfig in the 
following way, see below. It would be very nice, if this extension could be 
added into the next versions.
Currently we use version 2.3.0 due to the requirement to use JDK 1.4.2 in 
context of WebSphere Portal.

Best regards,

Dirk

/*
 *  Copyright 2004 Clinton Begin
 *
 *  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.ibatis.sqlmap.engine.transaction.jdbc;

import com.ibatis.sqlmap.engine.transaction.BaseTransactionConfig;
import com.ibatis.sqlmap.engine.transaction.IsolationLevel;
import com.ibatis.sqlmap.engine.transaction.Transaction;
import com.ibatis.sqlmap.engine.transaction.TransactionException;

import javax.sql.DataSource;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class JdbcTransactionConfig extends BaseTransactionConfig {

  private DataSource dataSource;
  private int txIso = -1;         // DO added

  
  public DataSource getDataSource() {
    return dataSource;
  }

  public void setDataSource(DataSource ds) {
    this.dataSource = ds;
  }

  public void initialize(Properties props) throws SQLException, 
TransactionException {

          //    TODO  DO added Start
          String txIsoStr = 
props.getProperty("JDBC.Connection.transactionIsolation");
          if (txIsoStr != null) {
        try {
                this.txIso = Integer.parseInt(txIsoStr);
                
                if (this.txIso != Connection.TRANSACTION_NONE && this.txIso != 
Connection.TRANSACTION_READ_COMMITTED
                                    && this.txIso != 
Connection.TRANSACTION_READ_UNCOMMITTED
                                    && this.txIso != 
Connection.TRANSACTION_REPEATABLE_READ && this.txIso != 
Connection.TRANSACTION_SERIALIZABLE) {
                        this.txIso = -1;
                        throw new TransactionException("iBatis: 
JdbcTransactionConfig.initialize(): wrong transactionIsolationLevel: " + 
txIsoStr);
                }
        } catch (NumberFormatException e) {
                // do nothing
        }                 
          }
          //      DO added End

  }

  public Transaction newTransaction(int transactionIsolation) throws 
SQLException, TransactionException {

//      TODO  DO added Start
          int isoLevel = transactionIsolation;
          if (isoLevel == IsolationLevel.UNSET_ISOLATION_LEVEL) {
                  if (txIso != -1) {
                          isoLevel = txIso;
                  }
          }
//        DO added end
    return new JdbcTransaction(dataSource, isoLevel);
  }

}


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to