From 3dcb785ebb07dae3b9e1bbd62a68adfaf99de538 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 24 May 2023 13:15:29 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-290 --- .../session/stage/AbstractSession.java | 68 +++++++++++++++++++ .../stage/PrimaryAuctionBnSession.java | 57 +--------------- .../session/stage/StageException.java | 4 ++ 3 files changed, 74 insertions(+), 55 deletions(-) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/StageException.java diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java new file mode 100644 index 000000000..c159463d4 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java @@ -0,0 +1,68 @@ +package ru.spcex.clearing.session.stage; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ru.clearing.classes.statics.data.misc.Session; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.IMessageResolver; + +import java.util.concurrent.atomic.AtomicReference; + +public class AbstractSession { + private final Logger log = LoggerFactory.getLogger(getClass()); + + protected final Imdg sessionImdg; + protected final IMessageResolver messageResolver; + protected final AtomicReference currStage = new AtomicReference<>(); + protected Session currSession; + + public AbstractSession( + ImdgProvider imdgProvider, + IMessageResolver messageResolver) { + this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); + this.messageResolver = messageResolver; + } + + protected StageResult runStage(TaskType type, ISessionStage stage) { + return runStage(type, null, stage); + } + + @SuppressWarnings("unchecked") + protected StageResult runStage(TaskType type, T payload, ISessionStage stage) { + continueRunning(type); + log.info("session.id={} step {} started", currSession.getId(), currStage.get()); + Task t = new Task<>(type, payload); + StageResult stgRes = stage.submit(t); + log.info("session.id={} step {} result: {} ", + currSession.getId(), + currStage.get(), + stgRes.success ? "success" : messageResolver.resolve(stgRes.error)); + if (!stgRes.success) { + endSession(); + throw new StageException(); + } + return (StageResult) stgRes; + } + + protected void endSession() { + synchronized (this.currStage) { + this.currStage.set(null); + this.currSession = null; + } + } + + protected void continueRunning(TaskType t) { + synchronized (this.currStage) { + this.currStage.set(t); + } + } + + protected boolean checkStage(TaskType t) { + synchronized (this.currStage) { + return this.currStage.get().equals(t); + } + } + +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java index 3d7a35f1d..9468f4658 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java @@ -5,22 +5,19 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.execution.ExecutionCommon; import ru.clearing.classes.statics.data.misc.Session; -import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.session.stage.impl.*; import ru.spcex.clearing.session.stage.task.*; import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.SessionStatus; import ru.spcex.platform.enumeration.SessionType; -import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IMessageResolver; import java.util.List; -import java.util.concurrent.atomic.AtomicReference; @Service -public class PrimaryAuctionBnSession { +public class PrimaryAuctionBnSession extends AbstractSession { private final Logger log = LoggerFactory.getLogger(getClass()); private final BalanceRevise balanceRevise; private final DealsPrepare dealsPrepare; @@ -34,11 +31,6 @@ public class PrimaryAuctionBnSession { private final FinishingSession finishingSession; private final EndStageNotification endStageNotification; - private Imdg sessionImdg; - private final IMessageResolver messageResolver; - private final AtomicReference currStage = new AtomicReference<>(); - private Session currSession; - public PrimaryAuctionBnSession( ImdgProvider imdgProvider, BalanceRevise balanceRevise, @@ -50,6 +42,7 @@ public class PrimaryAuctionBnSession { FormingPaymentInstruction formingPaymentInstruction, UnlockResources unlockResources, FinishingSession finishingSession, EndStageNotification endStageNotification, IMessageResolver messageResolver) { + super(imdgProvider, messageResolver); this.balanceRevise = balanceRevise; this.dealsPrepare = dealsPrepare; this.requirementsAndObligationCreation = requirementsAndObligationCreation; @@ -60,9 +53,6 @@ public class PrimaryAuctionBnSession { this.unlockResources = unlockResources; this.finishingSession = finishingSession; this.endStageNotification = endStageNotification; - - this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); - this.messageResolver = messageResolver; } public void runSession(BaseRequest req) { @@ -135,27 +125,6 @@ public class PrimaryAuctionBnSession { } } - private StageResult runStage(TaskType type, ISessionStage stage) { - return runStage(type, null, stage); - } - - @SuppressWarnings("unchecked") - private StageResult runStage(TaskType type, T payload, ISessionStage stage) { - continueRunning(type); - log.info("session.id={} step {} started", currSession.getId(), currStage.get()); - Task t = new Task<>(type, payload); - StageResult stgRes = stage.submit(t); - log.info("session.id={} step {} result: {} ", - currSession.getId(), - currStage.get(), - stgRes.success ? "success" : messageResolver.resolve(stgRes.error)); - if (!stgRes.success) { - endSession(); - throw new StageException(); - } - return (StageResult) stgRes; - } - private boolean startSession() { synchronized (this.currStage) { if (this.currStage.get() != null) { @@ -175,26 +144,4 @@ public class PrimaryAuctionBnSession { } } } - - private void endSession() { - synchronized (this.currStage) { - this.currStage.set(null); - this.currSession = null; - } - } - - private void continueRunning(TaskType t) { - synchronized (this.currStage) { - this.currStage.set(t); - } - } - - private boolean checkStage(TaskType t) { - synchronized (this.currStage) { - return this.currStage.get().equals(t); - } - } - - private static class StageException extends RuntimeException { - } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/StageException.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/StageException.java new file mode 100644 index 000000000..0f79a5c86 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/StageException.java @@ -0,0 +1,4 @@ +package ru.spcex.clearing.session.stage; + +class StageException extends RuntimeException { +}