[jboss-jira] [JBoss JIRA] (JBJCA-1380) XAManagedConnectionFactory screws up Datasource urls containing ;

Yannick Einsweiler (Jira) issues at jboss.org
Mon Nov 26 10:44:02 EST 2018


    [ https://issues.jboss.org/browse/JBJCA-1380?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13666136#comment-13666136 ] 

Yannick Einsweiler commented on JBJCA-1380:
-------------------------------------------

[~chrispoulsen] same here. Not sure why semicolon was replaced in the first place. If someone wanted to have separate properties, that's what `xa-datasource-property` is there for.
No real workaround as `org.h2.jdbcx.JdbcDataSource` class as no other setters and uses hardcoded semicolon to parse/split the URL string. We ended up commenting out that replacement line in a custom class. 
The fix in my mind would be to check if URL is h2-related and if it is, do not replace semicolons. There could be however other dbms. 

> XAManagedConnectionFactory screws up Datasource urls containing ;
> -----------------------------------------------------------------
>
>                 Key: JBJCA-1380
>                 URL: https://issues.jboss.org/browse/JBJCA-1380
>             Project: IronJacamar
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 1.4.9
>         Environment: Unit testing using an embedded ironjacamar
>            Reporter: Chris Poulsen
>            Priority: Major
>         Attachments: XAManagedConnectionFactory-h2-error.txt
>
>
> While trying to adjust settings on the H2 data source we use for a corner of our system during testing, I ran into problems.
> H2 accepts parameters appended to the url on the form ";<name>=<value>" for example:
> "jdbc:h2:mem:unit-test;MODE=Oracle"
> I was unable to deploy the datasource using:
> <xa-datasource-property name="url">jdbc:h2:mem:unit-test;MODE=Oracle</xa-datasource-property>
> Ironjacamar keeps complaining about: 
> Caused by: java.lang.NoSuchMethodException: Method setMODE not found some setter not being found.
> My initial thought was that <url-delimiter> was the cause, but no dice.
> Following the trace into the sources, I guess the offending line is:
> {code:java}
> xaDataSourceProperties = xaDataSourceProperties.replace(';', '\n');
> {code}
> In XAManagedConnectionFactory around line: 174 (see following snippet)
> {code:java}
>    public void setXADataSourceProperties(String xaDataSourceProperties) throws ResourceException
>    {
>       this.xaDataSourceProperties = xaDataSourceProperties;
>       xaProps.clear();
>       if (xaDataSourceProperties != null)
>       {
>          // Map any \ to \\
>          xaDataSourceProperties = xaDataSourceProperties.replaceAll("\\\\", "\\\\\\\\");
>          // Map any ; to \n
>          xaDataSourceProperties = xaDataSourceProperties.replace(';', '\n');
>          InputStream is = new ByteArrayInputStream(xaDataSourceProperties.getBytes());
>          try
>          {
>             Properties p = new Properties();
>             p.load(is);
>             for (Map.Entry<Object, Object> entry : p.entrySet())
>             {
>                xaProps.put((String)entry.getKey(), (String)entry.getValue());
>             }
>          }
> {code}



--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the jboss-jira mailing list