From 4e9967314840bff3a1b2e35c9566f78f1b7c3e72 Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Mon, 5 Oct 2026 06:59:58 -0400 Subject: [PATCH 1/3] NO-JIRA adding parameters on one-test.sh --- scripts/one-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/one-test.sh b/scripts/one-test.sh index 97109439d1d8..c5278e2ca0c8 100755 --- a/scripts/one-test.sh +++ b/scripts/one-test.sh @@ -16,4 +16,4 @@ # specific language governing permissions and limitations # under the License. -mvn -Ptests -Pactivemq5-unit-tests -DfailIfNoTests=false -DskipStyleCheck=true -Dmaven.test.redirectTestOutputToFile=false -DskipPerformanceTests=false -DskipSoakTests=false -Dtest=$1 test +mvn -Ptests -Pactivemq5-unit-tests -DfailIfNoTests=false -DskipStyleCheck=true -Dmaven.test.redirectTestOutputToFile=false -DskipPerformanceTests=false -DskipSoakTests=false -Dtest=$1 test "${@:2}" From 239a6f52548828c15ae03df77be00e17e6da18b5 Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Fri, 2 Oct 2026 10:50:48 -0400 Subject: [PATCH 2/3] ARTEMIS-6283 Replacing Derby by HSQL for our testsuite --- .github/dependabot.yml | 2 - .../activemq/artemis/cli/commands/Create.java | 2 +- .../cli/commands/etc/database-store.txt | 2 +- .../config/ActiveMQDefaultConfiguration.java | 6 +-- artemis-jdbc-store/pom.xml | 9 +--- .../store/drivers/JDBCConnectionProvider.java | 30 ------------ .../jdbc/store/journal/JDBCJournalImpl.java | 20 ++++++-- .../jdbc/store/sql/PropertySQLProvider.java | 3 +- .../src/main/resources/journal-sql.properties | 9 ++-- .../file/JDBCSequentialFileFactoryTest.java | 29 +++++------ .../JDBCJournalLoaderCallbackTest.java | 10 ---- artemis-pom/pom.xml | 13 ++--- artemis-server/pom.xml | 9 +--- .../impl/AbstractConfigurationFullTest.java | 4 +- .../impl/HAPolicyConfigurationTest.java | 2 +- .../server/impl/jdbc/JdbcNodeManagerTest.java | 4 -- .../artemis/tests/util/ServerTestBase.java | 30 ++++++------ ...ationTest-xinclude-schema-config-store.xml | 4 +- .../test/resources/broker-full-config.json | 4 +- .../test/resources/broker-full-config.yaml | 4 +- .../test/resources/database-store-config.xml | 4 +- .../database-store-no-hapolicy-config.xml | 4 +- ...database-store-with-data-source-config.xml | 4 +- .../artemis/tests/util/DBSupportUtil.java | 48 ++++++++----------- docs/user-manual/persistence.adoc | 10 ++-- pom.xml | 2 +- tests/activemq5-unit-tests/pom.xml | 9 +--- .../apache/activemq/ClientTestSupport.java | 4 +- .../java/org/apache/activemq/TestSupport.java | 6 +-- .../artemis/tests/util/ActiveMQTestBase.java | 30 ++++++------ tests/db-tests/README.md | 6 +-- tests/db-tests/pom.xml | 35 ++++++-------- .../activemq/artemis/tests/db/DropDBTest.java | 6 +-- .../artemis/tests/db/common/Database.java | 13 +++-- .../tests/db/common/ParameterDBTestBase.java | 14 +++--- .../artemis/tests/db/paging/PageSizeTest.java | 3 +- .../paging/RealServerDatabasePagingTest.java | 2 +- tests/integration-tests/pom.xml | 9 +--- .../jdbc/store/journal/JDBCJournalTest.java | 2 - .../integration/xa/BasicXaRecoveryTest.java | 2 +- tests/stress-tests/pom.xml | 10 +--- 41 files changed, 167 insertions(+), 252 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d0d95c0c8f81..3232c90cef06 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -21,8 +21,6 @@ updates: interval: "daily" ignore: # Ignore all these until we move to JDK >= 21 - - dependency-name: 'org.apache.derby:*' - versions: '>= 10.16' - dependency-name: 'com.puppycrawl.tools:*' versions: '>= 13' diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java index e533ac739fe8..44c6f7965271 100644 --- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java +++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java @@ -706,7 +706,7 @@ public Object run(ActionContext context) throws Exception { if (jdbc) { if (jdbcURL == null) { - jdbcURL = "jdbc:derby:" + getInstance().getAbsolutePath() + "/data/derby/db;create=true"; + jdbcURL = "jdbc:hsqldb:file:" + getInstance().getAbsolutePath() + "/data/hsqldb/db"; } filters.put("${jdbcBindings}", jdbcBindings); filters.put("${jdbcMessages}", jdbcMessages); diff --git a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/database-store.txt b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/database-store.txt index 0b0cbff402c4..b8d2718ff5c5 100644 --- a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/database-store.txt +++ b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/database-store.txt @@ -3,7 +3,7 @@ + We don't endorse any specific JDBC provider. HSQLDB is provided by default for demonstration purposes. --> ${jdbcClassName} ${jdbcURL} ${jdbcMessages} diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java index 80801e8f2d82..ef752b4087bf 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java @@ -464,11 +464,11 @@ public static String getDefaultHapolicyBackupStrategy() { // Which store type to use, options are FILE or DATABASE, FILE is default. private static String DEFAULT_STORE_TYPE = "FILE"; - // Default database url. Derby database is used by default. + // Default database url. HSQLDB is used by default. private static String DEFAULT_DATABASE_URL = null; - // Default JDBC Driver class name, derby by default just for demo purposes - private static String DEFAULT_JDBC_DRIVER_CLASS_NAME = "org.apache.derby.jdbc.EmbeddedDriver"; + // Default JDBC Driver class name, HSQLDB by default just for demo purposes + private static String DEFAULT_JDBC_DRIVER_CLASS_NAME = "org.hsqldb.jdbc.JDBCDriver"; // Default JDBC Driver class name. DBCP2 BasicDataSource is used by default. private static String DEFAULT_JDBC_DATA_SOURCE_CLASS_NAME = "org.apache.commons.dbcp2.BasicDataSource"; diff --git a/artemis-jdbc-store/pom.xml b/artemis-jdbc-store/pom.xml index 6d09ffc8e4ea..5055295218b2 100644 --- a/artemis-jdbc-store/pom.xml +++ b/artemis-jdbc-store/pom.xml @@ -65,13 +65,8 @@ - org.apache.derby - derby - test - - - org.apache.derby - derbytools + org.hsqldb + hsqldb test diff --git a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/JDBCConnectionProvider.java b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/JDBCConnectionProvider.java index 95d250c03f6f..a9d6323050f8 100644 --- a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/JDBCConnectionProvider.java +++ b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/JDBCConnectionProvider.java @@ -18,13 +18,10 @@ import javax.sql.DataSource; import java.sql.Connection; -import java.sql.DriverManager; import java.sql.SQLException; import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicBoolean; import org.apache.activemq.artemis.jdbc.store.logging.LoggingConnection; -import org.apache.activemq.artemis.jdbc.store.sql.PropertySQLProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.invoke.MethodHandles; @@ -50,7 +47,6 @@ public JDBCConnectionProvider(DataSource dataSource, String user, String passwor this.supportNetworkTimeout = true; this.user = user; this.password = password; - addDerbyShutdownHook(); } public synchronized Connection getConnection() throws SQLException { @@ -91,32 +87,6 @@ public synchronized Connection getConnection() throws SQLException { return connection; } - private static AtomicBoolean shutAdded = new AtomicBoolean(false); - - private static class ShutdownDerby extends Thread { - @Override - public void run() { - try { - DriverManager.getConnection("jdbc:derby:;shutdown=true"); - } catch (Exception e) { } - } - - } - - public void addDerbyShutdownHook() { - // Shutdown the derby if using the derby embedded driver. - try (Connection connection = getConnection()) { - PropertySQLProvider.Factory.SQLDialect sqlDialect = PropertySQLProvider.Factory.investigateDialect(connection); - if (sqlDialect == PropertySQLProvider.Factory.SQLDialect.DERBY) { - if (shutAdded.compareAndSet(false, true)) { - Runtime.getRuntime().addShutdownHook(new ShutdownDerby()); - } - } - } catch (SQLException e) { - logger.error(JDBCUtils.appendSQLExceptionDetails(new StringBuilder(), e).toString()); - } - } - public int getNetworkTimeoutMillis() { return networkTimeoutMillis; } diff --git a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/journal/JDBCJournalImpl.java b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/journal/JDBCJournalImpl.java index af1ac7b73796..4c49f0518d35 100644 --- a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/journal/JDBCJournalImpl.java +++ b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/journal/JDBCJournalImpl.java @@ -223,6 +223,9 @@ public synchronized int sync() { connection.setAutoCommit(false); + boolean batchInsertRecord = false; + boolean batchDeleteRecord = false; + boolean batchRollbackRecord = false; for (JDBCJournalRecord record : recordRef) { logger.trace("sync::preparing JDBC statement for {}", record); @@ -232,11 +235,13 @@ public synchronized int sync() { // Standard SQL Delete Record, Non transactional delete deletedRecords.add(record.getId()); record.writeDeleteRecord(deleteJournalRecords); + batchDeleteRecord = true; break; case JDBCJournalRecord.ROLLBACK_RECORD: // Roll back we remove all records associated with this TX ID. This query is always performed last. deleteJournalTxRecords.setLong(1, record.getTxId()); deleteJournalTxRecords.addBatch(); + batchRollbackRecord = true; break; case JDBCJournalRecord.COMMIT_RECORD: // We perform all the deletes and add the commit record in the same Database TX @@ -246,20 +251,29 @@ public synchronized int sync() { deletedRecords.add(info.id); deleteJournalRecords.setLong(1, info.id); deleteJournalRecords.addBatch(); + batchDeleteRecord = true; } record.writeRecord(insertJournalRecords); + batchInsertRecord = true; committedTransactions.add(record.getTxId()); break; default: // Default we add a new record to the DB record.writeRecord(insertJournalRecords); + batchInsertRecord = true; break; } } - insertJournalRecords.executeBatch(); - deleteJournalRecords.executeBatch(); - deleteJournalTxRecords.executeBatch(); + if (batchInsertRecord) { + insertJournalRecords.executeBatch(); + } + if (batchDeleteRecord) { + deleteJournalRecords.executeBatch(); + } + if (batchRollbackRecord) { + deleteJournalTxRecords.executeBatch(); + } connection.commit(); logger.trace("JDBC commit worked"); diff --git a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/sql/PropertySQLProvider.java b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/sql/PropertySQLProvider.java index ccf7caf6d2fb..126055799547 100644 --- a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/sql/PropertySQLProvider.java +++ b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/sql/PropertySQLProvider.java @@ -328,10 +328,9 @@ public static final class Factory implements SQLProvider.Factory { public enum SQLDialect { ORACLE("oracle", "oracle"), POSTGRESQL("postgresql", "postgres"), - DERBY("derby", "derby"), + HSQL("hsql", "hsql", "hypersonic"), MYSQL("mysql", "mysql", "mariadb"), DB2("db2", "db2"), - HSQL("hsql", "hsql", "hypersonic"), H2("h2", "h2"), MSSQL("mssql", "microsoft"), SYBASE("jconnect", "jconnect"); diff --git a/artemis-jdbc-store/src/main/resources/journal-sql.properties b/artemis-jdbc-store/src/main/resources/journal-sql.properties index a0958e3bb8fd..bc152e20d3c8 100644 --- a/artemis-jdbc-store/src/main/resources/journal-sql.properties +++ b/artemis-jdbc-store/src/main/resources/journal-sql.properties @@ -57,11 +57,10 @@ close-connection-on-shutdown=true # none|lower|upper table-names-case=none -# Derby SQL statements -close-connection-on-shutdown.derby=false -create-file-table.derby=CREATE TABLE %s (ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),FILENAME VARCHAR(255), EXTENSION VARCHAR(10), DATA BLOB, PRIMARY KEY(ID)) -max-blob-size.derby=2147483647 -table-names-case.derby=upper +# HSQLDB SQL statements +create-file-table.hsql=CREATE TABLE IF NOT EXISTS %s (ID BIGINT GENERATED BY DEFAULT AS IDENTITY,FILENAME VARCHAR(255), EXTENSION VARCHAR(10), DATA BLOB, PRIMARY KEY(ID)) +max-blob-size.hsql=2147483647 +table-names-case.hsql=upper # PostgreSQL SQL statements create-file-table.postgresql=CREATE TABLE %s (ID BIGSERIAL, FILENAME VARCHAR(255), EXTENSION VARCHAR(10), DATA OID, PRIMARY KEY(ID)) diff --git a/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFileFactoryTest.java b/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFileFactoryTest.java index ea34283f8253..e0526637b836 100644 --- a/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFileFactoryTest.java +++ b/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFileFactoryTest.java @@ -22,7 +22,6 @@ import static org.junit.jupiter.api.Assertions.fail; import java.nio.ByteBuffer; -import java.sql.DriverManager; import java.sql.SQLException; import java.util.Arrays; import java.util.Collection; @@ -52,8 +51,9 @@ import org.apache.activemq.artemis.tests.extensions.parameterized.Parameter; import org.apache.activemq.artemis.tests.extensions.parameterized.Parameters; import org.apache.activemq.artemis.tests.util.ArtemisTestCase; +import org.apache.activemq.artemis.tests.util.DBSupportUtil; import org.apache.activemq.artemis.utils.ActiveMQThreadFactory; -import org.apache.derby.jdbc.EmbeddedDriver; +import org.hsqldb.jdbc.JDBCDriver; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.TestTemplate; @@ -62,7 +62,7 @@ @ExtendWith(ParameterizedTestExtension.class) public class JDBCSequentialFileFactoryTest extends ArtemisTestCase { - private static String className = EmbeddedDriver.class.getCanonicalName(); + private static String className = JDBCDriver.class.getCanonicalName(); private JDBCSequentialFileFactory factory; @@ -89,12 +89,13 @@ public void setup() throws Exception { if (useAuthentication) { user = "testuser"; password = "testpassword"; - System.setProperty("derby.connection.requireAuthentication", "true"); - System.setProperty("derby.user." + user, password); dataSourceProperties.put("username", user); dataSourceProperties.put("password", password); + } else { + dataSourceProperties.put("username", "SA"); + dataSourceProperties.put("password", ""); } - dataSourceProperties.put("url", "jdbc:derby:target/data;create=true"); + dataSourceProperties.put("url", "jdbc:hsqldb:mem:filetest"); dataSourceProperties.put("driverClassName", className); String tableName = "FILES"; String jdbcDatasourceClass = ActiveMQDefaultConfiguration.getDefaultDataSourceClassName(); @@ -110,23 +111,17 @@ public void tearDown() throws Exception { scheduledExecutorService.shutdown(); factory.destroy(); } finally { - shutdownDerby(); + shutdownHSQL(); } } - private void shutdownDerby() { + private void shutdownHSQL() { try { - if (useAuthentication) { - DriverManager.getConnection("jdbc:derby:;shutdown=true", user, password); - } else { - DriverManager.getConnection("jdbc:derby:;shutdown=true"); - } + String hsqlUser = useAuthentication ? user : "SA"; + String hsqlPassword = useAuthentication ? password : ""; + DBSupportUtil.shutdownHSQL("jdbc:hsqldb:mem:filetest", hsqlUser, hsqlPassword); } catch (Exception ignored) { } - if (useAuthentication) { - System.clearProperty("derby.connection.requireAuthentication"); - System.clearProperty("derby.user." + user); - } } @TestTemplate diff --git a/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/store/journal/JDBCJournalLoaderCallbackTest.java b/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/store/journal/JDBCJournalLoaderCallbackTest.java index 9764481d26e1..2e0257f9b23c 100644 --- a/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/store/journal/JDBCJournalLoaderCallbackTest.java +++ b/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/store/journal/JDBCJournalLoaderCallbackTest.java @@ -19,7 +19,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import java.sql.DriverManager; import java.util.ArrayList; import java.util.List; @@ -27,7 +26,6 @@ import org.apache.activemq.artemis.core.journal.RecordInfo; import org.apache.activemq.artemis.core.journal.TransactionFailureCallback; import org.apache.activemq.artemis.tests.util.ArtemisTestCase; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; public class JDBCJournalLoaderCallbackTest extends ArtemisTestCase { @@ -51,12 +49,4 @@ public void testAddDeleteRecord() throws Exception { assertTrue(committedRecords.isEmpty()); } - @AfterEach - public void shutdownDerby() { - try { - DriverManager.getConnection("jdbc:derby:;shutdown=true"); - } catch (Exception ignored) { - } - } - } diff --git a/artemis-pom/pom.xml b/artemis-pom/pom.xml index 3094d8f0e3f3..a0e345a96563 100644 --- a/artemis-pom/pom.xml +++ b/artemis-pom/pom.xml @@ -123,16 +123,11 @@ - org.apache.derby - derby - ${apache.derby.version} - test - - - org.apache.derby - derbytools - ${apache.derby.version} + org.hsqldb + hsqldb + ${hsqldb.version} test + org.eclipse.paho diff --git a/artemis-server/pom.xml b/artemis-server/pom.xml index e531803c838f..0ea7acb49b74 100644 --- a/artemis-server/pom.xml +++ b/artemis-server/pom.xml @@ -245,13 +245,8 @@ - org.apache.derby - derby - test - - - org.apache.derby - derbytools + org.hsqldb + hsqldb test diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AbstractConfigurationFullTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AbstractConfigurationFullTest.java index 3632565e2908..423350308301 100644 --- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AbstractConfigurationFullTest.java +++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/AbstractConfigurationFullTest.java @@ -517,8 +517,8 @@ public void testStoreConfiguration() { assertEquals("FULL_LARGE_MESSAGES", dbStore.getLargeMessageTableName()); assertEquals("FULL_PAGE_STORE", dbStore.getPageStoreTableName()); assertEquals("FULL_NODE_MANAGER", dbStore.getNodeManagerStoreTableName()); - assertEquals("jdbc:derby:target/full-test-store;create=true", dbStore.getJdbcConnectionUrl()); - assertEquals("org.apache.derby.jdbc.EmbeddedDriver", dbStore.getJdbcDriverClassName()); + assertEquals("jdbc:hsqldb:mem:full-test-store", dbStore.getJdbcConnectionUrl()); + assertEquals("org.hsqldb.jdbc.JDBCDriver", dbStore.getJdbcDriverClassName()); assertEquals(30000, dbStore.getJdbcNetworkTimeout()); assertEquals(3000, dbStore.getJdbcLockRenewPeriodMillis()); assertEquals(20000, dbStore.getJdbcLockExpirationMillis()); diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java index f6c51c7ef27d..e9c69881cfd3 100644 --- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java +++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java @@ -70,7 +70,7 @@ public class HAPolicyConfigurationTest extends ServerTestBase { public void tearDown() throws Exception { super.tearDown(); - shutdownDerby(); + shutdownEmbeddedDatabases(); } @Test diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcNodeManagerTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcNodeManagerTest.java index f08486296e6c..0c451d0885ff 100644 --- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcNodeManagerTest.java +++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcNodeManagerTest.java @@ -45,10 +45,6 @@ public static Collection data() { @BeforeEach public void configure() { - if (useAuthentication) { - System.setProperty("derby.connection.requireAuthentication", "true"); - System.setProperty("derby.user." + getJDBCUser(), getJDBCPassword()); - } dbConf = createDefaultDatabaseStorageConfiguration(); dbConf.setJdbcUser(getJDBCUser()); dbConf.setJdbcPassword(getJDBCPassword()); diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ServerTestBase.java b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ServerTestBase.java index 0fcb87d9c872..ae347c024735 100644 --- a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ServerTestBase.java +++ b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ServerTestBase.java @@ -266,14 +266,14 @@ protected ConfigurationImpl createBasicConfig(final int serverID) { return configuration; } - private boolean derbyDropped = false; + private boolean embeddedDBDropped = false; - protected void dropDerby() throws Exception { - DBSupportUtil.dropDerbyDatabase(getJDBCUser(), getJDBCPassword(), getEmbeddedDataBaseName()); + protected void dropEmbeddedDatabases() throws Exception { + DBSupportUtil.dropHSQLDatabase(getTestJDBCConnectionUrl(), getJDBCUser(), getJDBCPassword()); } - protected void shutdownDerby() throws SQLException { - DBSupportUtil.shutdownDerby(getJDBCUser(), getJDBCPassword()); + protected void shutdownEmbeddedDatabases() throws SQLException { + DBSupportUtil.shutdownHSQL(getTestJDBCConnectionUrl(), getJDBCUser(), getJDBCPassword()); } protected DatabaseStorageConfiguration createDefaultDatabaseStorageConfiguration() { @@ -282,14 +282,14 @@ protected DatabaseStorageConfiguration createDefaultDatabaseStorageConfiguration /* * The connectionURI could be passed into the testsuite as a system property (say you are testing against Oracle). - * So, we only schedule the drop on Derby if we are using a derby memory database + * So, we only schedule the drop on HSQL if we are using an HSQL in-memory database */ - if (connectionURI.contains("derby") && connectionURI.contains("memory") && !derbyDropped) { + if (connectionURI.contains("hsqldb") && connectionURI.contains("mem") && !embeddedDBDropped) { // some tests will reinitialize the server and call this method more than one time // and we should only schedule one task - derbyDropped = true; - runAfterEx(this::dropDerby); - runAfterEx(this::shutdownDerby); + embeddedDBDropped = true; + runAfterEx(this::dropEmbeddedDatabases); + runAfterEx(this::shutdownEmbeddedDatabases); } dbStorageConfiguration.setJdbcConnectionUrl(connectionURI); dbStorageConfiguration.setBindingsTableName("BINDINGS"); @@ -348,23 +348,23 @@ protected final File getTestDirfile() { } protected String getEmbeddedDataBaseName() { - return "memory:" + getTestDir(); + return getTestDir(); } protected String getTestJDBCConnectionUrl() { - return System.getProperty("jdbc.connection.url", "jdbc:derby:" + getEmbeddedDataBaseName() + ";create=true"); + return System.getProperty("jdbc.connection.url", "jdbc:hsqldb:mem:" + getEmbeddedDataBaseName()); } protected String getJDBCClassName() { - return System.getProperty("jdbc.driver.class", "org.apache.derby.jdbc.EmbeddedDriver"); + return System.getProperty("jdbc.driver.class", "org.hsqldb.jdbc.JDBCDriver"); } protected String getJDBCUser() { - return System.getProperty("jdbc.user", null); + return System.getProperty("jdbc.user", "SA"); } protected String getJDBCPassword() { - return System.getProperty("jdbc.password", null); + return System.getProperty("jdbc.password", ""); } protected final void clearDataRecreateServerDirs() { diff --git a/artemis-server/src/test/resources/ConfigurationTest-xinclude-schema-config-store.xml b/artemis-server/src/test/resources/ConfigurationTest-xinclude-schema-config-store.xml index 9b8ed9c4849c..29d8cfc39d70 100644 --- a/artemis-server/src/test/resources/ConfigurationTest-xinclude-schema-config-store.xml +++ b/artemis-server/src/test/resources/ConfigurationTest-xinclude-schema-config-store.xml @@ -16,13 +16,13 @@ --> - jdbc:derby:target/derby/database-store;create=true + jdbc:hsqldb:mem:database-store 5493dd76567ee5ec269d11823973462f 56a0db3b71043054269d11823973462f BINDINGS_TABLE MESSAGE_TABLE LARGE_MESSAGE_TABLE PAGE_STORE_TABLE - org.apache.derby.jdbc.EmbeddedDriver + org.hsqldb.jdbc.JDBCDriver diff --git a/artemis-server/src/test/resources/broker-full-config.json b/artemis-server/src/test/resources/broker-full-config.json index b09486aec928..d19883003b1b 100644 --- a/artemis-server/src/test/resources/broker-full-config.json +++ b/artemis-server/src/test/resources/broker-full-config.json @@ -376,8 +376,8 @@ "largeMessageTableName": "FULL_LARGE_MESSAGES", "pageStoreTableName": "FULL_PAGE_STORE", "nodeManagerStoreTableName": "FULL_NODE_MANAGER", - "jdbcConnectionUrl": "jdbc:derby:target/full-test-store;create=true", - "jdbcDriverClassName": "org.apache.derby.jdbc.EmbeddedDriver", + "jdbcConnectionUrl": "jdbc:hsqldb:mem:full-test-store", + "jdbcDriverClassName": "org.hsqldb.jdbc.JDBCDriver", "jdbcNetworkTimeout": 30000, "jdbcLockRenewPeriodMillis": 3000, "jdbcLockExpirationMillis": 20000 diff --git a/artemis-server/src/test/resources/broker-full-config.yaml b/artemis-server/src/test/resources/broker-full-config.yaml index 2c4a3ac1505c..b3a3f521df20 100644 --- a/artemis-server/src/test/resources/broker-full-config.yaml +++ b/artemis-server/src/test/resources/broker-full-config.yaml @@ -348,8 +348,8 @@ storeConfiguration: largeMessageTableName: "FULL_LARGE_MESSAGES" pageStoreTableName: "FULL_PAGE_STORE" nodeManagerStoreTableName: "FULL_NODE_MANAGER" - jdbcConnectionUrl: "jdbc:derby:target/full-test-store;create=true" - jdbcDriverClassName: "org.apache.derby.jdbc.EmbeddedDriver" + jdbcConnectionUrl: "jdbc:hsqldb:mem:full-test-store" + jdbcDriverClassName: "org.hsqldb.jdbc.JDBCDriver" jdbcNetworkTimeout: 30000 jdbcLockRenewPeriodMillis: 3000 jdbcLockExpirationMillis: 20000 diff --git a/artemis-server/src/test/resources/database-store-config.xml b/artemis-server/src/test/resources/database-store-config.xml index 47fd81d0658c..4cb597ba3e7e 100644 --- a/artemis-server/src/test/resources/database-store-config.xml +++ b/artemis-server/src/test/resources/database-store-config.xml @@ -21,14 +21,14 @@ - jdbc:derby:target/derby/database-store;create=true + jdbc:hsqldb:mem:database-store ENC(5493dd76567ee5ec269d11823973462f) ENC(56a0db3b71043054269d11823973462f) BINDINGS_TABLE MESSAGE_TABLE LARGE_MESSAGE_TABLE PAGE_STORE_TABLE - org.apache.derby.jdbc.EmbeddedDriver + org.hsqldb.jdbc.JDBCDriver diff --git a/artemis-server/src/test/resources/database-store-no-hapolicy-config.xml b/artemis-server/src/test/resources/database-store-no-hapolicy-config.xml index 61a6a84ea9e8..f60fa192f05a 100644 --- a/artemis-server/src/test/resources/database-store-no-hapolicy-config.xml +++ b/artemis-server/src/test/resources/database-store-no-hapolicy-config.xml @@ -21,12 +21,12 @@ - jdbc:derby:target/derby/database-store;create=true + jdbc:hsqldb:mem:database-store BINDINGS MESSAGE LARGE_MESSAGE PAGE_STORE - org.apache.derby.jdbc.EmbeddedDriver + org.hsqldb.jdbc.JDBCDriver diff --git a/artemis-server/src/test/resources/database-store-with-data-source-config.xml b/artemis-server/src/test/resources/database-store-with-data-source-config.xml index fc03a75eb0ca..f009fe8acb77 100644 --- a/artemis-server/src/test/resources/database-store-with-data-source-config.xml +++ b/artemis-server/src/test/resources/database-store-with-data-source-config.xml @@ -23,8 +23,8 @@ - - + + diff --git a/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/util/DBSupportUtil.java b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/util/DBSupportUtil.java index 8de1ea79bf25..baf7ced2ac72 100644 --- a/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/util/DBSupportUtil.java +++ b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/util/DBSupportUtil.java @@ -17,8 +17,10 @@ package org.apache.activemq.artemis.tests.util; import java.lang.invoke.MethodHandles; +import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; +import java.sql.Statement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,38 +28,30 @@ public class DBSupportUtil { private static Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - public static final String EXPECTED_DERBY_DROP_STATE = "08006"; - public static final String EXPECTED_DERBY_SHUTDOWN_STATE = "XJ015"; - - public static void dropDerbyDatabase(String user, String password, String databaseName) throws SQLException { - try { - if (user == null) { - DriverManager.getConnection("jdbc:derby:" + databaseName + ";drop=true"); - } else { - DriverManager.getConnection("jdbc:derby:" + databaseName + ";drop=true", user, password); - } + public static void dropHSQLDatabase(String connectionUrl, String user, String password) throws SQLException { + logger.debug("dropHSQLDatabase on {}", connectionUrl); + try (Connection connection = getConnection(connectionUrl, user, password); + Statement statement = connection.createStatement()) { + statement.execute("DROP SCHEMA PUBLIC CASCADE"); } catch (SQLException sqlE) { - if (!sqlE.getSQLState().equals(EXPECTED_DERBY_DROP_STATE)) { - logger.warn("{} / {}", sqlE.getMessage(), sqlE.getSQLState()); - throw sqlE; - } else { - logger.info("{} / {}", sqlE.getMessage(), sqlE.getSQLState()); - } + logger.debug("{} / {}", sqlE.getMessage(), sqlE.getSQLState(), sqlE); } } - public static void shutdownDerby(String user, String password) throws SQLException { - try { - if (user == null) { - DriverManager.getConnection("jdbc:derby:;shutdown=true;deregister=false"); - } else { - DriverManager.getConnection("jdbc:derby:;shutdown=true;deregister=false", user, password); - } + public static void shutdownHSQL(String connectionUrl, String user, String password) throws SQLException { + try (Connection connection = getConnection(connectionUrl, user, password); + Statement statement = connection.createStatement()) { + statement.execute("SHUTDOWN"); } catch (SQLException sqlE) { - logger.debug("{} / {}", sqlE.getMessage(), sqlE.getSQLState()); - if (!sqlE.getSQLState().equals(EXPECTED_DERBY_SHUTDOWN_STATE)) { - throw sqlE; - } + logger.debug("{} / {}", sqlE.getMessage(), sqlE.getSQLState(), sqlE); + } + } + + private static Connection getConnection(String connectionUrl, String user, String password) throws SQLException { + if (user == null) { + return DriverManager.getConnection(connectionUrl); + } else { + return DriverManager.getConnection(connectionUrl, user, password); } } diff --git a/docs/user-manual/persistence.adoc b/docs/user-manual/persistence.adoc index ffae8afb0026..ea4c1fc6bf7b 100644 --- a/docs/user-manual/persistence.adoc +++ b/docs/user-manual/persistence.adoc @@ -307,7 +307,7 @@ These databases are supported: . Microsoft SQL Server . Oracle . DB2 -. Apache Derby +. HSQLDB The JDBC store uses a JDBC connection to store messages and bindings data in records in database tables. The data stored in the database tables uses internal encodings. @@ -324,8 +324,8 @@ For example: ---- - org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:data/derby/database-store;create=true + org.hsqldb.jdbc.JDBCDriver + jdbc:hsqldb:file:data/hsqldb/database-store BINDINGS_TABLE MESSAGE_TABLE PAGE_TABLE @@ -403,8 +403,8 @@ It is also possible to explicitly add the user and password rather than in the J ---- - org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:data/derby/database-store;create=true + org.hsqldb.jdbc.JDBCDriver + jdbc:hsqldb:file:data/hsqldb/database-store ENC(dasfn353cewc) ENC(ucwiurfjtew345) BINDINGS_TABLE diff --git a/pom.xml b/pom.xml index 54f17f494b3f..ac4b22425c4d 100644 --- a/pom.xml +++ b/pom.xml @@ -96,7 +96,7 @@ 2.15.1 3.21.0 5.19.11 - 10.15.2.0 + 2.7.4 1.11.0 1.4.0 2.14.0 diff --git a/tests/activemq5-unit-tests/pom.xml b/tests/activemq5-unit-tests/pom.xml index 4cb5fa8e7ec7..435062bb4b98 100644 --- a/tests/activemq5-unit-tests/pom.xml +++ b/tests/activemq5-unit-tests/pom.xml @@ -92,13 +92,8 @@ - org.apache.derby - derby - test - - - org.apache.derby - derbytools + org.hsqldb + hsqldb test diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/ClientTestSupport.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/ClientTestSupport.java index 0c8de9d04ca1..aeb954a24528 100644 --- a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/ClientTestSupport.java +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/ClientTestSupport.java @@ -159,8 +159,8 @@ public static void removeMessageStore() { if (System.getProperty("activemq.store.dir") != null) { recursiveDelete(new File(System.getProperty("activemq.store.dir"))); } - if (System.getProperty("derby.system.home") != null) { - recursiveDelete(new File(System.getProperty("derby.system.home"))); + if (System.getProperty("hsqldb.system.home") != null) { + recursiveDelete(new File(System.getProperty("hsqldb.system.home"))); } } diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/TestSupport.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/TestSupport.java index c9fc26875220..1891a993db17 100644 --- a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/TestSupport.java +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/TestSupport.java @@ -126,8 +126,8 @@ public static void removeMessageStore() { if (System.getProperty("activemq.store.dir") != null) { recursiveDelete(new File(System.getProperty("activemq.store.dir"))); } - if (System.getProperty("derby.system.home") != null) { - recursiveDelete(new File(System.getProperty("derby.system.home"))); + if (System.getProperty("hsqldb.system.home") != null) { + recursiveDelete(new File(System.getProperty("hsqldb.system.home"))); } } @@ -174,7 +174,7 @@ public static PersistenceAdapter setPersistenceAdapter(BrokerService broker, switch (choice) { case JDBC: JDBCPersistenceAdapter jdbcPersistenceAdapter = new JDBCPersistenceAdapter(); - jdbcPersistenceAdapter.setUseLock(false); // rollback (at shutdown) on derby can take a long time with file io etc + jdbcPersistenceAdapter.setUseLock(false); adapter = jdbcPersistenceAdapter; break; case KahaDB: diff --git a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java index b4a0fb579785..db8c71bd94a1 100644 --- a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java +++ b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java @@ -487,14 +487,14 @@ protected void setDBStoreType(Configuration configuration) { configuration.setStoreConfiguration(createDefaultDatabaseStorageConfiguration()); } - private boolean derbyDropped = false; + private boolean embeddedDBDropped = false; - protected void dropDerby() throws Exception { - DBSupportUtil.dropDerbyDatabase(getJDBCUser(), getJDBCPassword(), getEmbeddedDataBaseName()); + protected void dropEmbeddedDatabases() throws Exception { + DBSupportUtil.dropHSQLDatabase(getTestJDBCConnectionUrl(), getJDBCUser(), getJDBCPassword()); } - protected void shutdownDerby() throws SQLException { - DBSupportUtil.shutdownDerby(getJDBCUser(), getJDBCPassword()); + protected void shutdownEmbeddedDatabases() throws SQLException { + DBSupportUtil.shutdownHSQL(getTestJDBCConnectionUrl(), getJDBCUser(), getJDBCPassword()); } protected DatabaseStorageConfiguration createDefaultDatabaseStorageConfiguration() { @@ -503,14 +503,14 @@ protected DatabaseStorageConfiguration createDefaultDatabaseStorageConfiguration /* * The connectionURI could be passed into the testsuite as a system property (say you are testing against Oracle). - * So, we only schedule the drop on Derby if we are using a derby memory database + * So, we only schedule the drop on HSQL if we are using an HSQL in-memory database */ - if (connectionURI.contains("derby") && connectionURI.contains("memory") && !derbyDropped) { + if (connectionURI.contains("hsqldb") && connectionURI.contains("mem") && !embeddedDBDropped) { // some tests will reinitialize the server and call this method more than one time // and we should only schedule one task - derbyDropped = true; - runAfterEx(this::dropDerby); - runAfterEx(this::shutdownDerby); + embeddedDBDropped = true; + runAfterEx(this::dropEmbeddedDatabases); + runAfterEx(this::shutdownEmbeddedDatabases); } dbStorageConfiguration.setJdbcConnectionUrl(connectionURI); dbStorageConfiguration.setBindingsTableName("BINDINGS"); @@ -784,23 +784,23 @@ protected final String getTestDir() { } protected String getEmbeddedDataBaseName() { - return "memory:" + getTestDir(); + return getTestDir(); } protected String getTestJDBCConnectionUrl() { - return System.getProperty("jdbc.connection.url", "jdbc:derby:" + getEmbeddedDataBaseName() + ";create=true"); + return System.getProperty("jdbc.connection.url", "jdbc:hsqldb:mem:" + getEmbeddedDataBaseName()); } protected String getJDBCClassName() { - return System.getProperty("jdbc.driver.class", "org.apache.derby.jdbc.EmbeddedDriver"); + return System.getProperty("jdbc.driver.class", "org.hsqldb.jdbc.JDBCDriver"); } protected String getJDBCUser() { - return System.getProperty("jdbc.user", null); + return System.getProperty("jdbc.user", "SA"); } protected String getJDBCPassword() { - return System.getProperty("jdbc.password", null); + return System.getProperty("jdbc.password", ""); } protected final File getTestDirfile() { diff --git a/tests/db-tests/README.md b/tests/db-tests/README.md index 41d4c032973e..ca7785a0e9c9 100644 --- a/tests/db-tests/README.md +++ b/tests/db-tests/README.md @@ -4,7 +4,7 @@ This module runs tests against selected Databases. There is one profile for each supported Database: -- DB-derby-tests +- DB-hsql-tests - DB-postgres-tests - DB-mysql-tests - DB-mssql-tests @@ -23,7 +23,7 @@ You can refer to the examples provided under `./scripts`. Please note that you a You can pass the JDBC URI as a parameter using the following supported parameters: -- `derby.uri` +- `hsql.uri` - `postgres.uri` - `mysql.uri` - `mssql.uri` @@ -44,7 +44,7 @@ Also It is recommended to the database schema allocated exclusively to this test One Artemis server is created for each supported database. After building, they will be available under ./target/${DATABASE}: -- `./target/derby` +- `./target/hsql` - `./target/postgres` - `./target/mysql` - `./target/mssql` diff --git a/tests/db-tests/pom.xml b/tests/db-tests/pom.xml index 1e6194e730b4..a94e508992d9 100644 --- a/tests/db-tests/pom.xml +++ b/tests/db-tests/pom.xml @@ -29,7 +29,7 @@ ${project.basedir}/../../ - -Dderby.load=${derby.load} -Dpostgres.load=${postgres.load} -Dpostgres.uri=${postgres.uri} + -Dhsql.load=${hsql.load} -Dpostgres.load=${postgres.load} -Dpostgres.uri=${postgres.uri} -Dpostgres.class=${postgres.class} -Dmssql.load=${mssql.load} -Dmssql.uri=${mssql.uri} -Dmssql.class=${mssql.class} -Dmysql.load=${mysql.load} -Dmysql.uri=${mysql.uri} -Dmysql.class=${mysql.class} -Ddb2.load=${db2.load} -Ddb2.class=${db2.class} -Ddb2.uri=${db2.uri} -Doracle.load=${oracle.load} @@ -39,7 +39,7 @@ -Ddistribution.lib="${activemq.basedir}/artemis-distribution/target/apache-artemis-${project.version}-bin/apache-artemis-${project.version}/lib" - false + false false jdbc:db2://localhost:50000/artemis:user=db2inst1;password=artemis; @@ -183,13 +183,8 @@ - org.apache.derby - derby - test - - - org.apache.derby - derbytools + org.hsqldb + hsqldb test @@ -230,22 +225,22 @@ test-compile - create-derby + create-hsql create -Djava.net.preferIPv4Stack=true - ${basedir}/target/derby - ${basedir}/target/classes/servers/derby + ${basedir}/target/hsql + ${basedir}/target/classes/servers/hsql true --jdbc --global-max-messages 100 --java-options - -Dartemis.extra.libs=${basedir}/target/derby/jdbc-jars + -Dartemis.extra.libs=${basedir}/target/hsql/jdbc-jars --java-options -ea @@ -253,17 +248,15 @@ test-compile - create-derby-jdbc + create-hsql-jdbc dependency-scan - org.apache.derby:derby:${apache.derby.version} - org.apache.derby:derbytools:${apache.derby.version} - org.apache.derby:derbyshared:${apache.derby.version} + org.hsqldb:hsqldb:${hsqldb.version} - ${basedir}/target/derby/jdbc-jars + ${basedir}/target/hsql/jdbc-jars @@ -441,7 +434,7 @@ true true true - true + true true @@ -487,9 +480,9 @@ - DB-derby-tests + DB-hsql-tests - true + true false diff --git a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/DropDBTest.java b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/DropDBTest.java index 07fd7b59d16e..1bfd4e43fb7d 100644 --- a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/DropDBTest.java +++ b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/DropDBTest.java @@ -44,12 +44,12 @@ public class DropDBTest extends ParameterDBTestBase { @Parameters(name = "db={0}") public static Collection parameters() { List dbList = Database.selectedList(); - dbList.remove(Database.DERBY); // no derby on this test + dbList.remove(Database.HSQL); // no HSQL on this test return convertParameters(dbList); } - // Used in @DisabledIf on class, avoids no-params failure with only -PDB-derby-tests + // Used in @DisabledIf on class, avoids no-params failure with only -PDB-hsql-tests public static boolean isNoDatabaseSelected() { return parameters().isEmpty(); } @@ -58,7 +58,7 @@ public static boolean isNoDatabaseSelected() { @Override public void setUp() throws Exception { super.setUp(); - assumeTrue(database != Database.DERBY); + assumeTrue(database != Database.HSQL); dropDatabase(); } diff --git a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/common/Database.java b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/common/Database.java index d73517d06bfa..6fe6e0f22921 100644 --- a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/common/Database.java +++ b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/common/Database.java @@ -29,7 +29,7 @@ import org.apache.activemq.artemis.utils.RandomUtil; public enum Database { - MYSQL("mysql"), POSTGRES("postgres"), ORACLE("oracle"), MSSQL("mssql"), DB2("db2"), JOURNAL("journal"), DERBY("derby"); + MYSQL("mysql"), POSTGRES("postgres"), ORACLE("oracle"), MSSQL("mssql"), DB2("db2"), JOURNAL("journal"), HSQL("hsql"); private String dbname; private boolean load; @@ -57,7 +57,7 @@ public static ClassLoader defineClassLoader(File location, ClassLoader parentCla public Connection getConnection() throws Exception { return switch (this) { - case DERBY -> DriverManager.getConnection(getJdbcURI()); + case HSQL -> DriverManager.getConnection(getJdbcURI(), "SA", ""); case JOURNAL -> null; default -> getDriver().connect(getJdbcURI(), null); }; @@ -65,7 +65,7 @@ public Connection getConnection() throws Exception { // There is one artemis server for each database we provide on the tests public ClassLoader getDBClassLoader() throws Exception { - if (this != JOURNAL && this != DERBY && dbClassLoader == null) { + if (this != JOURNAL && this != HSQL && dbClassLoader == null) { String serverLocation = ParameterDBTestBase.getServerLocation(getName()); File lib = new File(serverLocation + "/lib"); dbClassLoader = defineClassLoader(lib, getClass().getClassLoader()); @@ -80,9 +80,8 @@ public String getName() { public String getJdbcURI() { if (jdbcURI == null) { switch (this) { - case DERBY: - String derbyData = ParameterDBTestBase.getServerLocation("derby") + "/data/derby/db"; - jdbcURI = "jdbc:derby:" + derbyData + ";create=true"; + case HSQL: + jdbcURI = "jdbc:hsqldb:mem:dbtest"; break; case JOURNAL: jdbcURI = null; @@ -103,7 +102,7 @@ public String getDriverClass() { } switch (this) { - case DERBY: + case HSQL: this.driverClass = ActiveMQDefaultConfiguration.getDefaultDriverClassName(); break; case JOURNAL: diff --git a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/common/ParameterDBTestBase.java b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/common/ParameterDBTestBase.java index d572c25c29f8..3166e4228522 100644 --- a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/common/ParameterDBTestBase.java +++ b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/common/ParameterDBTestBase.java @@ -40,7 +40,7 @@ public abstract class ParameterDBTestBase extends DBTestBase { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); @Override - protected void dropDerby() throws Exception { + protected void dropEmbeddedDatabases() throws Exception { cleanupData(database.getName()); } @@ -79,8 +79,8 @@ public void checkPostgres() throws Exception { public void setUp() throws Exception { super.setUp(); disableCheckThread(); - if (database == Database.DERBY) { - runAfter(this::shutdownDerby); + if (database == Database.HSQL) { + runAfter(this::shutdownEmbeddedDatabases); } registerDB(); @@ -133,12 +133,12 @@ public int dropDatabase() { return switch (database) { case JOURNAL -> 0; - case DERBY -> { + case HSQL -> { try { - logger.info("Drop derby"); - dropDerby(); + logger.info("Drop HSQL"); + dropEmbeddedDatabases(); } catch (Exception e) { - logger.debug("Error dropping derby db: {}", e.getMessage()); + logger.debug("Error dropping HSQL db: {}", e.getMessage()); } yield 1; } diff --git a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PageSizeTest.java b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PageSizeTest.java index 9ded7b5615e1..136db4582518 100644 --- a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PageSizeTest.java +++ b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PageSizeTest.java @@ -117,7 +117,8 @@ protected long getMaxSizeBytesStored(Queue queue) throws Exception { try (java.sql.Connection sqlConn = database.getConnection()) { String sql = switch (database) { case MSSQL -> "SELECT MAX(LEN(DATA)) FROM " + tableName; - case ORACLE, DB2, DERBY, MYSQL -> "SELECT MAX(LENGTH(DATA)) FROM " + tableName; + case HSQL -> "SELECT MAX(OCTET_LENGTH(DATA)) FROM " + tableName; + case ORACLE, DB2, MYSQL -> "SELECT MAX(LENGTH(DATA)) FROM " + tableName; case POSTGRES -> "SELECT MAX(OCTET_LENGTH(lo_get(DATA))) FROM " + tableName; default -> null; }; diff --git a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/RealServerDatabasePagingTest.java b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/RealServerDatabasePagingTest.java index 9389e5f01891..0c3b252d3b74 100644 --- a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/RealServerDatabasePagingTest.java +++ b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/RealServerDatabasePagingTest.java @@ -57,7 +57,7 @@ public class RealServerDatabasePagingTest extends ParameterDBTestBase { private static final int MAX_MESSAGES = Integer.parseInt(testProperty(TEST_NAME, "MAX_MESSAGES", "1000")); private static final int MAX_LARGE_MESSAGES = Integer.parseInt(testProperty(TEST_NAME, "MAX_LARGE_MESSAGES", "200")); - private static final int SOAK_MAX_MESSAGES = Integer.parseInt(testProperty(TEST_NAME, "SOAK_MAX_MESSAGES", "100000")); + private static final int SOAK_MAX_MESSAGES = Integer.parseInt(testProperty(TEST_NAME, "SOAK_MAX_MESSAGES", "10000")); private static final int MESSAGE_SIZE = Integer.parseInt(testProperty(TEST_NAME, "MESSAGE_SIZE", "1000")); private static final int LARGE_MESSAGE_SIZE = Integer.parseInt(testProperty(TEST_NAME, "LARGE_MESSAGE_SIZE", "500000")); diff --git a/tests/integration-tests/pom.xml b/tests/integration-tests/pom.xml index 9d2247fd3f23..cdf9b94cf50d 100644 --- a/tests/integration-tests/pom.xml +++ b/tests/integration-tests/pom.xml @@ -310,13 +310,8 @@ - org.apache.derby - derby - test - - - org.apache.derby - derbytools + org.hsqldb + hsqldb test diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jdbc/store/journal/JDBCJournalTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jdbc/store/journal/JDBCJournalTest.java index 058c28a0edea..c93d1d4c971a 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jdbc/store/journal/JDBCJournalTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jdbc/store/journal/JDBCJournalTest.java @@ -102,8 +102,6 @@ protected String getJDBCPassword() { public void setup() throws Exception { dbConf = createDefaultDatabaseStorageConfiguration(); if (useAuthentication) { - System.setProperty("derby.connection.requireAuthentication", "true"); - System.setProperty("derby.user." + getJDBCUser(), getJDBCPassword()); dbConf.setJdbcUser(getJDBCUser()); dbConf.setJdbcPassword(getJDBCPassword()); } diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaRecoveryTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaRecoveryTest.java index cf1cf467e4d9..4e8c29f1c2d2 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaRecoveryTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaRecoveryTest.java @@ -101,7 +101,7 @@ public void setUp() throws Exception { super.setUp(); if (storeType == StoreConfiguration.StoreType.DATABASE) { - Object unused = Class.forName("org.apache.derby.jdbc.EmbeddedDriver").getDeclaredConstructor().newInstance(); + Object unused = Class.forName("org.hsqldb.jdbc.JDBCDriver").getDeclaredConstructor().newInstance(); } addressSettings.clear(); diff --git a/tests/stress-tests/pom.xml b/tests/stress-tests/pom.xml index db8770ad526f..170b28297dfd 100644 --- a/tests/stress-tests/pom.xml +++ b/tests/stress-tests/pom.xml @@ -101,14 +101,8 @@ test - org.apache.derby - derby - ${apache.derby.version} - test - - - org.apache.derby - derbytools + org.hsqldb + hsqldb test From 3ee0c92362b64b4db89b66fe8dded94c8d7025b1 Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Mon, 5 Oct 2026 08:32:48 -0400 Subject: [PATCH 3/3] ARTEMIS-6283 adjusting values to hsql --- .../apache/activemq/artemis/cli/commands/Create.java | 2 +- .../tests/db/paging/RealServerDatabasePagingTest.java | 11 +++++------ tests/soak-tests/src/test/scripts/parameters.sh | 4 +--- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java index 44c6f7965271..bb45678cd0cf 100644 --- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java +++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java @@ -706,7 +706,7 @@ public Object run(ActionContext context) throws Exception { if (jdbc) { if (jdbcURL == null) { - jdbcURL = "jdbc:hsqldb:file:" + getInstance().getAbsolutePath() + "/data/hsqldb/db"; + jdbcURL = "jdbc:hsqldb:file:" + getInstance().getAbsolutePath() + "/data/hsqldb/db;hsqldb.write_delay=false"; } filters.put("${jdbcBindings}", jdbcBindings); filters.put("${jdbcMessages}", jdbcMessages); diff --git a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/RealServerDatabasePagingTest.java b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/RealServerDatabasePagingTest.java index 0c3b252d3b74..42afcbfeda5e 100644 --- a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/RealServerDatabasePagingTest.java +++ b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/RealServerDatabasePagingTest.java @@ -54,16 +54,16 @@ public class RealServerDatabasePagingTest extends ParameterDBTestBase { private static final String TEST_NAME = "PGDB"; - private static final int MAX_MESSAGES = Integer.parseInt(testProperty(TEST_NAME, "MAX_MESSAGES", "1000")); + private static final int MAX_MESSAGES = Integer.parseInt(testProperty(TEST_NAME, "MAX_MESSAGES", "500")); private static final int MAX_LARGE_MESSAGES = Integer.parseInt(testProperty(TEST_NAME, "MAX_LARGE_MESSAGES", "200")); - private static final int SOAK_MAX_MESSAGES = Integer.parseInt(testProperty(TEST_NAME, "SOAK_MAX_MESSAGES", "10000")); + private static final int SOAK_MAX_MESSAGES = Integer.parseInt(testProperty(TEST_NAME, "SOAK_MAX_MESSAGES", "2000")); - private static final int MESSAGE_SIZE = Integer.parseInt(testProperty(TEST_NAME, "MESSAGE_SIZE", "1000")); + private static final int MESSAGE_SIZE = Integer.parseInt(testProperty(TEST_NAME, "MESSAGE_SIZE", "500")); private static final int LARGE_MESSAGE_SIZE = Integer.parseInt(testProperty(TEST_NAME, "LARGE_MESSAGE_SIZE", "500000")); private static final int SOAK_MESSAGE_SIZE = Integer.parseInt(testProperty(TEST_NAME, "SOAK_MESSAGE_SIZE", "1000")); - private static final int COMMIT_INTERVAL = Integer.parseInt(testProperty(TEST_NAME, "COMMIT_INTERVAL", "1000")); + private static final int COMMIT_INTERVAL = Integer.parseInt(testProperty(TEST_NAME, "COMMIT_INTERVAL", "50")); Process serverProcess; @@ -126,7 +126,6 @@ private void testPaging(String protocol, int messages, int messageSize) throws E } } session.commit(); - } stopServerWithFile(getServerLocation(database.getName()), serverProcess, 1, TimeUnit.MINUTES); @@ -140,7 +139,7 @@ private void testPaging(String protocol, int messages, int messageSize) throws E Queue queue = session.createQueue(queueName); MessageConsumer consumer = session.createConsumer(queue); for (int i = 0; i < messages; i++) { - BytesMessage message = (BytesMessage) consumer.receive(5000); + BytesMessage message = (BytesMessage) consumer.receive(15_000); assertNotNull(message); assertEquals(i, message.getIntProperty("i")); assertEquals(messageSize, message.getBodyLength()); diff --git a/tests/soak-tests/src/test/scripts/parameters.sh b/tests/soak-tests/src/test/scripts/parameters.sh index c22864f899d6..682008095fc1 100755 --- a/tests/soak-tests/src/test/scripts/parameters.sh +++ b/tests/soak-tests/src/test/scripts/parameters.sh @@ -74,9 +74,7 @@ export TEST_OW_LEAK_OPENWIRE_MESSAGE_SIZE=2000000 export TEST_OW_LEAK_PRINT_INTERVAL=1 #DatabasePagingTest -export TEST_PGDB_DB_LIST=derby -# use this to allow all the databases -#export TEST_PGDB_DB_LIST=derby,postgres,mysql +export TEST_PGDB_DB_LIST=hsql export TEST_PGDB_MAX_MESSAGES=500 export TEST_PGDB_MESSAGE_SIZE=100 export TEST_PGDB_COMMIT_INTERVAL=50