Wygląda na to, że spring-data-jdbc-ext to EOL. Klasa SqlArrayValue po prostu nie rozpakowuje połączenia. Skończyło się na tym, że zrezygnowałem z rozszerzeń JDBC i uruchomiłem moją własną bardzo podobną klasę, która obsługuje rozpakowywanie połączenia. Działa to teraz na WebLogic i Tomcat (z parametrem accessToUnderlyingConnectionAllowed ustawionym na true) DBCP i macierzystej puli połączeń Tomcat (nie jest wymagany accessToUnderlyingConnectionAllowed).
import java.sql.Connection;
import java.sql.SQLException;
import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.jdbc.core.support.AbstractSqlTypeValue;
import oracle.jdbc.OracleConnection;
public class OracleSqlArrayValue<T> extends AbstractSqlTypeValue {
private T[] values;
private String defaultTypeName;
public OracleSqlArrayValue(T[] values) {
this.values = values;
}
public OracleSqlArrayValue(T[] values, String defaultTypeName) {
this.values = values;
this.defaultTypeName = defaultTypeName;
}
@Override
protected Object createTypeValue(Connection conn, int sqlType,
String typeName) throws SQLException {
if (typeName == null && defaultTypeName == null) {
throw new InvalidDataAccessApiUsageException(
"No type named defined. Instantiate class with default type name.");
}
if (!conn.isWrapperFor(OracleConnection.class)) {
throw new InvalidDataAccessApiUsageException(
"Unable to unwrap OracleConnection. Ensure you are connecting to an Oracle DB.");
}
return conn.unwrap(OracleConnection.class).createOracleArray(
typeName != null ? typeName : defaultTypeName, values);
}
}