/*
 * Created on Feb 3, 2005.
 */
package com.alliancesys.common.ibatis.testing;

import java.io.Reader;
import java.sql.Connection;
import java.sql.SQLException;

import com.alliancesys.common.jdbc.DatabaseConnectionService;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

import junit.framework.TestCase;

/**
 * <code>{@link SqlMapClientSessionTest}</code>
 * 
 * @author Mark Nabours
 * 
 */
public class SqlMapClientSessionTest extends TestCase {

	private int threadCounter = 0;

	public SqlMapClientSessionTest(String arg0) {
		super(arg0);
	}

	public static void main(String[] args) {
		junit.textui.TestRunner.run(SqlMapClientSessionTest.class);
	}
	
	private synchronized void writeCount(){
		threadCounter++;
		System.out.println("Thread " + threadCounter + " completed.");
	}
	
	public void testThrottleSessionLock() throws Exception {
		
		final Connection connection  = DatabaseConnectionService.getNewConnection();
		connection.close();
		Reader reader =
			Resources.getResourceAsReader(
				getClass().getClassLoader(),
				"sql-map-config.xml");
		final SqlMapClient sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);	
		for (int i = 0; i < 80; i++) {
			
			Runnable runnable = new Runnable() {				
				public void run() {
					try {
						SqlMapClient client = sqlMapClient;
						Connection cn = connection;
						client.setUserConnection(cn);
						client.setUserConnection(null);
						writeCount();
					} catch (SQLException e) {						
						e.printStackTrace();
					}
				}
			};

			Thread t = new Thread(runnable);
			t.start();
						
		}		
		
			
	}

}
