karaf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jean-Baptiste Onofré (JIRA) <j...@apache.org>
Subject [jira] [Commented] (KARAF-3449) Incorrect serverName parsing in JDBC DataSource Blueprint
Date Tue, 30 Jun 2015 11:45:39 GMT

    [ https://issues.apache.org/jira/browse/KARAF-3449?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14608161#comment-14608161

Jean-Baptiste Onofré commented on KARAF-3449:

When using jdbc:info, and using the serverName/URL, I can filter some characters. Let see
if it helps.

> Incorrect serverName parsing in JDBC DataSource Blueprint
> ---------------------------------------------------------
>                 Key: KARAF-3449
>                 URL: https://issues.apache.org/jira/browse/KARAF-3449
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf-feature, karaf-osgi
>    Affects Versions: 3.0.2
>            Reporter: Justin Reock
>            Assignee: Jean-Baptiste Onofré
>            Priority: Minor
>              Labels: features
> The serverName attribute in the JDBC DataSource code appears to be parsed incorrectly.
 It is tokenizing off of the ? character, but a trailing slash exists between the database
name and the ? parameter delimiter, so a request for a database is matched against "[database_name]/"
as opposed to just "[database_name]".  
> This may be isolated to just the PGPoolingDataSource for Postgres, I haven't tried to
replicate with another connection driver.  
> To demonstrate, set up a DataSource blueprint similar to the following:
> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
>    <bean id="dataSource" class="org.postgresql.ds.PGPoolingDataSource" destroy-method="close">
>       <property name="serverName" value="localhost:5432/postgres"/>
>       <property name="user" value="postgres"/>
>       <property name="password" value="pgpassword"/>
>       <property name="dataSourceName" value="pgConnectionPool"/>
>       <property name="initialConnections" value="5"/>
>       <property name="maxConnections" value="50" />
>   </bean>
>   <service interface="javax.sql.DataSource" ref="dataSource">
>     <service-properties>
>             <entry key="osgi.jndi.service.name" value="jdbc/postgres"/>
>     </service-properties>
>   </service>
> </blueprint>
> ---
> Note that the intended database name from the serverName string here is "postgres". 
Upon attempting jdbc actions, the following error message will be returned from the DataSource:
> 2015-01-16 16:22:32,398 | ERROR | h for user karaf | JdbcServiceImpl                
 | 119 - org.apache.karaf.jdbc.core - 3.0.2 | Can't get information about datasource jdbc/postgres
> org.postgresql.util.PSQLException: FATAL: database "postgres/" does not exist
> Notice the trailing slash after the database name.  That's because the qualified URL
for the database is:
> jdbc:postgresql://localhost:5432:postgres/?loginTimeout=0&socketTimeout=0&prepareThreshold=5&unknownLength=2147483647&tcpKeepAlive=false&binaryTransfer=true&disableColumnSanitiser=false
> The trailing slash is coming in because the qualified name is being parsed using the
? as a delimiter.  This is provable, because the following serverName property can be used
as a workaround:
>  <property name="serverName" value="localhost:5432/postgres?"/>
> Note the ? at the end of the value.  This forces the interpreter to parse the proper
database name.  So the fix here would be either to account for the trailing slash in the qualified
name, or, not to append the slash at all when deriving the qualified name.

This message was sent by Atlassian JIRA

View raw message