Спасибо, это действительно работает как для Bitronix 2.1.2, так и для Atomikos 3.7.0 - при условии, что драйвер Oracle JDK6 является причиной.
Я тестировал unwrap(oracle.jdbc.OraclePreparedStatement.class)
ранее, поскольку oracle.jdbc.OraclePreparedStatement является интерфейсом для классов драйвера PreparedStatement. Я получил " bitronix.tm.resource.jdbc.JdbcUncachedPreparedStatementHandle не является оболочкой для интерфейса oracle.jdbc.driver.OraclePreparedStatement " SQLException, хотя.
Глядя на источник прокси-класса Bitronix (JdbcUncachedPreparedStatementHandle), я обнаружил:
public Object unwrap(Class iface) throws SQLException {
if (PreparedStatement.class.equals(iface)) {
return delegate;
}
throw new SQLException(getClass().getName() + " is not a wrapper for interface " + iface.getName());
}
Разве это не должно быть
public Object unwrap(Class iface) throws SQLException {
if (iface.isAssignableFrom(delegate.getClass()) {
return delegate;
}
throw new SQLException(getClass().getName() + " is not a wrapper for interface " + iface.getName());
}
В любом случае - когда я использую этот код, он работает как для Bitronix, так и для Atomikos - Atomikos в любом случае не является проблемой, поскольку возвращенный PreparedStatement не является прокси-объектом, как упомянуто выше.
((OraclePreparedStatement)pstmt.unwrap(PreparedStatement.class)).setExecuteBatch(100);