Driver driver = (Driver) Class.forName( className).newInstance( ); DriverManager.registerDriver( driver );
	public void open( Properties connProperties ) throws OdaException	{		//TODO not logging password, but how can we know which is the password		// property for different JDBC drivers?		if ( JDBCConnectionFactory.isLoggable( Level.INFO_LEVEL ) )		{			String logMsg = "Connection.open(Properties). connProperties = ";			for ( Enumeration enumeration = connProperties.propertyNames( ); enumeration					.hasMoreElements( ); )			{				String propName = (String) enumeration.nextElement( );				if ( !propName.startsWith( "ODA:password" ) )				{					logMsg += ( propName + "="							+ connProperties.getProperty( propName ) + ";" );				}			}			JDBCConnectionFactory.log( Level.INFO_LEVEL, logMsg );		}		close( );		String dataSource = connProperties.getProperty( "ODA:data-source" );		if ( dataSource != null )		{			JDBCConnectionFactory.log( Level.INFO_LEVEL, "Use data source" );			//TODO connect by DataSource		}		else		{			String url = connProperties.getProperty( "ODA:url" );			if ( url == null )			{				throw new DriverException(						"Missing property: \"ODA:url\" or \"ODA:data-source\".",						DriverException.ERROR_MISSING_PROPERTIES );			}			JDBCConnectionFactory.log( Level.INFO_LEVEL, "Use URL" );			String className = connProperties.getProperty( "ODA:driver-class" );			try			{				if ( className != null )				{					Class.forName( className );				}				String user = connProperties.getProperty( "ODA:user" );				String pwd = connProperties.getProperty( "ODA:password" );				if ( user != null )				{					JDBCConnectionFactory.log( Level.INFO_LEVEL,							"Use data source" );					JDBCConnectionFactory.log( Level.INFO_LEVEL,							"DriverManager.getConnection( " + url + ", " + user									+ ", *** ) " );					jdbcConn = DriverManager.getConnection( url, user, pwd );				}				else				{					Properties props = new Properties( );					for ( Enumeration enumeration = connProperties.propertyNames( ); enumeration							.hasMoreElements( ); )					{						String propName = (String) enumeration.nextElement( );						if ( !propName.startsWith( "ODA:" ) )						{							props.setProperty( propName, connProperties									.getProperty( propName ) );						}					}					if ( props.size( ) > 0 )					{						// TODO not logging password, which may be contained in						// the props						JDBCConnectionFactory.log( Level.INFO_LEVEL,								"DriverManager.getConnection( url, properties). url = "										+ url + ", properties = "										+ props.toString( ) );						jdbcConn = DriverManager.getConnection( url, props );					}					else					{						// TODO not logging password, which may be contained in						// the url						JDBCConnectionFactory.log( Level.INFO_LEVEL,								"DriverManager.getConnection( url ). url = "										+ url );						jdbcConn = DriverManager.getConnection( url );					}				}			}			catch ( SQLException e )			{				throw new JDBCException( (SQLException) e );			}			catch ( Exception e )			{				throw new DriverException( e );			}		}	}