{"record":{"id":"841258dbd37b88cb","repo":"apache/shardingsphere","slug":"abort","errorCode":null,"errorMessage":"abort","messagePattern":"abort","errorType":"exception","errorClass":"SQLFeatureNotSupportedException","httpStatus":null,"severity":"error","filePath":"jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationConnection.java","lineNumber":64,"sourceCode":"    \n    @Override\n    public final CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"prepareCall\");\n    }\n    \n    @Override\n    public final CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"prepareCall\");\n    }\n    \n    @Override\n    public final String nativeSQL(final String sql) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"nativeSQL\");\n    }\n    \n    @Override\n    public final void abort(final Executor executor) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"abort\");\n    }\n    \n    @Override\n    public final Map<String, Class<?>> getTypeMap() throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"getTypeMap\");\n    }\n    \n    @Override\n    public final void setTypeMap(final Map<String, Class<?>> map) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"setTypeMap\");\n    }\n    \n    @Override\n    public int getNetworkTimeout() throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"getNetworkTimeout\");\n    }\n    \n    @Override","sourceCodeStart":46,"sourceCodeEnd":82,"githubUrl":"https://github.com/apache/shardingsphere/blob/e952770a215630a3659c75d64369168cd3e26b82/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/unsupported/AbstractUnsupportedOperationConnection.java#L46-L82","documentation":"ShardingSphere's JDBC driver does not implement the java.sql.Connection method abort (forcibly terminating an open connection from another thread, as specified by JDBC 4). The abstract base class AbstractUnsupportedOperationConnection, which ShardingSphereConnection extends, overrides it as final and unconditionally throws SQLFeatureNotSupportedException. ShardingSphere connections may fan out to multiple real backend connections, and coordinated cross-thread abort of all of them is not implemented, so the method always throws. The exception is thrown the moment the method is invoked on any connection produced by the ShardingSphere Driver.","triggerScenarios":"Calling Connection.abort(executor) on a ShardingSphere connection, typically from a watchdog thread or a connection pool's abnormal-connection handling.","commonSituations":"JDBC-pool implementations (e.g. custom pools, UCP) that call abort() when cleaning up stuck connections; applications implementing their own connection timeouts; monitoring agents (JDBC wrappers, profilers) that probe abort support during startup.","solutions":["Let the connection be closed normally with Connection.close(), which ShardingSphere fully supports, instead of abort().","Configure the surrounding connection pool to use close()/isValid-based eviction rather than abort-based eviction.","If a hard kill is truly required, close the underlying real connections obtained via unwrap(), accepting that ShardingSphere's metadata about them becomes stale."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"boolean supportsOp = false;\ntry {\n    connection.getMetaData(); // connection is alive\n    // JDBC has no capability flag for individual methods; probe once per JVM:\n    supportsOp = probeSupport(connection); // reflective/one-time guarded call\n} catch (final SQLException ignored) {\n}\n// Simpler and recommended: capability-check by driver URL\nboolean isShardingSphere = url.startsWith(\"jdbc:shardingsphere:\");\nif (isShardingSphere) {\n    // skip the unsupported call, use the alternative API path\n}","typeGuard":null,"tryCatchPattern":"try {\n    connection.abort(/* args */);\n} catch (final SQLFeatureNotSupportedException e) {\n    // expected on ShardingSphere connections: fall back to supported API\n    log.debug(\"Driver does not support abort, using fallback\", e);\n}","preventionTips":["Configure pool eviction to use close() and isValid(), never abort(), when the pool fronts a ShardingSphere DataSource.","Check the JDBC URL before calling optional JDBC 4 methods: connections starting with jdbc:shardingsphere: never support the lob/network-timeout/client-info/callable APIs.","Catch java.sql.SQLFeatureNotSupportedException (parent of ShardingSphere's UnsupportedSQLOperationException) around optional driver-capability calls so the application degrades gracefully."],"tags":["jdbc","shardingsphere","unsupported-operation","connection-api"],"backgroundTag":null,"analyzedSha":"e952770a215630a3659c75d64369168cd3e26b82","analyzedAt":"2026-08-14T13:54:53.392Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}