[
https://issues.apache.org/jira/browse/DBCP-461?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16577883#comment-16577883
]
Sailaja commented on DBCP-461:
------------------------------
[~garydgregory] [~b.eckenfels]
The issue still exists in TomEE 7.
As per our analysis the root cause of the problem is that for XA connections,
instead of getting a proxy statement object the client gets the actual
statement object which the client ends up closing. The test code submitted by
us can confirm this.
Is this not the right project for this ticket?
If not, it will be great if you could let us know where this ticket should be
created?
> Prepared statements are not cached with XA
> ------------------------------------------
>
> Key: DBCP-461
> URL: https://issues.apache.org/jira/browse/DBCP-461
> Project: Commons DBCP
> Issue Type: Bug
> Affects Versions: 1.4
> Environment: TomEE Version : Apache Tomcat Version 7.0.63
> Reporter: Sailaja
> Priority: Major
>
> Prepared statements are not getting cached when I use XA datasource.
> Please find the below program :
> {code:java}
> public static void main(String[] args) throws Exception {
> final TransactionManager transactionManager =
> TransactionManagerFactory.getTransactionManager();
> final PoolProperties poolProperties = new PoolProperties();
> SQLServerDataSource dataSource = new
> com.microsoft.sqlserver.jdbc.SQLServerDataSource();
> dataSource.setUser("sa");
> dataSource.setPassword("$9Lserver");
>
> dataSource.setURL("jdbc:sqlserver://sdwivedi63ks022:1433;sendStringParametersAsUnicode=false");
> dataSource.setDatabaseName("himalaya");
> poolProperties.setDataSource(dataSource);
> final String jdbcInterceptors =
> "org.apache.tomcat.jdbc.pool.interceptor.StatementCache(prepared=true,callable=true)";
> poolProperties.setJdbcInterceptors(jdbcInterceptors);
> final org.apache.tomcat.jdbc.pool.DataSource pooledOracleDatasource =
> new org.apache.tomcat.jdbc.pool.XADataSource(poolProperties);
> final javax.sql.DataSource oracleDataSource = new
> org.apache.openejb.resource.jdbc.managed.xa.ManagedXADataSource(pooledOracleDatasource,
> transactionManager,
> TransactionProvider.getTransactionSynchronizationRegistry());
> Connection connection = oracleDataSource.getConnection();
> for (int i = 0; i < 50; i++) {
> PreparedStatement preparedStatement =
> connection.prepareStatement("insert into MyTableNew values (" + i + ")");
> System.out.println(preparedStatement.getClass().getName());
> preparedStatement.execute();
> preparedStatement.close();
> }
> connection.close();
> }
> {code}
> If I run the above program, the output I see is:
> com.sun.proxy.$Proxy11
> If I just change the above program to use XA datasource, i.e.
> Change the following line
> SQLServerDataSource dataSource = new
> com.microsoft.sqlserver.jdbc.SQLServerDataSource();
> To
> SQLServerXADataSource dataSource = new
> com.microsoft.sqlserver.jdbc.SQLServerXADataSource();
> The output is :
> com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)