Es scheint, dass spring-data-jdbc-ext EOL ist. Die SqlArrayValue-Klasse entpackt die Verbindung einfach nicht. Am Ende habe ich die JDBC-Erweiterungen über Bord geworfen und meine eigene, sehr ähnliche Klasse entwickelt, die das Auspacken der Verbindung übernimmt. Dies funktioniert jetzt auf WebLogic und Tomcat (mit accessToUnderlyingConnectionAllowed auf true gesetzt) DBCP und dem nativen Verbindungspool von Tomcat (kein accessToUnderlyingConnectionAllowed erforderlich).
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);
}
}