[
https://issues.jboss.org/browse/JBJCA-1380?page=com.atlassian.jira.plugin...
]
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)