1 21 package net.sf.hajdbc.sql; 22 23 import java.sql.DriverManager ; 24 import java.sql.DriverPropertyInfo ; 25 import java.sql.SQLException ; 26 import java.util.Properties ; 27 import java.util.regex.Matcher ; 28 import java.util.regex.Pattern ; 29 30 import net.sf.hajdbc.Database; 31 import net.sf.hajdbc.DatabaseCluster; 32 import net.sf.hajdbc.DatabaseClusterFactory; 33 import net.sf.hajdbc.Messages; 34 import net.sf.hajdbc.Operation; 35 36 import org.slf4j.Logger; 37 import org.slf4j.LoggerFactory; 38 39 43 public final class Driver implements java.sql.Driver 44 { 45 private static final Pattern URL_PATTERN = Pattern.compile("jdbc:ha-jdbc:(.+)"); 46 47 private static Logger logger = LoggerFactory.getLogger(Driver.class); 48 49 static 50 { 51 Driver driver = new Driver(); 52 53 try 54 { 55 DriverManager.registerDriver(driver); 56 } 57 catch (SQLException e) 58 { 59 logger.error(Messages.getMessage(Messages.DRIVER_REGISTER_FAILED, driver.getClass().getName()), e); 60 } 61 } 62 63 66 public boolean acceptsURL(String url) 67 { 68 return (this.getDatabaseCluster(url) != null); 69 } 70 71 74 public java.sql.Connection connect(String url, final Properties properties) throws SQLException 75 { 76 DatabaseCluster databaseCluster = this.getDatabaseCluster(url); 77 78 if (databaseCluster == null) 79 { 80 return null; 81 } 82 83 Operation<java.sql.Driver , java.sql.Connection > operation = new Operation<java.sql.Driver , java.sql.Connection >() 84 { 85 public java.sql.Connection execute(Database database, java.sql.Driver driver) throws SQLException 86 { 87 return driver.connect(DriverDatabase.class.cast(database).getUrl(), properties); 88 } 89 }; 90 91 return new Connection<java.sql.Driver >(this.getConnectionFactory(databaseCluster), operation, new FileSupportImpl()); 92 } 93 94 97 public int getMajorVersion() 98 { 99 return Integer.parseInt(DatabaseClusterFactory.getVersion().split(Pattern.quote("."))[0]); 100 } 101 102 105 public int getMinorVersion() 106 { 107 return Integer.parseInt(DatabaseClusterFactory.getVersion().split(Pattern.quote("."))[1].split("-")[0]); 108 } 109 110 113 public DriverPropertyInfo [] getPropertyInfo(String url, final Properties properties) throws SQLException 114 { 115 DatabaseCluster databaseCluster = this.getDatabaseCluster(url); 116 117 if (databaseCluster == null) 118 { 119 return null; 120 } 121 122 Operation<java.sql.Driver , DriverPropertyInfo []> operation = new Operation<java.sql.Driver , DriverPropertyInfo []>() 123 { 124 public DriverPropertyInfo [] execute(Database database, java.sql.Driver driver) throws SQLException 125 { 126 return driver.getPropertyInfo(DriverDatabase.class.cast(database).getUrl(), properties); 127 } 128 }; 129 130 return this.getConnectionFactory(databaseCluster).executeReadFromDriver(operation); 131 } 132 133 136 public boolean jdbcCompliant() 137 { 138 return true; 139 } 140 141 private DatabaseCluster getDatabaseCluster(String url) 142 { 143 Matcher matcher = URL_PATTERN.matcher(url); 144 145 if (!matcher.matches()) 146 { 147 return null; 148 } 149 150 String name = matcher.group(1); 151 152 return DatabaseClusterFactory.getInstance().getDatabaseCluster(name); 153 } 154 155 private ConnectionFactory<java.sql.Driver > getConnectionFactory(DatabaseCluster databaseCluster) 156 { 157 return new ConnectionFactory<java.sql.Driver >(databaseCluster, java.sql.Driver .class); 158 } 159 } 160 | Popular Tags |