package mit.sql ;

public class Connect
	extends	java.lang.Thread
	implements	java.lang.Cloneable
{
	private static final int MAXRETRIES = 3 ;

	protected String databaseURL = null ;
	protected String username = null ;
	protected String password = null ;
	protected java.sql.Connection conn = null ;

	public Connect
	( String driverName
	, String databaseURL
	, String username
	, String password
	)
	throws Exception
	{
		Class.forName( driverName ) ;
		this.databaseURL = databaseURL ;
		this.username = username ;
		this.password = password ;
	}

	public java.sql.Connection getConnection()
	{
		try
		{
			for( int i = 0 ; MAXRETRIES != i ; i ++ )
			{
				mit.sql.Connect clone = ( mit.sql.Connect ) this.clone() ;
				clone.start() ;
			
				clone.join( 30000 ) ; // wait 30 seconds for a timeout
				conn = clone.conn ;
			}
			return conn ;
		}
		catch( Exception ex )
		{
			return null ;
		}
	}


	public void run()
	{
		try
		{
			conn = java.sql.DriverManager.getConnection
				( databaseURL , username , password ) ;
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}
}