This is an automated email from the ASF dual-hosted git repository.
gtully pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/main by this push:
new 6b053dd290 ARTEMIS-4398 - support configuring database using Broker
Properties
6b053dd290 is described below
commit 6b053dd290c140d36ca446f9a4799cfd629f7a3b
Author: Andy Taylor <[email protected]>
AuthorDate: Wed Aug 23 13:26:44 2023 +0100
ARTEMIS-4398 - support configuring database using Broker Properties
https://issues.apache.org/jira/browse/ARTEMIS-4398
---
.../core/config/impl/ConfigurationImpl.java | 12 +++++
.../artemis/core/server/ActiveMQMessageBundle.java | 3 ++
.../core/config/impl/ConfigurationImplTest.java | 54 ++++++++++++++++++++++
3 files changed, 69 insertions(+)
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
index 45a452cb4e..dcf1e45da2 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
@@ -84,6 +84,7 @@ import
org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnectorFactory;
import
org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory;
import org.apache.activemq.artemis.core.security.Role;
import org.apache.activemq.artemis.core.server.ActiveMQServerLogger;
+import org.apache.activemq.artemis.core.server.ActiveMQMessageBundle;
import org.apache.activemq.artemis.core.server.JournalType;
import org.apache.activemq.artemis.core.server.NetworkHealthCheck;
import org.apache.activemq.artemis.core.server.SecuritySettingPlugin;
@@ -773,6 +774,17 @@ public class ConfigurationImpl implements Configuration,
Serializable {
}
}, TransformerConfiguration.class);
+ beanUtils.getConvertUtils().register(new Converter() {
+ @Override
+ public <T> T convert(Class<T> type, Object value) {
+ //we only care about DATABASE type as it is the only one used
+ if
(StoreConfiguration.StoreType.DATABASE.toString().equals(value)) {
+ return (T) new DatabaseStorageConfiguration();
+ }
+ throw ActiveMQMessageBundle.BUNDLE.unsupportedStorePropertyType();
+ }
+ }, StoreConfiguration.class);
+
beanUtils.getConvertUtils().register(new Converter() {
@Override
public <T> T convert(Class<T> type, Object value) {
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
index 2018d3f136..5de85adb7f 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
@@ -536,4 +536,7 @@ public interface ActiveMQMessageBundle {
@Message(id = 229248, value = "Invalid value for webSocketEncoderType:
'{}'. Supported values: 'binary', 'text'.")
IllegalStateException invalidWebSocketEncoderType(String
webSocketEncoderType);
+
+ @Message(id = 229249, value = "Invalid Store property, only DATABASE
property is supported")
+ RuntimeException unsupportedStorePropertyType();
}
diff --git
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
index a36de3b148..c7eb9d676d 100644
---
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
+++
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
@@ -50,6 +50,7 @@ import
org.apache.activemq.artemis.core.config.federation.FederationAddressPolic
import org.apache.activemq.artemis.core.config.federation.FederationPolicySet;
import
org.apache.activemq.artemis.core.config.federation.FederationQueuePolicyConfiguration;
import org.apache.activemq.artemis.core.config.ha.LiveOnlyPolicyConfiguration;
+import
org.apache.activemq.artemis.core.config.storage.DatabaseStorageConfiguration;
import org.apache.activemq.artemis.core.deployers.impl.FileConfigurationParser;
import org.apache.activemq.artemis.core.io.SequentialFileFactory;
import org.apache.activemq.artemis.core.paging.PagingManager;
@@ -1554,6 +1555,59 @@ public class ConfigurationImplTest extends
ActiveMQTestBase {
}
}
+ @Test
+ public void testDatabaseStoreConfigurationProps() throws Exception {
+ ConfigurationImpl configuration = new ConfigurationImpl();
+ Properties insertionOrderedProperties = new
ConfigurationImpl.InsertionOrderedProperties();
+ insertionOrderedProperties.put("storeConfiguration", "DATABASE");
+
insertionOrderedProperties.put("storeConfiguration.largeMessageTableName",
"lmtn");
+ insertionOrderedProperties.put("storeConfiguration.messageTableName",
"mtn");
+ insertionOrderedProperties.put("storeConfiguration.bindingsTableName",
"btn");
+ insertionOrderedProperties.put("storeConfiguration.dataSourceClassName",
"dscn");
+
insertionOrderedProperties.put("storeConfiguration.nodeManagerStoreTableName",
"nmtn");
+ insertionOrderedProperties.put("storeConfiguration.pageStoreTableName",
"pstn");
+ insertionOrderedProperties.put("storeConfiguration.jdbcAllowedTimeDiff",
123);
+ insertionOrderedProperties.put("storeConfiguration.jdbcConnectionUrl",
"url");
+ insertionOrderedProperties.put("storeConfiguration.jdbcDriverClassName",
"dcn");
+
insertionOrderedProperties.put("storeConfiguration.jdbcJournalSyncPeriodMillis",
456);
+
insertionOrderedProperties.put("storeConfiguration.jdbcLockAcquisitionTimeoutMillis",
789);
+
insertionOrderedProperties.put("storeConfiguration.jdbcLockExpirationMillis",
321);
+
insertionOrderedProperties.put("storeConfiguration.jdbcLockRenewPeriodMillis",
654);
+ insertionOrderedProperties.put("storeConfiguration.jdbcNetworkTimeout",
987);
+ insertionOrderedProperties.put("storeConfiguration.jdbcPassword",
"pass");
+ insertionOrderedProperties.put("storeConfiguration.jdbcUser", "user");
+ configuration.parsePrefixedProperties(insertionOrderedProperties, null);
+ Assert.assertTrue(configuration.getStoreConfiguration() instanceof
DatabaseStorageConfiguration);
+ DatabaseStorageConfiguration dsc = (DatabaseStorageConfiguration)
configuration.getStoreConfiguration();
+ Assert.assertEquals(dsc.getLargeMessageTableName(), "lmtn");
+ Assert.assertEquals(dsc.getMessageTableName(), "mtn");
+ Assert.assertEquals(dsc.getBindingsTableName(), "btn");
+ Assert.assertEquals(dsc.getDataSourceClassName(), "dscn");
+ Assert.assertEquals(dsc.getJdbcAllowedTimeDiff(), 123);
+ Assert.assertEquals(dsc.getJdbcConnectionUrl(), "url");
+ Assert.assertEquals(dsc.getJdbcDriverClassName(), "dcn");
+ Assert.assertEquals(dsc.getJdbcJournalSyncPeriodMillis(), 456);
+ Assert.assertEquals(dsc.getJdbcLockAcquisitionTimeoutMillis(), 789);
+ Assert.assertEquals(dsc.getJdbcLockExpirationMillis(), 321);
+ Assert.assertEquals(dsc.getJdbcLockRenewPeriodMillis(), 654);
+ Assert.assertEquals(dsc.getJdbcNetworkTimeout(), 987);
+ Assert.assertEquals(dsc.getJdbcPassword(), "pass");
+ Assert.assertEquals(dsc.getJdbcUser(), "user");
+ Assert.assertEquals(dsc.getNodeManagerStoreTableName(), "nmtn");
+ Assert.assertEquals(dsc.getPageStoreTableName(), "pstn");
+ }
+
+ @Test
+ public void testInvalidStoreConfigurationProps() throws Exception {
+ ConfigurationImpl configuration = new ConfigurationImpl();
+ Properties insertionOrderedProperties = new
ConfigurationImpl.InsertionOrderedProperties();
+ insertionOrderedProperties.put("storeConfiguration", "File");
+ configuration.parsePrefixedProperties(insertionOrderedProperties, null);
+ String status = configuration.getStatus();
+ //test for exception code
+ Assert.assertTrue(status.contains("AMQ229249"));
+ }
+
@Test
public void testEnumConversion() throws Exception {
ConfigurationImpl configuration = new ConfigurationImpl();