GeoTools
  1. GeoTools
  2. GEOT-3175

Map parameters in OracleNGDataStoreFactory

    Details

    • Type: Bug Bug
    • Status: Closed Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.6.4
    • Fix Version/s: 2.6.6
    • Component/s: jdbc
    • Labels:
      None
    • Environment:
      windows vista, jdk1.5.0_22

      Description

      Hi,

      I need to access an Oracle data store using the following parameters:

      USER: xxx

      PASSWD: xxx

      DATABASE: (DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = xxx)(PORT = xxxx))(ADDRESS = (PROTOCOL = TCP)(HOST = xxx)(PORT = xxxx))(LOAD_BALANCE = yes))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xxx.xxx.xxx.xx)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=180)(DELAY=5))))

      When you run the OracleNGDataStoreFactory.getJDBCUrl (Map params) protected method, the execution of the 'lookUp' function throws an IOException as the HOST and PORT parameters are required.

      This is the method code:

      ...

      @Override
      protected String getJDBCUrl(Map params) throws IOException

      { String host = (String) HOST.lookUp(params); String db = (String) DATABASE.lookUp(params); int port = (Integer) PORT.lookUp(params); if( db.startsWith("(") ) return JDBC_PATH + db; else if( db.startsWith("/") ) return JDBC_PATH + "//" + host + ":" + port + db; else return JDBC_PATH + host + ":" + port + ":" + db; }

      ...

      In this method if the DATABASE parameter starts with "(", the HOST and PORT parameters are not used because the function returns 'JDBC_PATH + db'.

      I have consulted the Oracle documentation at this link:

      http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html#top (in the 'Connections' section)

      and I see that the HOST and PORT parameters are not always required to compose the JDBC URL.

      In the current 'getJDBCUrl' method the DATABASE parameter is alwais required to compose the JDBC URL but, in the JDBCDataStoreFactory
      class, this parameter not have the "required" flag set up.

      To resolve this problem I modified the OracleNGDataStoreFactory class as follow:

      1) Marking HOST and PORT parameters as not "required" and DATABASE as "required":

      ...

      /** parameter for database port */
      public static final Param PORT = new Param("port", Integer.class, "Port", false, 1521);

      /** parameter for database host */
      public static final Param HOST = new Param("host", String.class, "Host", false, "localhost");

      /** parameter for database instance */
      public static final Param DATABASE = new Param("database", String.class, "Database", true);

      ...

      2) Modifying 'getJDBCurl' method as follow:

      ...

      @Override
      protected String getJDBCUrl(Map params) throws IOException

      { String db = (String) DATABASE.lookUp(params); String host = (String) HOST.lookUp(params); Integer port =(Integer) PORT.lookUp(params); if(db.startsWith("(")) return JDBC_PATH.concat(db); else if(db.startsWith("/") && host != null && port != null) return JDBC_PATH.concat("//").concat(host).concat(":").concat(port.toString()).concat(db); else if(host != null && port != null) return JDBC_PATH.concat(host).concat(":").concat(port.toString()).concat(":").concat(db); else throw new IOException("Unable to properly compose the JDBC URL string, some parameters as host and port may be null !"); }

      ...

      3) Modifying the 'setupParameters' method introducing the new HOST, PORT and DATABASE definitions:

      ...

      @Override
      protected void setupParameters(Map parameters)

      { // NOTE: when adding parameters here remember to add them to OracleNGOCIDataStoreFactory and // OracleNGJNDIDataStoreFactory super.setupParameters(parameters); parameters.put(LOOSEBBOX.key, LOOSEBBOX); parameters.put(MAX_OPEN_PREPARED_STATEMENTS.key, MAX_OPEN_PREPARED_STATEMENTS); parameters.put(PORT.key, PORT); parameters.put(HOST.key, HOST); parameters.put(DATABASE.key, DATABASE); parameters.put(DBTYPE.key, DBTYPE); }

      ...

      Regards

        Activity

        Hide
        Andrea Aime added a comment -
        I agree but only to a point. We'd be creating a dangerous precedent. We always accepted small patches without signign the contribution agreement, but never gave commit access without one. It's a slippery slope, don't want to get into it, plus, one needs some incentive to sign and send the contributor agreement no?
        Show
        Andrea Aime added a comment - I agree but only to a point. We'd be creating a dangerous precedent. We always accepted small patches without signign the contribution agreement, but never gave commit access without one. It's a slippery slope, don't want to get into it, plus, one needs some incentive to sign and send the contributor agreement no?
        Hide
        Ben Caradoc-Davies added a comment -
        OK, if Tobia asked you to commit the patch, then please go ahead and do so.
        Show
        Ben Caradoc-Davies added a comment - OK, if Tobia asked you to commit the patch, then please go ahead and do so.
        Hide
        Tobia Di Pisa added a comment -
        Patch committed in r36162 on trunk and r36160 on 2.6.x.
        Show
        Tobia Di Pisa added a comment - Patch committed in r36162 on trunk and r36160 on 2.6.x.
        Hide
        Andrea Aime added a comment -
        Closing the jira, commits already happened
        Show
        Andrea Aime added a comment - Closing the jira, commits already happened
        Hide
        Andrea Aime added a comment -
        Mass closing all issues in resolved state that have not been reopened nor commented over in the last month
        Show
        Andrea Aime added a comment - Mass closing all issues in resolved state that have not been reopened nor commented over in the last month

          People

          • Assignee:
            Andrea Aime
            Reporter:
            Tobia Di Pisa
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: