Map parameters in OracleNGDataStoreFactory
------------------------------------------

                 Key: GEOT-3175
                 URL: http://jira.codehaus.org/browse/GEOT-3175
             Project: GeoTools
          Issue Type: Bug
          Components: data jdbc-ng
    Affects Versions: 2.6.4
         Environment: windows vista, jdk1.5.0_22
            Reporter: Tobia Di Pisa
             Fix For: 2.6.5
         Attachments: OracleNGDataStoreFactory_patch.diff

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

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to