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