Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

org.objectweb.cjdbc.controller.backend.DriverCompliance Class Reference

List of all members.

Public Member Functions

 DriverCompliance (Trace logger)
boolean complianceTest (String backendUrl, String login, String password, String driverPath, String driverClassName, String connectionTestStatement) throws ConnectException
boolean isCompliant ()
boolean supportGetGeneratedKeys ()
boolean supportGetColumnClassName ()
boolean supportGetColumnCount ()
boolean supportGetColumnDisplaySize ()
boolean supportGetColumnType ()
boolean supportGetColumnTypeName ()
boolean supportGetTableName ()
boolean supportSetQueryTimeout ()
boolean supportSetMaxRows ()
boolean supportSetCursorName ()
boolean supportSetFetchSize ()
String getDatabaseProductName ()

Detailed Description

This class checks if a given driver provides the mandatory features necessary for C-JDBC.

Author:
Emmanuel Cecchet
Version:
1.0

Definition at line 44 of file DriverCompliance.java.


Constructor & Destructor Documentation

org.objectweb.cjdbc.controller.backend.DriverCompliance.DriverCompliance Trace  logger  ) 
 

Builds a new DriverCompliance object.

Parameters:
logger the logger to use

Definition at line 71 of file DriverCompliance.java.

00072   {
00073     this.logger = logger;
00074   }


Member Function Documentation

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.complianceTest String  backendUrl,
String  login,
String  password,
String  driverPath,
String  driverClassName,
String  connectionTestStatement
throws ConnectException
 

Check the driver compliance.

Parameters:
backendUrl the JDBC URL to connect to
login the user login
password the user password
driverPath path for driver
driverClassName class name for driver
connectionTestStatement SQL statement used to check if a connection is still valid
Returns:
true if the driver is C-JDBC compliant
Exceptions:
ConnectException if it is not possible to connect to the backend

Definition at line 89 of file DriverCompliance.java.

References java.sql.Statement.execute(), java.sql.Statement.getGeneratedKeys(), java.sql.Statement.setCursorName(), java.sql.Statement.setFetchSize(), java.sql.Statement.setMaxRows(), and java.sql.Statement.setQueryTimeout().

00092   {
00093     if (hasBeenTested)
00094       return isCompliant;
00095 
00096     isCompliant = false;
00097 
00098     Connection c = null;
00099     try
00100     {
00101       c = DriverManager.getConnection(backendUrl, login, password, driverPath,
00102           driverClassName);
00103     }
00104     catch (Exception e)
00105     {
00106       logger.error(Translate.get("backend.driver.test.connection.failed", e));
00107       throw new ConnectException(e.getMessage());
00108     }
00109     if (logger.isDebugEnabled())
00110       logger.debug(Translate.get("backend.driver.test.connection.ok"));
00111 
00112     DatabaseMetaData connectionMetaData;
00113     try
00114     {
00115       connectionMetaData = c.getMetaData();
00116     }
00117     catch (Exception e)
00118     {
00119       logger.error(Translate.get("backend.driver.test.metadata.failed", e));
00120       return isCompliant;
00121     }
00122     if (logger.isDebugEnabled())
00123       logger.debug(Translate.get("backend.driver.test.metadata.ok"));
00124 
00125     try
00126     {
00127       this.databaseProductName = connectionMetaData.getDatabaseProductName();
00128       logger.info(Translate
00129           .get("backend.detected.as", this.databaseProductName));
00130     }
00131     catch (Exception e)
00132     {
00133       logger.warn(Translate.get(
00134           "backend.driver.test.database.productname.failed", e));
00135     }
00136 
00137     Statement s;
00138     try
00139     {
00140       s = c.createStatement();
00141     }
00142     catch (Exception e)
00143     {
00144       logger.error(Translate.get("backend.driver.test.statement.failed", e));
00145       return isCompliant;
00146     }
00147 
00148     try
00149     {
00150       if (connectionTestStatement == null)
00151       {
00152         if (logger.isDebugEnabled())
00153           logger.debug(Translate.get("backend.driver.using.default.statement",
00154               DEFAULT_TEST_STATEMENT));
00155         connectionTestStatement = DEFAULT_TEST_STATEMENT;
00156       }
00157       s.execute(connectionTestStatement);
00158     }
00159     catch (Exception e)
00160     {
00161       logger.error(Translate.get("backend.driver.test.statement.invalid",
00162           connectionTestStatement));
00163       return isCompliant;
00164     }
00165     if (logger.isDebugEnabled())
00166       logger.debug(Translate.get("backend.driver.test.statement.ok"));
00167 
00168     try
00169     {
00170       s.setCursorName("testcursor");
00171       supportSetCursorName = true;
00172       if (logger.isDebugEnabled())
00173         logger
00174             .debug(Translate.get("backend.driver.statement.setCursorName.ok"));
00175     }
00176     catch (Exception e1)
00177     {
00178       logger.warn(Translate
00179           .get("backend.driver.statement.setCursorName.failed"));
00180       supportSetMaxRows = false;
00181     }
00182 
00183     try
00184     {
00185       s.setFetchSize(25);
00186       supportSetFetchSize = true;
00187       if (logger.isDebugEnabled())
00188         logger.debug(Translate.get("backend.driver.statement.setFetchSize.ok"));
00189     }
00190     catch (Exception e1)
00191     {
00192       logger
00193           .warn(Translate.get("backend.driver.statement.setFetchSize.failed"));
00194       supportSetMaxRows = false;
00195     }
00196 
00197     try
00198     {
00199       s.setMaxRows(5);
00200       supportSetMaxRows = true;
00201       if (logger.isDebugEnabled())
00202         logger.debug(Translate.get("backend.driver.statement.setMaxRows.ok"));
00203     }
00204     catch (Exception e1)
00205     {
00206       logger.warn(Translate.get("backend.driver.statement.setMaxRows.failed"));
00207       supportSetMaxRows = false;
00208     }
00209 
00210     try
00211     {
00212       s.getGeneratedKeys();
00213       supportGetGeneratedKeys = true;
00214       if (logger.isDebugEnabled())
00215         logger.debug(Translate
00216             .get("backend.driver.statement.getGeneratedKeys.ok"));
00217     }
00218     catch (Exception e1)
00219     {
00220       logger.warn(Translate
00221           .get("backend.driver.statement.getGeneratedKeys.failed"));
00222       supportGetGeneratedKeys = false;
00223     }
00224     catch (AbstractMethodError e1)
00225     {
00226       logger.warn(Translate
00227           .get("backend.driver.statement.getGeneratedKeys.failed"));
00228       supportGetGeneratedKeys = false;
00229     }
00230     catch (java.lang.NoSuchMethodError e1)
00231     {
00232       logger.warn(Translate
00233           .get("backend.driver.statement.getGeneratedKeys.failed"));
00234       supportGetGeneratedKeys = false;
00235     }
00236 
00237     // Commented out:
00238     // A prepared statement can be sent to the DBMS right away to be compiled
00239     // Should fine a work around for this test.
00240 
00241     //    PreparedStatement ps;
00242     //    try
00243     //    {
00244     //      ps = c.prepareStatement("INSERT INTO versions VALUES (?,?)");
00245     //      ps.setInt(1, 10);
00246     //      ps.setString(2, "just a test");
00247     //    }
00248     //    catch (Exception e)
00249     //    {
00250     //      logger.warn(Translate.get("backend.driver.prepared.statement.failed"),
00251     // e);
00252     //    }
00253     //    if (logger.isDebugEnabled())
00254     //      logger.debug(Translate.get("backend.driver.prepared.statement.ok"));
00255 
00256     try
00257     {
00258       s.setQueryTimeout(TIMEOUT_VALUE);
00259       supportSetQueryTimeout = true;
00260     }
00261     catch (Exception e)
00262     {
00263       logger.warn(Translate.get("backend.driver.setQueryTimeout.failed", e));
00264     }
00265     if (supportSetQueryTimeout && logger.isDebugEnabled())
00266       logger.debug(Translate.get("backend.driver.setQueryTimeout.ok"));
00267 
00268     ResultSet rs;
00269     try
00270     {
00271       String[] types = {"TABLE", "VIEW"};
00272       rs = connectionMetaData.getTables(null, null, "%", types);
00273     }
00274     catch (Exception e)
00275     {
00276       logger
00277           .error(Translate.get("backend.driver.metadata.getTables.failed", e));
00278       return isCompliant;
00279     }
00280     if (logger.isDebugEnabled())
00281       logger.debug(Translate.get("backend.driver.metadata.getTables.ok"));
00282 
00283     java.sql.ResultSetMetaData rsMetaData;
00284     try
00285     {
00286       rsMetaData = rs.getMetaData();
00287     }
00288     catch (Exception e)
00289     {
00290       logger.error(Translate.get("backend.driver.resultset.getMetaData.failed",
00291           e));
00292       return isCompliant;
00293     }
00294     if (logger.isDebugEnabled())
00295       logger.debug(Translate.get("backend.driver.resultset.getMetaData.ok"));
00296 
00297     try
00298     {
00299       if (rs.next())
00300       {
00301         rs.getObject(1);
00302       }
00303       else
00304         logger.warn(Translate.get("backend.driver.resultset.getObject.unable"));
00305     }
00306     catch (Exception e)
00307     {
00308       logger.error(Translate
00309           .get("backend.driver.resultset.getObject.failed", e));
00310       return isCompliant;
00311     }
00312     if (logger.isDebugEnabled())
00313       logger.debug(Translate.get("backend.driver.resultset.getObject.ok"));
00314 
00315     try
00316     {
00317       rsMetaData.getColumnCount();
00318       supportGetColumnCount = true;
00319     }
00320     catch (Exception e)
00321     {
00322       logger.error(Translate
00323           .get("backend.driver.metadata.getColumnCount.failed"));
00324       return isCompliant;
00325     }
00326     if (supportGetColumnCount && logger.isDebugEnabled())
00327       logger.debug(Translate.get("backend.driver.metadata.getColumnCount.ok"));
00328 
00329     try
00330     {
00331       rsMetaData.getColumnName(1);
00332     }
00333     catch (Exception e)
00334     {
00335       logger.error(Translate
00336           .get("backend.driver.metadata.getColumnName.failed"));
00337       return isCompliant;
00338     }
00339     if (logger.isDebugEnabled())
00340       logger.debug(Translate.get("backend.driver.metadata.getColumnName.ok"));
00341 
00342     try
00343     {
00344       rsMetaData.getTableName(1);
00345       supportGetTableName = true;
00346     }
00347     catch (Exception e)
00348     {
00349       logger.warn(Translate.get("backend.driver.metadata.getTableName.failed",
00350           e));
00351     }
00352 
00353     if (supportGetTableName && logger.isDebugEnabled())
00354       logger.debug(Translate.get("backend.driver.metadata.getTableName.ok"));
00355 
00356     try
00357     {
00358       rsMetaData.getColumnDisplaySize(1);
00359       supportGetColumnDisplaySize = true;
00360     }
00361     catch (Exception e)
00362     {
00363       logger.warn(Translate.get(
00364           "backend.driver.metadata.getColumnDisplaySize.failed", e));
00365     }
00366     if (supportGetColumnDisplaySize && logger.isDebugEnabled())
00367       logger.debug(Translate
00368           .get("backend.driver.metadata.getColumnDisplaySize.ok"));
00369 
00370     try
00371     {
00372       rsMetaData.getColumnType(1);
00373       supportGetColumnType = true;
00374     }
00375     catch (Exception e)
00376     {
00377       logger.warn(Translate.get("backend.driver.metadata.getColumnType.failed",
00378           e));
00379     }
00380     if (supportGetColumnType && logger.isDebugEnabled())
00381       logger.debug(Translate.get("backend.driver.metadata.getColumnType.ok"));
00382 
00383     try
00384     {
00385       rsMetaData.getColumnTypeName(1);
00386       supportGetColumnTypeName = true;
00387     }
00388     catch (Exception e)
00389     {
00390       logger.warn(Translate.get(
00391           "backend.driver.metadata.getColumnTypeName.failed", e));
00392     }
00393     if (supportGetColumnTypeName && logger.isDebugEnabled())
00394       logger.debug(Translate
00395           .get("backend.driver.metadata.getColumnTypeName.ok"));
00396 
00397     try
00398     {
00399       rsMetaData.getColumnClassName(1);
00400       supportGetColumnClassName = true;
00401     }
00402     catch (Exception e)
00403     {
00404       logger.warn(Translate.get(
00405           "backend.driver.metadata.getColumnClassName.failed", e));
00406     }
00407     if (supportGetColumnClassName && logger.isDebugEnabled())
00408       logger.debug(Translate
00409           .get("backend.driver.metadata.getColumnClassName.ok"));
00410 
00411     isCompliant = true;
00412     hasBeenTested = true;
00413     return isCompliant;
00414   }

String org.objectweb.cjdbc.controller.backend.DriverCompliance.getDatabaseProductName  ) 
 

Returns the databaseProductName value.

Returns:
Returns the databaseProductName.

Definition at line 521 of file DriverCompliance.java.

00522   {
00523     return this.databaseProductName;
00524   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.isCompliant  ) 
 

Returns:
true if the driver is compliant to the C-JDBC requirements

Definition at line 419 of file DriverCompliance.java.

00420   {
00421     return isCompliant;
00422   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.supportGetColumnClassName  ) 
 

Returns:
true if the driver supports getColumnClassName

Definition at line 435 of file DriverCompliance.java.

00436   {
00437     return supportGetColumnClassName;
00438   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.supportGetColumnCount  ) 
 

Returns:
true if the driver supports getColumnCount

Definition at line 443 of file DriverCompliance.java.

00444   {
00445     return supportGetColumnCount;
00446   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.supportGetColumnDisplaySize  ) 
 

Returns:
true if the driver supports getColumnDisplaySize

Definition at line 451 of file DriverCompliance.java.

00452   {
00453     return supportGetColumnDisplaySize;
00454   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.supportGetColumnType  ) 
 

Returns:
true if the driver supports getColumnType

Definition at line 459 of file DriverCompliance.java.

00460   {
00461     return supportGetColumnType;
00462   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.supportGetColumnTypeName  ) 
 

Returns:
true if the driver supports getColumnTypeName

Definition at line 467 of file DriverCompliance.java.

00468   {
00469     return supportGetColumnTypeName;
00470   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.supportGetGeneratedKeys  ) 
 

Returns:
true if the driver supports getGeneratedKeys

Definition at line 427 of file DriverCompliance.java.

00428   {
00429     return supportGetGeneratedKeys;
00430   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.supportGetTableName  ) 
 

Returns:
true if the driver supports getTableName

Definition at line 475 of file DriverCompliance.java.

00476   {
00477     return supportGetTableName;
00478   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.supportSetCursorName  ) 
 

Returns the supportSetCursorName value.

Returns:
Returns the supportSetCursorName.

Definition at line 501 of file DriverCompliance.java.

00502   {
00503     return supportSetCursorName;
00504   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.supportSetFetchSize  ) 
 

Returns the supportSetFetchSize value.

Returns:
Returns the supportSetFetchSize.

Definition at line 511 of file DriverCompliance.java.

00512   {
00513     return supportSetFetchSize;
00514   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.supportSetMaxRows  ) 
 

Returns:
true if the driver supports Statement.setMaxRows

Definition at line 491 of file DriverCompliance.java.

00492   {
00493     return supportSetMaxRows;
00494   }

boolean org.objectweb.cjdbc.controller.backend.DriverCompliance.supportSetQueryTimeout  ) 
 

Returns:
true if the driver supports setQueryTimeout

Definition at line 483 of file DriverCompliance.java.

00484   {
00485     return supportSetQueryTimeout;
00486   }


The documentation for this class was generated from the following file:
Generated on Mon Apr 11 22:03:26 2005 for C-JDBC by  doxygen 1.3.9.1