From 601417b8334dcc8901ad0f2f001f90d742aa5bc1 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 19 Aug 2022 14:42:21 +0300 Subject: [PATCH] IMDG refactoring --- .../dictionary/InterestStatusDictionary.java | 12 +++++ .../clearing/imdg/base/AutoconfiguredMap.java | 12 ++++- .../imdg/base/DictionaryTMapStore.java | 18 ++++++++ .../clearing/imdg/base/TemplateMapStore.java | 2 +- .../clearing/imdg/config/PoolMapConfigs.java | 45 +++++++++++-------- .../InterestStatusDictionaryMapStore.java | 31 +++++++++++++ .../imdg/utils/DbUtilsHelperTest.java | 2 +- .../clearing/imdg/IMDGDistributedNames.java | 1 + 8 files changed, 102 insertions(+), 21 deletions(-) create mode 100644 clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/InterestStatusDictionary.java create mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/DictionaryTMapStore.java create mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/InterestStatusDictionaryMapStore.java diff --git a/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/InterestStatusDictionary.java b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/InterestStatusDictionary.java new file mode 100644 index 000000000..cf478bd6e --- /dev/null +++ b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/InterestStatusDictionary.java @@ -0,0 +1,12 @@ +package ru.clearing.platform.dictionary; + +/** + * Справочник статусов возваращения процентов + * + * Dictionary DB table: INTEREST_STATUS_DICTIONARY + **/ +public class InterestStatusDictionary extends AbstractDictionary { + private static final long serialVersionUID = ConstDictionarySerializable.serialVersionUID; + + +} \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/AutoconfiguredMap.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/AutoconfiguredMap.java index 23eefe7b5..d3d1b44ff 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/AutoconfiguredMap.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/AutoconfiguredMap.java @@ -1,7 +1,17 @@ package ru.spcex.clearing.imdg.base; -public interface AutoconfiguredMap { +import com.hazelcast.core.MapLoader; + +public interface AutoconfiguredMap extends MapLoader { + /** + * + * @return IMDGDistributedNames.* + */ String getMapName(); + /** + * Список индексируемых полей, для быстрого поиска + * @return + */ String[] getIndexingField(); } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/DictionaryTMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/DictionaryTMapStore.java new file mode 100644 index 000000000..bf4491ab2 --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/DictionaryTMapStore.java @@ -0,0 +1,18 @@ +package ru.spcex.clearing.imdg.base; + +import org.springframework.jdbc.core.JdbcTemplate; +import ru.clearing.platform.dictionary.Dictionary; + +/** + * Store для автонастраиваемых map словарей + */ +public abstract class DictionaryTMapStore extends DictionaryMapStore implements AutoconfiguredMap { + protected DictionaryTMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String[] getIndexingField() { + return new String[]{"code"}; + } +} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/TemplateMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/TemplateMapStore.java index 34120e399..b211c13d0 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/TemplateMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/TemplateMapStore.java @@ -12,7 +12,7 @@ import java.util.*; * MapStore для шаблонных бизнес-объектов * @Component */ -public abstract class TemplateMapStore extends ObjectBaseMapStore implements AutoconfiguredMap { +public abstract class TemplateMapStore extends ObjectBaseMapStore implements AutoconfiguredMap { protected final int validateSize = getFields().length; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java index e92d9c962..676e81a5f 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java @@ -7,7 +7,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; -import ru.spcex.clearing.imdg.base.TemplateMapStore; +import ru.spcex.clearing.imdg.base.AutoconfiguredMap; +import ru.spcex.clearing.imdg.base.DictionaryTMapStore; import ru.spcex.clearing.imdg.businessevent.CompanyUpdateMapStore; import ru.spcex.clearing.imdg.businessobject.CompanyMapStore; import ru.spcex.clearing.imdg.dictionary.*; @@ -145,31 +146,39 @@ public class PoolMapConfigs { // } @Autowired - private List> listOfAutopluginStores; + private List> listOfAutopluginStores; // @Qualifier("AutoconfiguredMapStore") public List autoconfiguratorOfMapstorages() { List out = new ArrayList<>(); HashSet existMapStores = new HashSet<>(); - for (TemplateMapStore mapStore : listOfAutopluginStores) { - log.debug("Link mapstore {} to map {}", mapStore.toString(), mapStore.getMapName()); - if (StringUtils.isEmpty(mapStore.getMapName())) { - throw new IllegalArgumentException("MapStore " + mapStore + " has empty mapName"); - } - if (existMapStores.contains(mapStore.getMapName())) { - throw new IllegalArgumentException("MapStore " + mapStore + " has wrong mapName=\"" + mapStore.getMapName() + "\" is duplicated"); - } - existMapStores.add(mapStore.getMapName()); // IMDGDistributedNames - MapConfig mapCfg = makeDefaultMapConfig(mapStore.getMapName(), mapStore); - if (mapStore.getIndexingField() != null && mapStore.getIndexingField().length > 0) { - if (log.isTraceEnabled()) { - log.trace("Create indexing filed on {}: {}", mapStore.getMapName(), Arrays.toString(mapStore.getIndexingField())); + for (AutoconfiguredMap mapStore : listOfAutopluginStores) { + try { + log.debug("Link mapstore {} to map {}", mapStore.toString(), mapStore.getMapName()); + if (StringUtils.isEmpty(mapStore.getMapName())) { + throw new IllegalArgumentException("MapStore " + mapStore + " has empty mapName"); } - for (String indexName : mapStore.getIndexingField()) { - mapCfg.addMapIndexConfig(makeMapIndexConfig(indexName)); + if (existMapStores.contains(mapStore.getMapName())) { + throw new IllegalArgumentException("MapStore " + mapStore + " has wrong mapName=\"" + mapStore.getMapName() + "\" is duplicated"); } + existMapStores.add(mapStore.getMapName()); // IMDGDistributedNames + MapConfig mapCfg = makeDefaultMapConfig(mapStore.getMapName(), mapStore); + if (mapStore.getIndexingField() != null && mapStore.getIndexingField().length > 0) { + if (log.isTraceEnabled()) { + log.trace("Create indexing filed on {}: {}", mapStore.getMapName(), Arrays.toString(mapStore.getIndexingField())); + } + for (String indexName : mapStore.getIndexingField()) { + mapCfg.addMapIndexConfig(makeMapIndexConfig(indexName)); + } + } + if (mapStore instanceof DictionaryTMapStore) { + log.trace("Use near cache for {}", mapStore.getMapName()); + mapCfg.setNearCacheConfig(makeDefaultNearCacheConfig()); + } + out.add(mapCfg); + } catch (RuntimeException e) { + throw new RuntimeException("Can not configure MapStore " + mapStore.getMapName() + "(" + mapStore.toString() + "): " + e, e); } - out.add(mapCfg); } log.debug("Configured {} mapStore's", out.size()); return out; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/InterestStatusDictionaryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/InterestStatusDictionaryMapStore.java new file mode 100644 index 000000000..e14b318d8 --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/dictionary/InterestStatusDictionaryMapStore.java @@ -0,0 +1,31 @@ +package ru.spcex.clearing.imdg.dictionary; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.platform.dictionary.InterestStatusDictionary; +import ru.spcex.clearing.imdg.base.DictionaryTMapStore; +import ru.spcex.clearing.imdg.IMDGDistributedNames; + +@Component +public class InterestStatusDictionaryMapStore extends DictionaryTMapStore { + + public InterestStatusDictionaryMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_InterestStatusDictionary; + } + + @Override + public String getTableName() { + return "INTEREST_STATUS_DICTIONARY"; + } + + @Override + public InterestStatusDictionary getDictionaryObject() { + return new InterestStatusDictionary(); + } + +} \ No newline at end of file diff --git a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/utils/DbUtilsHelperTest.java b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/utils/DbUtilsHelperTest.java index 1d3c23bb6..94692143e 100644 --- a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/utils/DbUtilsHelperTest.java +++ b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/utils/DbUtilsHelperTest.java @@ -9,7 +9,7 @@ public class DbUtilsHelperTest { String sql = DbUtilsHelper.createUpdateOrInsert("ENERGY", new String[]{"id", "power", "circle", "of", "fantasy", "prime"}, "id"); assertEquals(sql, - "INSERT INTO ENERGY (\"ID\", \"POWER\", \"CIRCLE\", \"OF\", \"FANTASY\", \"PRIME\") values (?, ?, ?, ?, ?, ?) ON CONFLICT (ID) DO UPDATE SET \"POWER\"=EXCLUDED.\"POWER\", \"CIRCLE\"=EXCLUDED.\"CIRCLE\", \"OF\"=EXCLUDED.\"OF\", \"FANTASY\"=EXCLUDED.\"FANTASY\", \"PRIME\"=EXCLUDED.\"PRIME\"" + "INSERT INTO ENERGY (ID, POWER, CIRCLE, OF, FANTASY, PRIME) values (?, ?, ?, ?, ?, ?) ON CONFLICT (ID) DO UPDATE SET POWER=EXCLUDED.POWER, CIRCLE=EXCLUDED.CIRCLE, OF=EXCLUDED.OF, FANTASY=EXCLUDED.FANTASY, PRIME=EXCLUDED.PRIME" ); } } \ No newline at end of file diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java index 8bd146b94..ae15815df 100644 --- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java @@ -15,6 +15,7 @@ public final class IMDGDistributedNames { public static final String Map_Contact = "Map_Contact"; public static final String Map_ProfileDocument = "Map_ProfileDocument"; + public static final String Map_InterestStatusDictionary = "Map_InterestStatusDictionary"; public static final String Map_AllowedDictionary = "Map_AllowedDictionary"; public static final String Map_ClearingMemberCategoryDictionary = "Map_ClearingMemberCategoryDictionary"; public static final String Map_CompanyRoleDictionary = "Map_CompanyRoleDictionary";