From a7a057c4d4469bc6d25253321aa8e006ca5d1a46 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 3 Aug 2022 14:21:30 +0300 Subject: [PATCH] refactoring --- clearing-parent/classes/pom.xml | 5 +- .../StaticData/Company/CompanyRoleSet.java | 4 +- .../StaticData/Company/CompanySymbols.java | 4 +- .../StaticData/Company/CompanyUpdate.java | 3 + .../StaticData/Profile/CompanyInfo.java | 4 +- .../classes/StaticData/Profile/Contact.java | 4 +- .../StaticData/Profile/ProfileDocument.java | 4 +- .../classes/objects/BusinessEvent.java | 10 +- .../classes/objects/BusinessObject.java | 7 +- clearing-parent/storage/pom.xml | 2 +- .../storage/base/BusinessEventMapStore.java | 3 +- .../storage/base/DictionaryMapStore.java | 2 +- .../storage/base/LoggingMapStore.java | 86 ----------------- .../storage/base/ObjectBaseMapStore.java | 96 +------------------ .../storage/base/SimpleObjectMapStore.java | 10 +- .../businessevent/CompanyUpdateMapStore.java | 9 +- .../storage/config/DbConnectionConfig.java | 44 ++++----- .../storage/config/PlatformStorageBeans.java | 9 -- .../AbstractHazelcastLifecycleSupport.java | 1 + .../services/AbstractUpdateMapService.java | 5 +- .../clearing/storage/utils/DbUtilsHelper.java | 1 + .../clearing/storage/utils/TimeUtil.java | 1 + .../storage/src/main/resources/hazelcast.yaml | 5 + platform-parent/platform-classes-base/pom.xml | 22 +++++ .../classes/base/SpcexObjectBase.java | 20 +--- .../classes/base/interfaces/WithId.java | 5 + platform-parent/platform-storage-api/pom.xml | 29 ++++++ .../spcex/platform/storage/api/Storage.java | 27 ++++++ platform-parent/pom.xml | 4 +- pom.xml | 11 +++ .../resources/distr/modules/os/Dockerfile | 2 +- 31 files changed, 169 insertions(+), 270 deletions(-) delete mode 100644 clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/LoggingMapStore.java delete mode 100644 clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/config/PlatformStorageBeans.java create mode 100644 clearing-parent/storage/src/main/resources/hazelcast.yaml create mode 100644 platform-parent/platform-classes-base/pom.xml rename clearing-parent/classes/src/main/java/ru/clearing/classes/objects/ObjectBase.java => platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/SpcexObjectBase.java (55%) create mode 100644 platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/WithId.java create mode 100644 platform-parent/platform-storage-api/pom.xml create mode 100644 platform-parent/platform-storage-api/src/main/java/ru/spcex/platform/storage/api/Storage.java diff --git a/clearing-parent/classes/pom.xml b/clearing-parent/classes/pom.xml index c47f2d5f3..95b5f6722 100644 --- a/clearing-parent/classes/pom.xml +++ b/clearing-parent/classes/pom.xml @@ -21,7 +21,10 @@ - + + ru.spcex.platform + platform-classes-base + diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyRoleSet.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyRoleSet.java index be9639b15..b2e5d0472 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyRoleSet.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyRoleSet.java @@ -1,12 +1,12 @@ package ru.clearing.classes.StaticData.Company; import ru.clearing.classes.ConstSerializable; -import ru.clearing.classes.objects.ObjectBase; +import ru.spcex.platform.classes.base.SpcexObjectBase; /** * DB: COMPANY_ROLE_SET */ -public class CompanyRoleSet extends ObjectBase { +public class CompanyRoleSet extends SpcexObjectBase { private static final long serialVersionUID = ConstSerializable.serialVersionUID; private Long companyId; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanySymbols.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanySymbols.java index a24d3d7f9..43563f3a9 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanySymbols.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanySymbols.java @@ -1,12 +1,12 @@ package ru.clearing.classes.StaticData.Company; import ru.clearing.classes.ConstSerializable; -import ru.clearing.classes.objects.ObjectBase; +import ru.spcex.platform.classes.base.SpcexObjectBase; /** * DB: COMPANY_SYMBOLS */ -public class CompanySymbols extends ObjectBase { +public class CompanySymbols extends SpcexObjectBase { private static final long serialVersionUID = ConstSerializable.serialVersionUID; private Long companyId; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyUpdate.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyUpdate.java index fa416ae10..f022c7796 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyUpdate.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyUpdate.java @@ -3,10 +3,13 @@ package ru.clearing.classes.StaticData.Company; import ru.clearing.classes.ConstSerializable; import ru.clearing.classes.objects.BusinessEvent; +import java.io.Serial; + /** * DB: COMPANY_UPDATE */ public class CompanyUpdate extends BusinessEvent { + @Serial private static final long serialVersionUID = ConstSerializable.serialVersionUID; private Company object; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/CompanyInfo.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/CompanyInfo.java index 52ae358b9..0c728de44 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/CompanyInfo.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/CompanyInfo.java @@ -1,12 +1,12 @@ package ru.clearing.classes.StaticData.Profile; import ru.clearing.classes.ConstSerializable; -import ru.clearing.classes.objects.ObjectBase; +import ru.spcex.platform.classes.base.SpcexObjectBase; /** * DB: COMPANY_INFO */ -public class CompanyInfo extends ObjectBase { +public class CompanyInfo extends SpcexObjectBase { private static final long serialVersionUID = ConstSerializable.serialVersionUID; private Long companyId; // Company.CompanyInfo.companyId = CompanyInfo.id todo company_id=id - эти поля можно не добавлять в объект, их администрирует мапстор. И в базе получается они задублируются-лишнее поле company_id. diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/Contact.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/Contact.java index 02695c157..547e288ac 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/Contact.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/Contact.java @@ -1,12 +1,12 @@ package ru.clearing.classes.StaticData.Profile; import ru.clearing.classes.ConstSerializable; -import ru.clearing.classes.objects.ObjectBase; +import ru.spcex.platform.classes.base.SpcexObjectBase; /** * DB: CONTACT */ -public class Contact extends ObjectBase { +public class Contact extends SpcexObjectBase { private static final long serialVersionUID = ConstSerializable.serialVersionUID; private Long companyId; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/ProfileDocument.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/ProfileDocument.java index e229a65d9..bb38c616c 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/ProfileDocument.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/ProfileDocument.java @@ -1,14 +1,14 @@ package ru.clearing.classes.StaticData.Profile; import ru.clearing.classes.ConstSerializable; -import ru.clearing.classes.objects.ObjectBase; +import ru.spcex.platform.classes.base.SpcexObjectBase; import java.time.Instant; /** * DB: PROFILE_DOCUMENT */ -public class ProfileDocument extends ObjectBase { +public class ProfileDocument extends SpcexObjectBase { private static final long serialVersionUID = ConstSerializable.serialVersionUID; private Long companyId; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/objects/BusinessEvent.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/objects/BusinessEvent.java index 72a280d3c..a32e74e19 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/objects/BusinessEvent.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/objects/BusinessEvent.java @@ -1,20 +1,16 @@ package ru.clearing.classes.objects; -import ru.clearing.classes.ConstSerializable; +import ru.spcex.platform.classes.base.SpcexObjectBase; import java.time.Instant; /** * Журнал изменения таблиц с BusinessObject */ -public abstract class BusinessEvent extends ObjectBase { - static final long serialVersionUID = ConstSerializable.serialVersionUID; +public abstract class BusinessEvent extends SpcexObjectBase { private Instant eventTime; - private Long userId; // event_user_id - - public BusinessEvent() { - } + private Long userId; public Instant getEventTime() { return eventTime; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/objects/BusinessObject.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/objects/BusinessObject.java index e8b5f7848..5e943cf0f 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/objects/BusinessObject.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/objects/BusinessObject.java @@ -1,17 +1,18 @@ package ru.clearing.classes.objects; import ru.clearing.classes.ConstSerializable; +import ru.spcex.platform.classes.base.SpcexObjectBase; import java.time.Instant; /** * UUID - Long based with field object */ -public abstract class BusinessObject extends ObjectBase { +public abstract class BusinessObject extends SpcexObjectBase { static final long serialVersionUID = ConstSerializable.serialVersionUID; - private Instant created; // CREATED_AT - private Instant updated; // UPDATED_AT + private Instant created; + private Instant updated; public Instant getCreated() { return created; diff --git a/clearing-parent/storage/pom.xml b/clearing-parent/storage/pom.xml index 24f884ba4..13866a678 100644 --- a/clearing-parent/storage/pom.xml +++ b/clearing-parent/storage/pom.xml @@ -52,7 +52,7 @@ com.mchange c3p0 - 0.9.5.2 + 0.9.5.5 diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/BusinessEventMapStore.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/BusinessEventMapStore.java index ef6cfa0e3..861e18b9a 100644 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/BusinessEventMapStore.java +++ b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/BusinessEventMapStore.java @@ -2,12 +2,13 @@ package ru.spcex.clearing.storage.base; import org.springframework.jdbc.core.JdbcTemplate; import ru.clearing.classes.objects.BusinessEvent; +import ru.clearing.classes.objects.BusinessObject; import java.util.Collection; import java.util.Collections; import java.util.Map; -public abstract class BusinessEventMapStore extends ObjectBaseMapStore { +public abstract class BusinessEventMapStore> extends ObjectBaseMapStore { public BusinessEventMapStore(JdbcTemplate jdbcTemplate) { super(jdbcTemplate); diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/DictionaryMapStore.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/DictionaryMapStore.java index 0a44d80f0..d9fe9b7cc 100644 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/DictionaryMapStore.java +++ b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/DictionaryMapStore.java @@ -52,7 +52,7 @@ public abstract class DictionaryMapStore implements MapLoa List list = Collections.singletonList(id); try { rows = loadCollection(list); - } catch (Throwable e) { // one retry + } catch (Throwable e) { log.trace("Retry load after {}", e.toString()); rows = loadCollection(list); } diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/LoggingMapStore.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/LoggingMapStore.java deleted file mode 100644 index 6dba79a9f..000000000 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/LoggingMapStore.java +++ /dev/null @@ -1,86 +0,0 @@ -package ru.spcex.clearing.storage.base; - -import com.hazelcast.core.HazelcastInstance; -import com.hazelcast.core.MapLoaderLifecycleSupport; -import com.hazelcast.core.MapStore; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.lang.NonNull; -import ru.clearing.classes.objects.ObjectBase; - -import java.util.List; -import java.util.Properties; - -/** - * MapStore записывающий изменения в файл - * - * @param - */ -public abstract class LoggingMapStore implements MapStore, MapLoaderLifecycleSupport { - protected final Logger log = LoggerFactory.getLogger(this.getClass()); - -// private CSVWriter csvWriter; todo подключить OpenCSV и настройку про логирование данных добавить - -// private Supplier recoveryPath = () -> DfaConfig.get().getRoot().getSettings().getRecoveryLogPath(); - - @Override - public void init(HazelcastInstance hazelcastInstance, Properties properties, String mapName) { -// try { -// String recoveryLogPath = recoveryPath.get(); -// if (recoveryLogPath != null) { -// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); -// File recoveryDir = new File(recoveryLogPath + File.separator + simpleDateFormat.format(new Date())); -// recoveryDir.mkdirs(); -// File recoveryFile = new File(recoveryDir, getTableName() + ".csv"); -// csvWriter = new CSVWriter(new BufferedWriter(new FileWriter(recoveryFile)), ';'); -// log.info("recovery log started {}", recoveryFile); -// } -// } catch (Exception e) { -// log.error("", e); -// } - } - -// public void setRecoveryPath(Supplier recoveryPath) { -// this.recoveryPath = recoveryPath; -// } - - @Override - public void destroy() { -// try { -// if (csvWriter != null) -// csvWriter.close(); -// } catch (IOException e) { -// log.error("", e); -// } - } - - public abstract String getTableName(); - - protected void logHeaders(@NonNull String[] headers) { - try { -// if (csvWriter != null) { -// csvWriter.writeNext(headers); -// csvWriter.flush(); -// } - } catch (Exception e) { - log.error("", e); - } - } - - protected void logValues(@NonNull List valuesList) { - try { -// if (csvWriter != null) { -// for (Object[] values : valuesList) { -// String[] nextLine = new String[values.length]; -// for (int i = 0; i < values.length; i++) { -// nextLine[i] = String.valueOf(values[i]); -// } -// csvWriter.writeNext(nextLine); -// } -// csvWriter.flush(); -// } - } catch (Exception e) { - log.error("", e); - } - } -} diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/ObjectBaseMapStore.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/ObjectBaseMapStore.java index fa60ad33a..e1852b4fa 100644 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/ObjectBaseMapStore.java +++ b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/ObjectBaseMapStore.java @@ -1,9 +1,9 @@ package ru.spcex.clearing.storage.base; + import org.springframework.dao.support.DataAccessUtils; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; -import ru.clearing.classes.objects.ObjectBase; -import ru.spcex.clearing.storage.utils.DbUtilsHelper; +import ru.spcex.platform.classes.base.SpcexObjectBase; import java.sql.ResultSet; import java.sql.SQLException; @@ -11,20 +11,7 @@ import java.sql.Timestamp; import java.time.Instant; import java.util.*; -public abstract class ObjectBaseMapStore extends SimpleObjectMapStore { - /** - * См. legalEntityProfileToSQLArgs() - */ - protected static final String LEGAL_ENTITY_PROFILE_STATEMENT_ARGUMENT = - "description, domicilecountrycodeid, isprofessional, organizationtypeid, ogrn, name," + - " fullname, nameeng, fullnameeng, kpp, contactphone, contactemail, tsedallowedid, edomail," + - " nsdallowedid, otcmonitorallowedid, otcmonitorobligedid"; - - protected static final String insertChargeDefinitionStatement = DbUtilsHelper.fillValuesBlock( - "UPDATE OR INSERT INTO CHARGEDEFINITION (id, chargeamount, chargedirectionid, " + - " chargesettlementamount, chargetypeid, netincluded, currencycodeid, moexexchangecommission, userid, partyid)" + - " values %values_block% matching (id);" - ); +public abstract class ObjectBaseMapStore extends SimpleObjectMapStore { public static final int MAX_IN_CLAUSE_SIZE = 1000; protected NamedParameterJdbcTemplate namedParameterJdbcTemplate; @@ -34,12 +21,6 @@ public abstract class ObjectBaseMapStore extends SimpleObj this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate); } -// @Override -// public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { -// this.jdbcTemplate = jdbcTemplate; -// this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate); -// } - @Override public T load(Long id) { if (!isLoadable(id)) return null; @@ -100,75 +81,4 @@ public abstract class ObjectBaseMapStore extends SimpleObj Timestamp date = rs.getTimestamp(column); return date != null ? date.toInstant() : null; } - -/* todo реfакторинг: - protected LegalEntityProfile getLegalEntityProfile(Long id) { - if (id == null) - return null; - List results = jdbcTemplate.query( - "SELECT * FROM legalentityprofile WHERE id = ?", new Object[]{id}, - (rs, rowNum) -> { - LegalEntityProfile legalEntityProfile = new LegalEntityProfile(); - legalEntityProfile.setDescription(rs.getString("description")); - legalEntityProfile.setDomicileCountryCodeId(rs.getObject("domicilecountrycodeid", Long.class)); - legalEntityProfile.setProfessional(rs.getObject("isprofessional", Boolean.class)); - legalEntityProfile.setOrganizationTypeId(rs.getObject("organizationtypeid", Long.class)); - legalEntityProfile.setOgrn(rs.getString("ogrn")); - legalEntityProfile.setShortName(rs.getString("name")); - legalEntityProfile.setFullName(rs.getString("fullname")); - legalEntityProfile.setNameEng(rs.getString("nameeng")); - legalEntityProfile.setFullNameEng(rs.getString("fullnameeng")); - legalEntityProfile.setKpp(rs.getString("kpp")); - legalEntityProfile.setContactPhone(rs.getString("contactphone")); - legalEntityProfile.setContactEMail(rs.getString("contactemail")); - legalEntityProfile.setTsedAllowedId(rs.getObject("tsedallowedid", Long.class)); - legalEntityProfile.setEdoMail(rs.getString("edomail")); - legalEntityProfile.setNsdAllowedId(rs.getObject("nsdallowedid", Long.class)); - legalEntityProfile.setOtcMonitorAllowedId(rs.getObject("otcmonitorallowedid", Long.class)); - legalEntityProfile.setOtcMonitorObligedId(rs.getObject("otcmonitorobligedid", Long.class)); - legalEntityProfile.setId(getLong(rs, "id")); - return legalEntityProfile; - } - ); - LegalEntityProfile onceObject = DataAccessUtils.singleResult(results); - if (onceObject == null) { - log.warn("No row in table legalentityprofile where id={}. Create empty ", id); - onceObject = new LegalEntityProfile(); - onceObject.setId(id); // чтобы не потерять id - } - return onceObject; - } -*/ - -// /** -// * Без ID перечисление значений полей LegalEntityProfile. -// * См. LegalentityprofileStatementArgument -// * -// * @param legalEntityProfile -// * @return -// */ -// protected List legalEntityProfileToSQLArgs(@NonNull LegalEntityProfile legalEntityProfile) { -// List legalEntityArgs = new ArrayList<>(Arrays.asList( -//// legalEntityProfile.getId(), -// legalEntityProfile.getDescription(), -// legalEntityProfile.getDomicileCountryCodeId(), -// legalEntityProfile.getProfessional(), -// legalEntityProfile.getOrganizationTypeId(), -// legalEntityProfile.getOgrn(), -// legalEntityProfile.getShortName(), -// legalEntityProfile.getFullName(), -// legalEntityProfile.getNameEng(), -// legalEntityProfile.getFullNameEng(), -// legalEntityProfile.getKpp(), -// legalEntityProfile.getContactPhone(), -// legalEntityProfile.getContactEMail(), -// legalEntityProfile.getTsedAllowedId(), -// legalEntityProfile.getEdoMail(), -// legalEntityProfile.getNsdAllowedId(), -// legalEntityProfile.getOtcMonitorAllowedId(), -// legalEntityProfile.getOtcMonitorObligedId() -// )); -// return legalEntityArgs; -// } - } diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/SimpleObjectMapStore.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/SimpleObjectMapStore.java index 8d45ff45c..532426ea3 100644 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/SimpleObjectMapStore.java +++ b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/base/SimpleObjectMapStore.java @@ -1,5 +1,6 @@ package ru.spcex.clearing.storage.base; +import com.hazelcast.core.MapStore; import org.apache.commons.lang3.exception.ExceptionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -7,8 +8,8 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.SqlTypeValue; import org.springframework.jdbc.core.StatementCreatorUtils; import org.springframework.lang.NonNull; -import ru.clearing.classes.objects.ObjectBase; import ru.spcex.clearing.storage.utils.BigDecimalUtil; +import ru.spcex.platform.classes.base.SpcexObjectBase; import java.math.BigDecimal; import java.sql.ResultSet; @@ -24,17 +25,15 @@ import java.util.*; * * @param */ -public abstract class SimpleObjectMapStore extends LoggingMapStore -{ +public abstract class SimpleObjectMapStore implements MapStore { protected final Logger log = LoggerFactory.getLogger(this.getClass()); - protected SimpleDateFormat FIREBIRD_DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd"); // не делать static. + protected SimpleDateFormat FIREBIRD_DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd"); protected final JdbcTemplate jdbcTemplate; private final int bathSize = 1000; protected SimpleObjectMapStore(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; - logHeaders(getFields()); } public abstract String getTableName(); @@ -146,7 +145,6 @@ public abstract class SimpleObjectMapStore extends Logging protected void batchInsertUpdate(@NonNull String insertStatement, @NonNull List args) { try { - logValues(args); int[][] ret = jdbcTemplate.batchUpdate(insertStatement, args, bathSize, (ps, params) -> { for (int i = 0; i < params.length; i++) { int type = ps.getParameterMetaData().getParameterType(i + 1); diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/businessevent/CompanyUpdateMapStore.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/businessevent/CompanyUpdateMapStore.java index 76c04776e..4a9ecc0ab 100644 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/businessevent/CompanyUpdateMapStore.java +++ b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/businessevent/CompanyUpdateMapStore.java @@ -38,7 +38,6 @@ public class CompanyUpdateMapStore extends BusinessEventMapStore public String[] getFieldsForCompanyInfo() { return new String[]{ "id", "event_time", "event_user_id", - "company_info_id", "company_id", "clearing_member_category", "corporation_sole_type", "country_code", "description", "professional_sign", "legal_kind", "organization_type", "residence", "short_name", "full_name", "short_name_eng", "full_name_eng" @@ -71,10 +70,9 @@ public class CompanyUpdateMapStore extends BusinessEventMapStore }; batchArgs.add(args); if (company.getProfile() != null) { - company.getProfile().setId(company.getId());//todo для точного соответствия id = company.id + company.getProfile().setId(company.getId()); company.getProfile().setCompanyId(company.getId()); - List companyInfoArgs = new ArrayList<>(); - companyInfoArgs.addAll(companyInfoToSQLArgs(company.getProfile(), companyUpdate)); + List companyInfoArgs = new ArrayList<>(companyInfoToSQLArgs(company.getProfile(), companyUpdate)); batchCompanyInfoArgs.add(companyInfoArgs.toArray()); } @@ -91,7 +89,7 @@ public class CompanyUpdateMapStore extends BusinessEventMapStore * @return */ protected List companyInfoToSQLArgs(@NonNull CompanyInfo companyInfo, CompanyUpdate rootUpdate) { - List companyInfoArgs = new ArrayList<>(Arrays.asList( + return new ArrayList<>(Arrays.asList( rootUpdate.getId(), TimeUtil.fromInstant(rootUpdate.getEventTime()), rootUpdate.getUserId(), @@ -111,6 +109,5 @@ public class CompanyUpdateMapStore extends BusinessEventMapStore companyInfo.getShortNameEng(), companyInfo.getFullNameEng() )); - return companyInfoArgs; } } diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/config/DbConnectionConfig.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/config/DbConnectionConfig.java index 233157da2..aedfe8610 100644 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/config/DbConnectionConfig.java +++ b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/config/DbConnectionConfig.java @@ -1,14 +1,12 @@ package ru.spcex.clearing.storage.config; import com.mchange.v2.c3p0.ComboPooledDataSource; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import ru.spcex.clearing.storage.error.ModuleInitializeException; -import ru.spcex.clearing.storage.utils.DbDefaultConfig; import javax.sql.DataSource; import java.sql.Connection; @@ -26,30 +24,26 @@ public class DbConnectionConfig { String login = configRoot.getDatabase().getLogin(); String password = configRoot.getDatabase().getPassword(); String logTimeoutPart = ""; - String dbPath; - if (StringUtils.isEmpty(configRoot.getDatabase().getEmbeddedFilePath())) { - dbPath = configRoot.getDatabase().getJdbcConnectionString(); - int timeoutSec = configRoot.getDatabase().getConnectionAcquireTimeoutSeconds(); - ComboPooledDataSource cpds = new ComboPooledDataSource(); - try { - cpds.setDriverClass(configRoot.getDatabase().getDriver()); - } catch (Exception ue) { // fixme не компилится из-за PropertyVetoException - throw new RuntimeException(ue); - } - cpds.setJdbcUrl(dbPath); - cpds.setUser(login); - cpds.setPassword(password); - cpds.setInitialPoolSize(configRoot.getDatabase().getMinPoolSize()); - cpds.setMinPoolSize(configRoot.getDatabase().getMinPoolSize()); - cpds.setMaxPoolSize(configRoot.getDatabase().getMaxPoolSize()); - cpds.setNumHelperThreads(configRoot.getDatabase().getNumHelperThreads()); - cpds.setCheckoutTimeout(timeoutSec * 1000/*todo common 1000==ConstsCommon.SECOND*/); - logTimeoutPart = String.format(" (timeout=%ds)", timeoutSec); - result = cpds; - } else { - dbPath = configRoot.getDatabase().getEmbeddedFilePath(); - result = DbDefaultConfig.getEmbeddedDatabase(dbPath); + String dbPath = configRoot.getDatabase().getJdbcConnectionString(); + int timeoutSec = configRoot.getDatabase().getConnectionAcquireTimeoutSeconds(); + + ComboPooledDataSource cpds = new ComboPooledDataSource(); + try { + cpds.setDriverClass(configRoot.getDatabase().getDriver()); + } catch (Exception ue) { // fixme не компилится из-за PropertyVetoException + throw new RuntimeException(ue); } + cpds.setJdbcUrl(dbPath); + cpds.setUser(login); + cpds.setPassword(password); + cpds.setInitialPoolSize(configRoot.getDatabase().getMinPoolSize()); + cpds.setMinPoolSize(configRoot.getDatabase().getMinPoolSize()); + cpds.setMaxPoolSize(configRoot.getDatabase().getMaxPoolSize()); + cpds.setNumHelperThreads(configRoot.getDatabase().getNumHelperThreads()); + cpds.setCheckoutTimeout(timeoutSec * 1000/*todo common 1000==ConstsCommon.SECOND*/); + logTimeoutPart = String.format(" (timeout=%ds)", timeoutSec); + result = cpds; + String OPERATION_DATABASE_CONNECTION_CHECK = String.format("Database [%s] connection check", dbPath); try { Connection conn = result.getConnection(); diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/config/PlatformStorageBeans.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/config/PlatformStorageBeans.java deleted file mode 100644 index a43a90752..000000000 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/config/PlatformStorageBeans.java +++ /dev/null @@ -1,9 +0,0 @@ -package ru.spcex.clearing.storage.config; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = "com.moex.platform.storage") -public class PlatformStorageBeans { -} diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/services/AbstractHazelcastLifecycleSupport.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/services/AbstractHazelcastLifecycleSupport.java index 63b627678..e19dcc15f 100644 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/services/AbstractHazelcastLifecycleSupport.java +++ b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/services/AbstractHazelcastLifecycleSupport.java @@ -22,6 +22,7 @@ import java.util.concurrent.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +//todo почистить класс public abstract class AbstractHazelcastLifecycleSupport implements InitializingBean, DisposableBean { /** * Рабочая версия БД. Треьуется вручную сверять с DDL.sql и накручивать эту переменную. diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/services/AbstractUpdateMapService.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/services/AbstractUpdateMapService.java index 744416d51..ea2c3310f 100644 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/services/AbstractUpdateMapService.java +++ b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/services/AbstractUpdateMapService.java @@ -13,7 +13,8 @@ import ru.spcex.clearing.storage.utils.IMDGDistributedNames; import java.time.Instant; -public abstract class AbstractUpdateMapService implements InitializingBean, EntryAddedListener, EntryUpdatedListener, EntryRemovedListener { +public abstract class AbstractUpdateMapService implements InitializingBean, + EntryAddedListener, EntryUpdatedListener, EntryRemovedListener { private final Logger log = LoggerFactory.getLogger(this.getClass()); protected final String EVENT_CREATE="CREATE"; @@ -28,8 +29,6 @@ public abstract class AbstractUpdateMapService implements InitializingBean, Entr @Override public void afterPropertiesSet() { -// if (!HazelcastCommon.otcSystem_getStorageState(hazelcastServerInstance)) -// log.warn("UpdateMapService started before Storage had ready!"); addingListenersToCards(); log.debug("UpdateMapService started."); } diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/utils/DbUtilsHelper.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/utils/DbUtilsHelper.java index b535bc64f..ffd4dd79c 100644 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/utils/DbUtilsHelper.java +++ b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/utils/DbUtilsHelper.java @@ -8,6 +8,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +//todo зарефакторить public class DbUtilsHelper { private static String generateValuesBlock(int querySignCount) { diff --git a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/utils/TimeUtil.java b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/utils/TimeUtil.java index 3059f26ec..1aca86579 100644 --- a/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/utils/TimeUtil.java +++ b/clearing-parent/storage/src/main/java/ru/spcex/clearing/storage/utils/TimeUtil.java @@ -15,6 +15,7 @@ import java.util.Date; * Для работы с java.util.Date * И конвертация в новый формат * todo копипаст юниттеста нужен. + * todo зарефакторить */ public class TimeUtil { private static final Logger log = LoggerFactory.getLogger(TimeUtil.class); diff --git a/clearing-parent/storage/src/main/resources/hazelcast.yaml b/clearing-parent/storage/src/main/resources/hazelcast.yaml new file mode 100644 index 000000000..d8ca9f792 --- /dev/null +++ b/clearing-parent/storage/src/main/resources/hazelcast.yaml @@ -0,0 +1,5 @@ +hazelcast: + network: + join: + multicast: + enabled: true \ No newline at end of file diff --git a/platform-parent/platform-classes-base/pom.xml b/platform-parent/platform-classes-base/pom.xml new file mode 100644 index 000000000..31daa020d --- /dev/null +++ b/platform-parent/platform-classes-base/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + platform-classes-base + Platform classes base + jar + 1.0.0 + + + platform-parent + ru.spcex.platform + 1.0.0 + + + + 17 + 17 + + + \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/objects/ObjectBase.java b/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/SpcexObjectBase.java similarity index 55% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/objects/ObjectBase.java rename to platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/SpcexObjectBase.java index 80e45d86e..41038ae88 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/objects/ObjectBase.java +++ b/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/SpcexObjectBase.java @@ -1,27 +1,15 @@ -package ru.clearing.classes.objects; +package ru.spcex.platform.classes.base; -import ru.clearing.classes.ConstSerializable; -import ru.clearing.common.interfaces.WithId; +import ru.spcex.platform.classes.base.interfaces.WithId; import java.io.Serializable; /** * Long ID - based primary key object */ -public abstract class ObjectBase implements WithId, Serializable { - static final long serialVersionUID = ConstSerializable.serialVersionUID; +public abstract class SpcexObjectBase implements WithId, Serializable { protected Long id; - public ObjectBase(){ - } - - public ObjectBase(Long id) { - this.id = id; - } - - public static Long getIdOrNull(WithId o) { - return o == null ? null : o.getId(); - } @Override public Long getId() { @@ -43,7 +31,7 @@ public abstract class ObjectBase implements WithId, Serializable { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - ObjectBase otcObject = (ObjectBase) o; + SpcexObjectBase otcObject = (SpcexObjectBase) o; return id.equals(otcObject.id); } diff --git a/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/WithId.java b/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/WithId.java new file mode 100644 index 000000000..cb58db517 --- /dev/null +++ b/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/WithId.java @@ -0,0 +1,5 @@ +package ru.spcex.platform.classes.base.interfaces; + +public interface WithId { + Long getId(); +} diff --git a/platform-parent/platform-storage-api/pom.xml b/platform-parent/platform-storage-api/pom.xml new file mode 100644 index 000000000..c1bd099d4 --- /dev/null +++ b/platform-parent/platform-storage-api/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + platform-storage-api + Platform storage api + jar + 1.0.0 + + + platform-parent + ru.spcex.platform + 1.0.0 + + + + 17 + 17 + + + + + ru.spcex.platform + platform-classes-base + + + \ No newline at end of file diff --git a/platform-parent/platform-storage-api/src/main/java/ru/spcex/platform/storage/api/Storage.java b/platform-parent/platform-storage-api/src/main/java/ru/spcex/platform/storage/api/Storage.java new file mode 100644 index 000000000..755ff5c6b --- /dev/null +++ b/platform-parent/platform-storage-api/src/main/java/ru/spcex/platform/storage/api/Storage.java @@ -0,0 +1,27 @@ +package ru.spcex.platform.storage.api; + +import ru.spcex.platform.classes.base.SpcexObjectBase; + +import java.util.Collection; + +public interface Storage { + void insert(Class paramClass, T paramT); + + void update(Class paramClass, T paramT); + + void delete(Class paramClass, T paramT); + + Long nextIDSequenceFor(); + + Collection getCollectionObjectsBySQL(Class paramClass, String paramString); + + T getSingleObjectBySQL(Class paramClass, String paramString); + + T getSingleObjectByID(Class paramClass, Long paramLong); + + Collection getCollectionIdsBySQL(Class paramClass, String paramString); + + Collection getAllValues(Class paramClass); + + Collection projectionsAttributeBySql(Class paramClass, String paramString, String... paramVarArgs); +} diff --git a/platform-parent/pom.xml b/platform-parent/pom.xml index 1c4821d40..1c91e6985 100644 --- a/platform-parent/pom.xml +++ b/platform-parent/pom.xml @@ -4,6 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + ru.spcex.platform platform-parent _parent_platform PLATFORM parent @@ -17,6 +18,7 @@ - + platform-storage-api + platform-classes-base \ No newline at end of file diff --git a/pom.xml b/pom.xml index c6c6b1374..8f29fd6ed 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,17 @@ storage ${global.project.version} + + + ru.spcex.platform + platform-classes-base + 1.0.0 + + + ru.spcex.platform + platform-storage-api + 1.0.0 + diff --git a/z-distr/src/main/resources/distr/modules/os/Dockerfile b/z-distr/src/main/resources/distr/modules/os/Dockerfile index c0e569f4f..873c2ea41 100644 --- a/z-distr/src/main/resources/distr/modules/os/Dockerfile +++ b/z-distr/src/main/resources/distr/modules/os/Dockerfile @@ -23,7 +23,7 @@ ENV JAVA_VERSION jdk17.0.2+9 RUN set -eux; \ ESUM='637a742591f75447eaab1f23942db038d411686f'; \ - BINARY_URL='https://download.bell-sw.com/java/17.0.2+9/bellsoft-jdk17.0.2+9-linux-amd64.tar.gz'; \ + BINARY_URL='https://download.bell-sw.com/java/17.0.2+9/bellsoft-jre17.0.2+9-linux-amd64.tar.gz'; \ curl -LfsSo /tmp/bellsoft-jdk.tar.gz ${BINARY_URL}; \ mkdir -p /opt/java/bellsoft-jdk; \ cd /opt/java/bellsoft-jdk; \