IMO, open cursors across commits and holding cursors across commits mean one and the same thing for Derby. But what is unclear to me is the description of return value of DatabaseMetaData.supportsOpenCursorsAcrossCommit in the JDBC api.
The JDBC api says following
boolean supportsOpenCursorsAcrossCommit() throws SQLExceptionRetrieves whether this database supports keeping cursors open across commits.
true if cursors always remain open; false if they might not remain open
SQLException - if a database access error occurs
A ResultSet object maintains a cursor pointing to its current row of data. Derby will keep the cursor open across commit if the ResultSet object's holdability is set to HOLD_CURSORS_OVER_COMMIT. If the ResultSet object's holdability is set to CLOSE_CURSORS_AT_COMMIT, the cursor will be closed when the transaction is committed. So, in Derby, whether a cursor stays open or closed across commit depends on the holdability of the ResultSet object. Does it then mean from the above api description that supportsOpenCursorsAcrossCommit() should return false in Derby?
If that is the conclusion, then there is no bug with current implementation of supportsOpenCursorsAcrossCommit().