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();

Reply via email to