This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch past-M2 in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit ddefab0610641fa3b9b293984e83f567b6ddc68a Author: Andrus Adamchik <[email protected]> AuthorDate: Sun Jun 14 16:59:24 2026 -0400 Pkgenerator methods should not throw checked exceptions --- .../java/org/apache/cayenne/dba/JdbcPkGenerator.java | 18 ++++++++++-------- .../main/java/org/apache/cayenne/dba/PkGenerator.java | 8 ++++---- .../cayenne/dba/frontbase/FrontBasePkGenerator.java | 6 +++--- .../org/apache/cayenne/dba/mysql/MySQLPkGenerator.java | 5 +++-- .../apache/cayenne/dba/oracle/OraclePkGenerator.java | 12 ++++++++---- .../cayenne/dba/sqlserver/SQLServerPkGenerator.java | 6 ++++-- .../apache/cayenne/dba/sybase/SybasePkGenerator.java | 9 ++++++--- 7 files changed, 38 insertions(+), 26 deletions(-) diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java b/cayenne/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java index 9e15df372..39779ebcd 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java @@ -75,7 +75,7 @@ public class JdbcPkGenerator implements PkGenerator { return this.adapter; } - public void createAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception { + public void createAutoPk(DataNode node, List<DbEntity> dbEntities) { // check if a table exists // create AUTO_PK_SUPPORT table @@ -110,7 +110,7 @@ public class JdbcPkGenerator implements PkGenerator { /** * Drops table named "AUTO_PK_SUPPORT" if it exists in the database. */ - public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception { + public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) { if (autoPkTableExists(node)) { runUpdate(node, dropAutoPkString()); } @@ -161,34 +161,36 @@ public class JdbcPkGenerator implements PkGenerator { /** * Checks if AUTO_PK_TABLE already exists in the database. */ - protected boolean autoPkTableExists(DataNode node) throws SQLException { + protected boolean autoPkTableExists(DataNode node) { try (Connection con = node.getDataSource().getConnection()) { DatabaseMetaData md = con.getMetaData(); try (ResultSet tables = md.getTables(null, null, "AUTO_PK_SUPPORT", null)) { return tables.next(); } + } catch (SQLException e) { + throw new CayenneRuntimeException("Error checking for AUTO_PK_SUPPORT table", e); } } /** * Runs JDBC update over a Connection obtained from DataNode. Returns a * number of objects returned from update. - * - * @throws SQLException in case of query failure. */ - public int runUpdate(DataNode node, String sql) throws SQLException { + public int runUpdate(DataNode node, String sql) { adapter.getJdbcEventLogger().log(sql); try (Connection con = node.getDataSource().getConnection()) { try (Statement upd = con.createStatement()) { return upd.executeUpdate(sql); } + } catch (SQLException e) { + throw new CayenneRuntimeException("Error executing PK update: %s", e, sql); } } @Override - public Object generatePk(DataNode node, DbAttribute pk, Class<?> javaType) throws Exception { + public Object generatePk(DataNode node, DbAttribute pk, Class<?> javaType) { DbEntity entity = pk.getEntity(); @@ -268,7 +270,7 @@ public class JdbcPkGenerator implements PkGenerator { * * @since 3.0 */ - protected long longPkFromDatabase(DataNode node, DbEntity entity) throws Exception { + protected long longPkFromDatabase(DataNode node, DbEntity entity) { String select = "SELECT #result('NEXT_ID' 'long' 'NEXT_ID') FROM AUTO_PK_SUPPORT " + "WHERE TABLE_NAME = '" + entity.getName() + '\''; diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/PkGenerator.java b/cayenne/src/main/java/org/apache/cayenne/dba/PkGenerator.java index a7a79222f..761435f05 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/PkGenerator.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/PkGenerator.java @@ -38,7 +38,7 @@ public interface PkGenerator { * @param dbEntities a list of entities that require primary key auto-generation * support */ - void createAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception; + void createAutoPk(DataNode node, List<DbEntity> dbEntities); /** * Returns a list of SQL strings needed to generates database objects to provide @@ -55,7 +55,7 @@ public interface PkGenerator { * @param dbEntities a list of entities whose primary key auto-generation support * should be dropped. */ - void dropAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception; + void dropAutoPk(DataNode node, List<DbEntity> dbEntities); /** * Returns SQL string needed to drop database objects associated with automatic @@ -69,7 +69,7 @@ public interface PkGenerator { * @deprecated unused by the framework that relies on {@link #generatePk(DataNode, DbAttribute, Class)} */ @Deprecated(since = "5.0", forRemoval = true) - default Object generatePk(DataNode dataNode, DbAttribute pk) throws Exception { + default Object generatePk(DataNode dataNode, DbAttribute pk) { return generatePk(dataNode, pk, null); } @@ -78,7 +78,7 @@ public interface PkGenerator { * * @since 5.0 */ - Object generatePk(DataNode dataNode, DbAttribute pk, Class<?> javaType) throws Exception; + Object generatePk(DataNode dataNode, DbAttribute pk, Class<?> javaType); /** * Install the adapter associated with current PkGenerator diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java b/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java index 6494935d1..4686f3b83 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java @@ -61,7 +61,7 @@ public class FrontBasePkGenerator extends JdbcPkGenerator { } @Override - public void createAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception { + public void createAutoPk(DataNode node, List<DbEntity> dbEntities) { // For each entity (re)set the unique counter for (DbEntity entity : dbEntities) { runUpdate(node, pkCreateString(entity.getName())); @@ -78,7 +78,7 @@ public class FrontBasePkGenerator extends JdbcPkGenerator { } @Override - public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception { + public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) { } @Override @@ -119,7 +119,7 @@ public class FrontBasePkGenerator extends JdbcPkGenerator { * @since 3.0 */ @Override - protected long longPkFromDatabase(DataNode node, DbEntity entity) throws Exception { + protected long longPkFromDatabase(DataNode node, DbEntity entity) { String template = "SELECT #result('UNIQUE' 'long') FROM " + entity.getName(); diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLPkGenerator.java b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLPkGenerator.java index c8a965360..c49ee9d84 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLPkGenerator.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/mysql/MySQLPkGenerator.java @@ -25,6 +25,7 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.Collections; +import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.DataNode; import org.apache.cayenne.dba.JdbcAdapter; import org.apache.cayenne.dba.JdbcPkGenerator; @@ -59,7 +60,7 @@ public class MySQLPkGenerator extends JdbcPkGenerator { * @since 3.0 */ @Override - protected long longPkFromDatabase(DataNode node, DbEntity entity) throws Exception { + protected long longPkFromDatabase(DataNode node, DbEntity entity) { // must work directly with JDBC connection, since we // must unlock the AUTO_PK_SUPPORT table in case of @@ -115,7 +116,7 @@ public class MySQLPkGenerator extends JdbcPkGenerator { // check errors if (exception != null) { - throw exception; + throw new CayenneRuntimeException("Error generating pk for DbEntity %s", exception, entity.getName()); } return pk; diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OraclePkGenerator.java b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OraclePkGenerator.java index 798985e1c..58b9ee789 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OraclePkGenerator.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OraclePkGenerator.java @@ -67,7 +67,7 @@ public class OraclePkGenerator extends JdbcPkGenerator { private static final String _SEQUENCE_PREFIX = "pk_"; @Override - public void createAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception { + public void createAutoPk(DataNode node, List<DbEntity> dbEntities) { List<String> sequences = getExistingSequences(node); // create needed sequences for (DbEntity dbEntity : dbEntities) { @@ -94,7 +94,7 @@ public class OraclePkGenerator extends JdbcPkGenerator { * Drops PK sequences for all specified DbEntities. */ @Override - public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception { + public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) { List<String> sequences = getExistingSequences(node); // drop obsolete sequences @@ -160,7 +160,7 @@ public class OraclePkGenerator extends JdbcPkGenerator { * @since 3.0 */ @Override - protected long longPkFromDatabase(DataNode node, DbEntity entity) throws Exception { + protected long longPkFromDatabase(DataNode node, DbEntity entity) { DbKeyGenerator pkGenerator = entity.getPrimaryKeyGenerator(); String pkGeneratingSequenceName; @@ -183,6 +183,8 @@ public class OraclePkGenerator extends JdbcPkGenerator { return rs.getLong(1); } } + } catch (SQLException e) { + throw new CayenneRuntimeException("Error generating pk for DbEntity %s", e, entity.getName()); } } @@ -229,7 +231,7 @@ public class OraclePkGenerator extends JdbcPkGenerator { * Fetches a list of existing sequences that might match Cayenne generated * ones. */ - protected List<String> getExistingSequences(DataNode node) throws SQLException { + protected List<String> getExistingSequences(DataNode node) { // check existing sequences try (Connection con = node.getDataSource().getConnection()) { @@ -248,6 +250,8 @@ public class OraclePkGenerator extends JdbcPkGenerator { return sequenceList; } } + } catch (SQLException e) { + throw new CayenneRuntimeException("Error fetching existing sequences", e); } } } diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerPkGenerator.java b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerPkGenerator.java index 5dd23a2e4..3982d4d47 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerPkGenerator.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerPkGenerator.java @@ -105,7 +105,7 @@ public class SQLServerPkGenerator extends OraclePkGenerator { } @Override - public Object generatePk(DataNode node, DbAttribute pk, Class<?> javaType) throws Exception { + public Object generatePk(DataNode node, DbAttribute pk, Class<?> javaType) { DbEntity entity = pk.getEntity(); //check key on UNIQUEIDENTIFIER; UNIQUEIDENTIFIER is a character with a length of 36 @@ -139,7 +139,7 @@ public class SQLServerPkGenerator extends OraclePkGenerator { } } - protected String guidPkFromDatabase(DataNode node, DbEntity entity) throws SQLException { + protected String guidPkFromDatabase(DataNode node, DbEntity entity) { try (Connection con = node.getDataSource().getConnection()) { try (Statement st = con.createStatement()) { adapter.getJdbcEventLogger().log(SELECT_NEW_GUID); @@ -150,6 +150,8 @@ public class SQLServerPkGenerator extends OraclePkGenerator { return rs.getString(1); } } + } catch (SQLException e) { + throw new CayenneRuntimeException("Error generating pk for DbEntity %s", e, entity.getName()); } } } diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java index 91c7ed0e9..a099d53f5 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java @@ -30,6 +30,7 @@ import org.apache.cayenne.tx.Transaction; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; +import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @@ -98,7 +99,7 @@ public class SybasePkGenerator extends JdbcPkGenerator { * node that provides access to a DataSource. */ @Override - public void createAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception { + public void createAutoPk(DataNode node, List<DbEntity> dbEntities) { super.createAutoPk(node, dbEntities); runUpdate(node, safePkProcDrop()); runUpdate(node, unsafePkProcCreate()); @@ -138,7 +139,7 @@ public class SybasePkGenerator extends JdbcPkGenerator { * node that provides access to a DataSource. */ @Override - public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception { + public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) { runUpdate(node, safePkProcDrop()); runUpdate(node, safePkTableDrop()); } @@ -155,7 +156,7 @@ public class SybasePkGenerator extends JdbcPkGenerator { * @since 3.0 */ @Override - protected long longPkFromDatabase(DataNode node, DbEntity entity) throws Exception { + protected long longPkFromDatabase(DataNode node, DbEntity entity) { // handle CAY-588 - get connection that is separate from the connection // in the current transaction. @@ -187,6 +188,8 @@ public class SybasePkGenerator extends JdbcPkGenerator { + ", no result set from stored procedure.", entity.getName()); } } + } catch (SQLException e) { + throw new CayenneRuntimeException("Error generating pk for DbEntity %s", e, entity.getName()); } finally { BaseTransaction.bindThreadTransaction(transaction); }
