Hi I am using TomEE version Apache Tomcat Version 7.0.63. I have the following test program.
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(); } 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 So, if I use XA datasource, prepared statements are not cached. How do I log a defect ? Regards, Sailaja.