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
