Hey Tobia;

I am sifting through email looking at the state of Oracle (and plan to
release geotools 2.6.5 tomorrow). There are a number of good ideas you
have provided (both this email and one on byte[] mappings).

Did you ever create a jira and push these changes back into the project?

jody

On Fri, Jul 2, 2010 at 8:35 PM, Tobia Di Pisa
<[email protected]> wrote:
> Hi,
>
> 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);
>     }
>
>     ...
>
> Before opening a JIRA I propose these changes.
>
>
> Best regards,
> Tobia
>
>
> 2010/7/1 Andrea Aime <[email protected]>
>>
>> Tobia Di Pisa ha scritto:
>>>
>>> Hi all,
>>>
>>> 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 fact, if the DATABASE parameter starts with "(", the HOST and
>>> PORT parameters are not used because the function returns 'JDBC_PATH + db'.
>>> To resolve this problem I used this code:
>>>
>>>    ...
>>>       @Override
>>>    protected String getJDBCUrl(Map params) throws IOException {
>>>        String db = (String) DATABASE.lookUp(params);
>>>               if(db.startsWith("("))
>>>            return JDBC_PATH + db;                      String host =
>>> (String) HOST.lookUp(params);               int port = (Integer)
>>> PORT.lookUp(params);
>>>               if( db.startsWith("/") )
>>>            return JDBC_PATH + "//" + host + ":" + port + db;
>>>        else
>>>            return JDBC_PATH + host + ":" + port + ":" + db;     }
>>>       ...
>>>
>>> Are there any contraindications to change the method 'getJDBCUrl' in this
>>> way ?
>>
>> I don't think so, but for jdbc-ng changes you should open a Jira and
>> cc me, Justin and Christian (the module maintainers).
>>
>> Is the above really solving the issue? Host and port are marked
>> as required at the JDBCDataStoreFactory declaration.
>> I think you also create clones in OracleDataStoreFactory
>> that do not have the "required" flag set up and use those
>> in getParametersInfo
>>
>> Cheers
>> Andrea
>>
>>
>> --
>> Andrea Aime
>> OpenGeo - http://opengeo.org
>> Expert service straight from the developers.
>>
>
>
> ------------------------------------------------------------------------------
> 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-gt2-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>
>

------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://p.sf.net/sfu/dev2dev-palm
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to