Derby
  1. Derby
  2. DERBY-546

In contrast to EmbeddedDriver, ClientDriver fails to report all DriverPropertyInfo's

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 10.1.1.0
    • Fix Version/s: None
    • Component/s: Network Client
    • Environment:
      Windows XP professional, JRE 1.5.0_04
    • Urgency:
      Normal
    • Issue & fix info:
      Newcomer
    • Bug behavior facts:
      Embedded/Client difference

      Description

      The Client Driver, in contrast to Embedded Driver, fails to report all DriverPropertyInfo's. It seems that it not only ignores the Properties object (see Jira DERBY-530), but it also ignores connection attributes appended to the connection url.

      See below a piece of code that demonstrates this behaviour:

      import java.sql.Connection;
      import java.sql.Driver;
      import java.sql.DriverManager;
      import java.sql.DriverPropertyInfo;
      import java.sql.SQLException;
      import java.util.Enumeration;
      import java.util.Properties;

      import org.apache.derby.jdbc.ClientDriver;
      import org.apache.derby.jdbc.EmbeddedDriver;

      public class DerbyConnector {

      private static final String DERBY_CONNECTION_PREFIX = "jdbc:derby:";

      private static final String MY_DATABASE = "MyDatabase";

      private static final String MY_HOST = "//127.0.0.1:1527/";

      static

      { new ClientDriver(); new EmbeddedDriver(); }

      public static void main(String[] args) {
      DerbyConnector connector = new DerbyConnector();
      try

      { Properties connectionProperties = new Properties(); connectionProperties.setProperty("create", "true"); connectionProperties.setProperty("dataEncryption", "true"); connector.printInfo(MY_HOST + MY_DATABASE, connectionProperties); connector.printInfo(MY_DATABASE, connectionProperties); }

      catch (SQLException e)

      { e.printStackTrace(); }

      }

      public Connection connect(String url) throws SQLException

      { return DriverManager.getConnection(DERBY_CONNECTION_PREFIX + url); }

      public Connection connect(String url, Properties connectionProperties)
      throws SQLException

      { return connect(DERBY_CONNECTION_PREFIX + url + connectionPropertiesString(connectionProperties)); }

      public DriverPropertyInfo[] getPropertyInfos(String url, Properties props)
      throws SQLException

      { String connectionString = DERBY_CONNECTION_PREFIX + url + connectionPropertiesString(props); System.out.println("ConnectionString = " + connectionString); Driver driver = DriverManager.getDriver(connectionString); return driver.getPropertyInfo(connectionString, props); }

      private String connectionPropertiesString(Properties connectionProperties) {
      StringBuffer sb = new StringBuffer();
      for (Enumeration enumeration = connectionProperties.propertyNames(); enumeration
      .hasMoreElements()

      { String key = (String) enumeration.nextElement(); sb.append(';'); sb.append(key); sb.append('='); sb.append(connectionProperties.getProperty(key)); }

      return sb.toString();

      }

      private void printInfo(String url, Properties connectionProperties)
      throws SQLException {
      System.out.println("========= " + url + " =========");
      DriverPropertyInfo[] infos = getPropertyInfos(url, connectionProperties);
      for (int i = 0; i < infos.length; i++) {
      System.out.println("DriverPropertyInfo " + i);
      System.out.println(" description: " + infos[i].description);
      System.out.println(" " + infos[i].name + " = " + infos[i].value);
      System.out.println(" required = " + infos[i].required);
      if (infos[i].choices != null) {
      for (int j = 0; j < infos[i].choices.length; j++)

      { System.out.println(" choice " + j + ": " + infos[i].choices[j]); }

      }
      }
      }

      }

        Activity

        Gavin made changes -
        Workflow jira [ 12324023 ] Default workflow, editable Closed status [ 12796911 ]
        Kathey Marsden made changes -
        Labels derby_triage10_5_2 derby_triage10_9
        Kristian Waagan made changes -
        Issue & fix info [Newcomer]
        Description The Client Driver, in contrast to Embedded Driver, fails to report all DriverPropertyInfo's. It seems that it not only ignores the Properties object (see Jira DERBY_530), but it also ignores connection attributes appended to the connection url.
         
        See below a piece of code that demonstrates this behaviour:
         
         
         
        import java.sql.Connection;
        import java.sql.Driver;
        import java.sql.DriverManager;
        import java.sql.DriverPropertyInfo;
        import java.sql.SQLException;
        import java.util.Enumeration;
        import java.util.Properties;
         
        import org.apache.derby.jdbc.ClientDriver;
        import org.apache.derby.jdbc.EmbeddedDriver;
         
        public class DerbyConnector {
         
            private static final String DERBY_CONNECTION_PREFIX = "jdbc:derby:";
         
            private static final String MY_DATABASE = "MyDatabase";
         
            private static final String MY_HOST = "//127.0.0.1:1527/";
         
            static {
                new ClientDriver();
                new EmbeddedDriver();
            }
         
            public static void main(String[] args) {
                DerbyConnector connector = new DerbyConnector();
                try {
                    Properties connectionProperties = new Properties();
                    connectionProperties.setProperty("create", "true");
                    connectionProperties.setProperty("dataEncryption", "true");
                    connector.printInfo(MY_HOST + MY_DATABASE, connectionProperties);
                    connector.printInfo(MY_DATABASE, connectionProperties);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
         
            public Connection connect(String url) throws SQLException {
                return DriverManager.getConnection(DERBY_CONNECTION_PREFIX + url);
            }
         
            public Connection connect(String url, Properties connectionProperties)
                    throws SQLException {
                return connect(DERBY_CONNECTION_PREFIX + url
                        + connectionPropertiesString(connectionProperties));
            }
         
            public DriverPropertyInfo[] getPropertyInfos(String url, Properties props)
                    throws SQLException {
                String connectionString = DERBY_CONNECTION_PREFIX + url
                        + connectionPropertiesString(props);
                System.out.println("ConnectionString = " + connectionString);
                Driver driver = DriverManager.getDriver(connectionString);
                return driver.getPropertyInfo(connectionString, props);
            }
         
            private String connectionPropertiesString(Properties connectionProperties) {
                StringBuffer sb = new StringBuffer();
                for (Enumeration enumeration = connectionProperties.propertyNames(); enumeration
                        .hasMoreElements();) {
                    String key = (String) enumeration.nextElement();
                    sb.append(';');
                    sb.append(key);
                    sb.append('=');
                    sb.append(connectionProperties.getProperty(key));
                }
                return sb.toString();
         
            }
            
            private void printInfo(String url, Properties connectionProperties)
                    throws SQLException {
                System.out.println("========= " + url + " =========");
                DriverPropertyInfo[] infos = getPropertyInfos(url, connectionProperties);
                for (int i = 0; i < infos.length; i++) {
                    System.out.println("DriverPropertyInfo " + i);
                    System.out.println(" description: " + infos[i].description);
                    System.out.println(" " + infos[i].name + " = " + infos[i].value);
                    System.out.println(" required = " + infos[i].required);
                    if (infos[i].choices != null) {
                        for (int j = 0; j < infos[i].choices.length; j++) {
                            System.out.println(" choice " + j + ": "
                                    + infos[i].choices[j]);
                        }
                    }
                }
            }
         
        }
        The Client Driver, in contrast to Embedded Driver, fails to report all DriverPropertyInfo's. It seems that it not only ignores the Properties object (see Jira DERBY-530), but it also ignores connection attributes appended to the connection url.
         
        See below a piece of code that demonstrates this behaviour:
         
         
         
        import java.sql.Connection;
        import java.sql.Driver;
        import java.sql.DriverManager;
        import java.sql.DriverPropertyInfo;
        import java.sql.SQLException;
        import java.util.Enumeration;
        import java.util.Properties;
         
        import org.apache.derby.jdbc.ClientDriver;
        import org.apache.derby.jdbc.EmbeddedDriver;
         
        public class DerbyConnector {
         
            private static final String DERBY_CONNECTION_PREFIX = "jdbc:derby:";
         
            private static final String MY_DATABASE = "MyDatabase";
         
            private static final String MY_HOST = "//127.0.0.1:1527/";
         
            static {
                new ClientDriver();
                new EmbeddedDriver();
            }
         
            public static void main(String[] args) {
                DerbyConnector connector = new DerbyConnector();
                try {
                    Properties connectionProperties = new Properties();
                    connectionProperties.setProperty("create", "true");
                    connectionProperties.setProperty("dataEncryption", "true");
                    connector.printInfo(MY_HOST + MY_DATABASE, connectionProperties);
                    connector.printInfo(MY_DATABASE, connectionProperties);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
         
            public Connection connect(String url) throws SQLException {
                return DriverManager.getConnection(DERBY_CONNECTION_PREFIX + url);
            }
         
            public Connection connect(String url, Properties connectionProperties)
                    throws SQLException {
                return connect(DERBY_CONNECTION_PREFIX + url
                        + connectionPropertiesString(connectionProperties));
            }
         
            public DriverPropertyInfo[] getPropertyInfos(String url, Properties props)
                    throws SQLException {
                String connectionString = DERBY_CONNECTION_PREFIX + url
                        + connectionPropertiesString(props);
                System.out.println("ConnectionString = " + connectionString);
                Driver driver = DriverManager.getDriver(connectionString);
                return driver.getPropertyInfo(connectionString, props);
            }
         
            private String connectionPropertiesString(Properties connectionProperties) {
                StringBuffer sb = new StringBuffer();
                for (Enumeration enumeration = connectionProperties.propertyNames(); enumeration
                        .hasMoreElements();) {
                    String key = (String) enumeration.nextElement();
                    sb.append(';');
                    sb.append(key);
                    sb.append('=');
                    sb.append(connectionProperties.getProperty(key));
                }
                return sb.toString();
         
            }
            
            private void printInfo(String url, Properties connectionProperties)
                    throws SQLException {
                System.out.println("========= " + url + " =========");
                DriverPropertyInfo[] infos = getPropertyInfos(url, connectionProperties);
                for (int i = 0; i < infos.length; i++) {
                    System.out.println("DriverPropertyInfo " + i);
                    System.out.println(" description: " + infos[i].description);
                    System.out.println(" " + infos[i].name + " = " + infos[i].value);
                    System.out.println(" required = " + infos[i].required);
                    if (infos[i].choices != null) {
                        for (int j = 0; j < infos[i].choices.length; j++) {
                            System.out.println(" choice " + j + ": "
                                    + infos[i].choices[j]);
                        }
                    }
                }
            }
         
        }
        Kathey Marsden made changes -
        Labels derby_triage10_5_2
        Mike Matrigali made changes -
        Urgency Normal
        Kathey Marsden made changes -
        Field Original Value New Value
        Derby Categories [Embedded/Client difference]
        Piet Blok created issue -

          People

          • Assignee:
            Unassigned
            Reporter:
            Piet Blok
          • Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

            • Created:
              Updated:

              Development