This commit is contained in:
parent
2c66412e97
commit
4791bc457e
3 changed files with 120 additions and 99 deletions
|
|
@ -117,7 +117,7 @@ public class StateLoaderImpl implements IStateLoader {
|
||||||
Imdg<SpcexObjectBase> imdgSearch = getHistImdg(IMDGDistributedNames.Map_SearchSessionHistory, SpcexObjectBase.class);
|
Imdg<SpcexObjectBase> imdgSearch = getHistImdg(IMDGDistributedNames.Map_SearchSessionHistory, SpcexObjectBase.class);
|
||||||
ImdgPredicateBuilder predicateBuilder = imdgSearch.predicateBuilder();
|
ImdgPredicateBuilder predicateBuilder = imdgSearch.predicateBuilder();
|
||||||
ImdgPredicate imdgPredicate = predicateBuilder.equals("sessionId", sessionId);
|
ImdgPredicate imdgPredicate = predicateBuilder.equals("sessionId", sessionId);
|
||||||
Imdg<SessionHistory> sessionHistoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SessionHistory, SessionHistory.class);
|
Imdg<SessionHistory> sessionHistoryImdg = getHistImdg(IMDGDistributedNames.Map_SessionHistory, SessionHistory.class);
|
||||||
return imdgSearch.getCollectionIdsByPredicate(imdgPredicate).stream()
|
return imdgSearch.getCollectionIdsByPredicate(imdgPredicate).stream()
|
||||||
.map(sessionHistoryImdg::getSingleObjectByID)
|
.map(sessionHistoryImdg::getSingleObjectByID)
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
|
|
|
||||||
|
|
@ -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<ImdgHzEvictionConfig> 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<SessionHistory> rows;
|
||||||
|
List<Long> 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<Long, SessionHistory> loadAll(Collection<Long> keys) {
|
||||||
|
log.debug("loadAll from " + getTableName() + " " + keys.size() + " keys");
|
||||||
|
Map<Long, SessionHistory> result = new HashMap<>();
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// загрузить данные по ключам частями, чтобы не выйти за ограничения базы по кол-ву элементов в in clause
|
||||||
|
List<Long> keysSubList = new ArrayList<>(MAX_IN_CLAUSE_SIZE);
|
||||||
|
for (Iterator<Long> iterator = keys.iterator(); iterator.hasNext(); ) {
|
||||||
|
Long key = iterator.next();
|
||||||
|
keysSubList.add(key);
|
||||||
|
if (keysSubList.size() == MAX_IN_CLAUSE_SIZE || !iterator.hasNext()) {
|
||||||
|
Collection<SessionHistory> 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<SessionHistory> load(Collection<Long> keys) {
|
||||||
|
Map<String, Collection<Long>> 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<Long, SessionHistory> map) {
|
||||||
|
//do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,25 +1,11 @@
|
||||||
package ru.spcex.clearing.imdg.businessevent;
|
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.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.clearing.classes.statics.data.misc.Session;
|
import ru.clearing.classes.statics.data.misc.Session;
|
||||||
import ru.clearing.classes.statics.data.misc.SessionHistory;
|
import ru.clearing.classes.statics.data.misc.SessionHistory;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
|
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
|
||||||
import ru.spcex.clearing.imdg.config.element.ImdgHzEvictionConfig;
|
|
||||||
import ru.spcex.platform.utils.time.TimeUtil;
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
|
@ -29,16 +15,6 @@ public class SessionHistoryMapStore extends TemplateEventMapStore<SessionHistory
|
||||||
super(jdbcTemplate);
|
super(jdbcTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<ImdgHzEvictionConfig> 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
|
@Override
|
||||||
public String getMapName() {
|
public String getMapName() {
|
||||||
return IMDGDistributedNames.Map_SessionHistory;
|
return IMDGDistributedNames.Map_SessionHistory;
|
||||||
|
|
@ -57,80 +33,6 @@ public class SessionHistoryMapStore extends TemplateEventMapStore<SessionHistory
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public SessionHistory load(Long id) {
|
|
||||||
if (!isLoadable(id)) return null;
|
|
||||||
Collection<SessionHistory> rows;
|
|
||||||
List<Long> 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<Long, SessionHistory> loadAll(Collection<Long> keys) {
|
|
||||||
log.debug("loadAll from " + getTableName() + " " + keys.size() + " keys");
|
|
||||||
Map<Long, SessionHistory> result = new HashMap<>();
|
|
||||||
long start = System.currentTimeMillis();
|
|
||||||
|
|
||||||
// загрузить данные по ключам частями, чтобы не выйти за ограничения базы по кол-ву элементов в in clause
|
|
||||||
List<Long> keysSubList = new ArrayList<>(MAX_IN_CLAUSE_SIZE);
|
|
||||||
for (Iterator<Long> iterator = keys.iterator(); iterator.hasNext(); ) {
|
|
||||||
Long key = iterator.next();
|
|
||||||
keysSubList.add(key);
|
|
||||||
if (keysSubList.size() == MAX_IN_CLAUSE_SIZE || !iterator.hasNext()) {
|
|
||||||
Collection<SessionHistory> 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<SessionHistory> load(Collection<Long> keys) {
|
|
||||||
Map<String, Collection<Long>> 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
|
@Override
|
||||||
public Object[] objectToField(SessionHistory historyLog) {
|
public Object[] objectToField(SessionHistory historyLog) {
|
||||||
Session object = historyLog.getObject();
|
Session object = historyLog.getObject();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue