DatabaseMetadata is also very poorly implemented in most drivers (postgreSQL
for example)

amrc


|-----Original Message-----
|From: [EMAIL PROTECTED]
|[mailto:[EMAIL PROTECTED]]On Behalf Of Aaron Mulder
|Sent: Wednesday, October 11, 2000 12:54 PM
|To: jBoss Developer
|Subject: Re: [jBoss-Dev] CVS
|update:jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc
|JDBCInitCommand.java
|
|
|       No!  No!!!!  *PLEASE* do not check the DatabaseMetaData!  This can
|be VERY slow - 10 minutes or more - I've seen it!  Sometimes I wake up in
|the middle of the night in a cold sweat thinking about that Oracle
|instance, but it was truly horrible and the DatabaseMetaData was too slow
|to be usable.  :)  Actually, I think I've seen that twice before, at
|different companies, with different horrible databases - but it's too
|common to ignore.
|
|Aaron
|
|On Wed, 11 Oct 2000, jBoss CVS Development wrote:
|>   User: schulze
|>   Date: 00/10/11 12:40:42
|>
|>   Modified:    src/main/org/jboss/ejb/plugins/jaws/jdbc
|>                         JDBCInitCommand.java
|>   Log:
|>   provided the PersistenceManager init() and destroy() methods
|with transactions, so that the table creation/deletion commands
|will affect the database.
|>   Furthermore I replaced the ugly hack for the table detection
|in the JDBCInitCommand with a j2ee spec compilant version (should
|work with all drivers).
|>
|>   Revision  Changes    Path
|>   1.7       +28 -23
|jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc/JDBCInitCommand.java
|>
|>   Index: JDBCInitCommand.java
|>   ===================================================================
|>   RCS file:
|/products/cvs/ejboss/jboss/src/main/org/jboss/ejb/plugins/jaws/jdbc
|/JDBCInitCommand.java,v
|>   retrieving revision 1.6
|>   retrieving revision 1.7
|>   diff -u -r1.6 -r1.7
|>   --- JDBCInitCommand.java   2000/09/28 01:17:04     1.6
|>   +++ JDBCInitCommand.java   2000/10/11 19:40:41     1.7
|>   @@ -14,7 +14,9 @@
|>    import java.sql.ResultSet;
|>    import java.sql.SQLException;
|>    import java.sql.Statement;
|>   +import java.sql.DatabaseMetaData;
|>
|>   +
|>    import org.jboss.ejb.plugins.jaws.JPMInitCommand;
|>    import org.jboss.ejb.plugins.jaws.metadata.CMPFieldMetaData;
|>
|>   @@ -26,7 +28,7 @@
|>     * @author <a href="mailto:[EMAIL PROTECTED]">Marc Fleury</a>
|>     * @author <a href="mailto:[EMAIL PROTECTED]">Joe Shevland</a>
|>     * @author <a href="mailto:[EMAIL PROTECTED]">Justin Forder</a>
|>   - * @version $Revision: 1.6 $
|>   + * @version $Revision: 1.7 $
|>     */
|>    public class JDBCInitCommand
|>       extends JDBCUpdateCommand
|>   @@ -65,29 +67,32 @@
|>          // Create table if necessary
|>          if (jawsEntity.getCreateTable())
|>          {
|>   -          boolean created = false;
|>   -          Connection con = null;
|>   -          Statement st = null;
|>   -          ResultSet rs = null;
|>   -          try {
|>   -              con = getConnection();
|>   -              st = con.createStatement();
|>   -              rs = st.executeQuery("SELECT COUNT(*) FROM
|"+jawsEntity.getTableName()+" WHERE 0=1");
|>   -              if(rs.next())
|>   +         // first check if the table already exists...
|>   +         // (a j2ee spec compatible jdbc driver has to fully
|>   +         // implement the DatabaseMetaData)
|>   +         boolean created = false;
|>   +         Connection con = null;
|>   +         ResultSet rs = null;
|>   +         try
|>   +         {
|>   +             con = getConnection();
|>   +             DatabaseMetaData dmd = con.getMetaData();
|>   +             rs = dmd.getTables(con.getCatalog(), null,
|jawsEntity.getTableName(), null);
|>   +             if (rs.next ())
|>                    created = true;
|>   -              rs.close();
|>   -              rs = null;
|>   -              st.close();
|>   -              st = null;
|>   -              con.close();
|>   -              con = null;
|>   -          } catch(SQLException e) {
|>   -              created = false;
|>   -          } finally {
|>   -              if(rs != null) try {rs.close();}catch(SQLException e) {}
|>   -              if(st != null) try {st.close();}catch(SQLException e) {}
|>   -              if(con != null) try
|{con.close();}catch(SQLException e) {}
|>   -          }
|>   +
|>   +             rs.close ();
|>   +             con.close ();
|>   +         }
|>   +         catch(Exception e)
|>   +         {
|>   +            throw e;
|>   +         }
|>   +         finally
|>   +         {
|>   +             if(rs != null) try {rs.close(); rs =
|null;}catch(SQLException e) {}
|>   +             if(con != null) try {con.close();con =
|null;}catch(SQLException e) {}
|>   +         }
|>
|>             // Try to create it
|>             if(created) {
|>
|>
|>
|>
|
|
|


Reply via email to