diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/service/impl/StateLoaderImpl.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/service/impl/StateLoaderImpl.java index 2d65938ad..6fb9ac2cb 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/service/impl/StateLoaderImpl.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/service/impl/StateLoaderImpl.java @@ -117,7 +117,7 @@ public class StateLoaderImpl implements IStateLoader { Imdg imdgSearch = getHistImdg(IMDGDistributedNames.Map_SearchSessionHistory, SpcexObjectBase.class); ImdgPredicateBuilder predicateBuilder = imdgSearch.predicateBuilder(); ImdgPredicate imdgPredicate = predicateBuilder.equals("sessionId", sessionId); - Imdg sessionHistoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SessionHistory, SessionHistory.class); + Imdg sessionHistoryImdg = getHistImdg(IMDGDistributedNames.Map_SessionHistory, SessionHistory.class); return imdgSearch.getCollectionIdsByPredicate(imdgPredicate).stream() .map(sessionHistoryImdg::getSingleObjectByID) .filter(Objects::nonNull) diff --git a/clearing-parent/imdg-hist/src/main/java/ru/spcex/clearing/historyimdg/mapstores/SessionHistoryOnlyLoadMapStore.java b/clearing-parent/imdg-hist/src/main/java/ru/spcex/clearing/historyimdg/mapstores/SessionHistoryOnlyLoadMapStore.java new file mode 100644 index 000000000..f0c2ca780 --- /dev/null +++ b/clearing-parent/imdg-hist/src/main/java/ru/spcex/clearing/historyimdg/mapstores/SessionHistoryOnlyLoadMapStore.java @@ -0,0 +1,119 @@ +package ru.spcex.clearing.historyimdg.mapstores; + +import com.hazelcast.config.EvictionConfig; +import com.hazelcast.config.MaxSizeConfig; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import org.springframework.dao.support.DataAccessUtils; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.misc.Session; +import ru.clearing.classes.statics.data.misc.SessionHistory; +import ru.spcex.clearing.imdg.businessevent.SessionHistoryMapStore; +import ru.spcex.clearing.imdg.config.element.ImdgHzEvictionConfig; + +@Component +public class SessionHistoryOnlyLoadMapStore extends SessionHistoryMapStore { + + public SessionHistoryOnlyLoadMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public Optional evictionConfig() { + ImdgHzEvictionConfig evctCfg = new ImdgHzEvictionConfig(); + evctCfg.setSize(5000); + evctCfg.setMaxSizePolicy(MaxSizeConfig.MaxSizePolicy.PER_NODE); + evctCfg.setEvictionPolicy(EvictionConfig.DEFAULT_EVICTION_POLICY); + evctCfg.setTimeToLiveSeconds(1800); + return Optional.of(evctCfg); + } + + + @Override + public SessionHistory load(Long id) { + if (!isLoadable(id)) return null; + Collection rows; + List list = Collections.singletonList(id); + try { + rows = load(list); + } catch (Throwable e) { // one retry + rows = load(list); + } + SessionHistory obj = DataAccessUtils.singleResult(rows); + if (obj != null && isLoadable(obj)) + return obj; + else + return null; + } + + @Override + public Map loadAll(Collection keys) { + log.debug("loadAll from " + getTableName() + " " + keys.size() + " keys"); + Map result = new HashMap<>(); + long start = System.currentTimeMillis(); + + // загрузить данные по ключам частями, чтобы не выйти за ограничения базы по кол-ву элементов в in clause + List keysSubList = new ArrayList<>(MAX_IN_CLAUSE_SIZE); + for (Iterator iterator = keys.iterator(); iterator.hasNext(); ) { + Long key = iterator.next(); + keysSubList.add(key); + if (keysSubList.size() == MAX_IN_CLAUSE_SIZE || !iterator.hasNext()) { + Collection rows = load(keysSubList); + for (SessionHistory row : rows) { + result.put(row.getId(), row); + } + keysSubList.clear(); + } + } + + log.debug("loadAll from " + getTableName() + " " + keys.size() + " keys done in " + (System.currentTimeMillis() - start) + "ms"); + + return result; + } + + @Override + public Collection load(Collection keys) { + Map> paramMap = Collections.singletonMap("ids", keys); + return namedParameterJdbcTemplate.query("select * from " + getTableName() + " where id in (:ids)", paramMap, + (resultSet, i) -> objectReader(resultSet)); + } + + protected SessionHistory objectReader(ResultSet resultSet) throws SQLException { + SessionHistory sessionHistory = new SessionHistory(); + Session object = new Session(); + + sessionHistory.setId(resultSet.getObject("ID", Long.class)); + sessionHistory.setEventTime(getInstantFromTimestamp(resultSet, "EVENT_TIME")); + sessionHistory.setUserId(resultSet.getObject("EVENT_USER_ID", Long.class)); + sessionHistory.setEventType(resultSet.getObject("EVENT_TYPE", String.class)); + + object.setId(resultSet.getObject("SESSION_ID", Long.class)); + object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT")); + object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); + object.setClearingDate(getLocalDateFromSqlDate(resultSet, "CLEARING_DATE")); + object.setSessionStatus(resultSet.getObject("SESSION_STATUS", String.class)); + object.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class)); + object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class)); + object.setUserId(resultSet.getObject("USER_ID", Long.class)); + object.setSection(resultSet.getObject("SECTION", String.class)); + object.setSessionType(resultSet.getObject("SESSION_TYPE", String.class)); + object.setWorkflowStatus(resultSet.getObject("WORKFLOW_STATUS", String.class)); + + sessionHistory.setObject(object); + return sessionHistory; + } + + @Override + public void store(Map map) { + //do nothing + } +} \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/SessionHistoryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/SessionHistoryMapStore.java index 764255ba4..6fb7d589c 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/SessionHistoryMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/SessionHistoryMapStore.java @@ -1,25 +1,11 @@ package ru.spcex.clearing.imdg.businessevent; -import com.hazelcast.config.EvictionConfig; -import com.hazelcast.config.MaxSizeConfig; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import org.springframework.dao.support.DataAccessUtils; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.misc.SessionHistory; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.base.TemplateEventMapStore; -import ru.spcex.clearing.imdg.config.element.ImdgHzEvictionConfig; import ru.spcex.platform.utils.time.TimeUtil; @Component @@ -29,16 +15,6 @@ public class SessionHistoryMapStore extends TemplateEventMapStore evictionConfig() { - ImdgHzEvictionConfig evctCfg = new ImdgHzEvictionConfig(); - evctCfg.setSize(5000); - evctCfg.setMaxSizePolicy(MaxSizeConfig.MaxSizePolicy.PER_NODE); - evctCfg.setEvictionPolicy(EvictionConfig.DEFAULT_EVICTION_POLICY); - evctCfg.setTimeToLiveSeconds(1800); - return Optional.of(evctCfg); - } - @Override public String getMapName() { return IMDGDistributedNames.Map_SessionHistory; @@ -57,80 +33,6 @@ public class SessionHistoryMapStore extends TemplateEventMapStore rows; - List list = Collections.singletonList(id); - try { - rows = load(list); - } catch (Throwable e) { // one retry - rows = load(list); - } - SessionHistory obj = DataAccessUtils.singleResult(rows); - if (obj != null && isLoadable(obj)) - return obj; - else - return null; - } - - @Override - public Map loadAll(Collection keys) { - log.debug("loadAll from " + getTableName() + " " + keys.size() + " keys"); - Map result = new HashMap<>(); - long start = System.currentTimeMillis(); - - // загрузить данные по ключам частями, чтобы не выйти за ограничения базы по кол-ву элементов в in clause - List keysSubList = new ArrayList<>(MAX_IN_CLAUSE_SIZE); - for (Iterator iterator = keys.iterator(); iterator.hasNext(); ) { - Long key = iterator.next(); - keysSubList.add(key); - if (keysSubList.size() == MAX_IN_CLAUSE_SIZE || !iterator.hasNext()) { - Collection rows = load(keysSubList); - for (SessionHistory row : rows) { - result.put(row.getId(), row); - } - keysSubList.clear(); - } - } - - log.debug("loadAll from " + getTableName() + " " + keys.size() + " keys done in " + (System.currentTimeMillis() - start) + "ms"); - - return result; - } - - @Override - public Collection load(Collection keys) { - Map> paramMap = Collections.singletonMap("ids", keys); - return namedParameterJdbcTemplate.query("select * from " + getTableName() + " where id in (:ids)", paramMap, - (resultSet, i) -> objectReader(resultSet)); - } - - protected SessionHistory objectReader(ResultSet resultSet) throws SQLException { - SessionHistory sessionHistory = new SessionHistory(); - Session object = new Session(); - - sessionHistory.setId(resultSet.getObject("ID", Long.class)); - sessionHistory.setEventTime(getInstantFromTimestamp(resultSet, "EVENT_TIME")); - sessionHistory.setUserId(resultSet.getObject("EVENT_USER_ID", Long.class)); - sessionHistory.setEventType(resultSet.getObject("EVENT_TYPE", String.class)); - - object.setId(resultSet.getObject("SESSION_ID", Long.class)); - object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT")); - object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); - object.setClearingDate(getLocalDateFromSqlDate(resultSet, "CLEARING_DATE")); - object.setSessionStatus(resultSet.getObject("SESSION_STATUS", String.class)); - object.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class)); - object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class)); - object.setUserId(resultSet.getObject("USER_ID", Long.class)); - object.setSection(resultSet.getObject("SECTION", String.class)); - object.setSessionType(resultSet.getObject("SESSION_TYPE", String.class)); - object.setWorkflowStatus(resultSet.getObject("WORKFLOW_STATUS", String.class)); - - sessionHistory.setObject(object); - return sessionHistory; - } - @Override public Object[] objectToField(SessionHistory historyLog) { Session object = historyLog.getObject();