Inheritance: MessageBase
        public void VerifyResponseMessage(ResponseMessage responseMsg) {
            responseMsg.Should().Not.Be.Null();
            responseMsg.HasError.Should().Be.False();

            responseMsg.CreatedUtcTime.HasValue.Should().Be.True();
            responseMsg.Items.All(item => item.ExecutionTime.HasValue).Should("ExecutionTime.HasValue").Be.True();
        }
Example #2
0
        /// <summary>
        /// DATA 처리를 위한 요청정보를 처리해서, 응답정보를 빌드해서 반환합니다.
        /// </summary>
        /// <param name="requestMessage">요청 메시지</param>
        /// <returns>응답 메시지</returns>
        public virtual ResponseMessage Execute(RequestMessage requestMessage) {
            var responseMsg = new ResponseMessage();

            if(IsDebugEnabled)
                log.Debug("요청정보에 따른 작업을 시작합니다...");

            if(requestMessage == null) {
                if(log.IsWarnEnabled)
                    log.Warn("요청 정보가 NULL입니다.");
                responseMsg.Errors.Add(new ErrorMessage { Code = 0, Message = DataServiceTool.NoRequestProvided });
                return responseMsg;
            }

            TransactionScope txScope = null;

            try {
                // 1. 사전 작업
                //
                responseMsg.MessageId = requestMessage.MessageId;

                if(requestMessage.Transactional) {
                    if(IsDebugEnabled)
                        log.Debug("요청작업이 Transaction을 필요로 하여, Transaction을 시작합니다...");

                    txScope = AdoTool.CreateTransactionScope(TransactionScopeOption.Required, IsolationLevel.ReadCommitted);
                }

                //
                // 2. 본 작업
                //
                ExecuteInternal(requestMessage, responseMsg);


                // 3. 사후 작업
                //
                if(txScope != null) {
                    txScope.Complete();

                    if(IsDebugEnabled)
                        log.Debug("요청작업의 Transaction을 Commit 했습니다.");
                }
            }
            catch(Exception ex) {
                responseMsg.AddError(ex);

                if(log.IsErrorEnabled)
                    log.Error("요청정보에 따른 작업처리 중 예외가 발생했습니다.", ex);

                if(txScope != null)
                    txScope.Dispose();
            }

            if(IsDebugEnabled)
                log.Debug("요청정보에 따른 작업을 완료했습니다!!! Request MessageId=[{0}], Response MessageId=[{1}]", requestMessage.MessageId,
                          responseMsg.MessageId);

            return responseMsg;
        }
Example #3
0
        protected override void DoProcessRequestItems(RequestMessage requestMessage, ResponseMessage responseMessage) {
            // 요청작업이 병렬로 처리해서는 안될 경우를 대비
            //
            if(requestMessage.AsParallel == false) {
                base.DoProcessRequestItems(requestMessage, responseMessage);
                return;
            }

            if(IsDebugEnabled)
                log.Debug("요청 항목들을 병렬로 처리합니다...");

            // 병렬로 작업을 처리하고, 응답메시지에 추가합니다.
            requestMessage.Items
                .AsParallel()
                .AsOrdered()
                .ForAll(requestItem => {
                            var responseItem = DoProcessRequestItem(requestItem);
                            responseMessage.Items.Add(responseItem);
                        });
        }
Example #4
0
        /// <summary>
        /// 지정된 예외정보를 포함하는 응답메시지를 빌드합니다. 
        /// </summary>
        /// <param name="exceptions"></param>
        /// <returns></returns>
        public static ResponseMessage CreateResponseMessageWithException(params Exception[] exceptions) {
            var responseMsg = new ResponseMessage();

            foreach(var ex in exceptions)
                responseMsg.AddError(ex);

            return responseMsg;
        }
Example #5
0
 protected virtual void DoProcessRequestItems(RequestMessage requestMessage, ResponseMessage responseMessage) {
     // 3. 요청 항목별로 작업 처리
     foreach(var requestItem in requestMessage.Items) {
         var responseItem = DoProcessRequestItem(requestItem);
         responseMessage.Items.Add(responseItem);
     }
 }
Example #6
0
        protected virtual void ExecuteInternal(RequestMessage requestMessage, ResponseMessage responseMessage) {
            if(IsDebugEnabled)
                log.Debug("요청 항목 순서대로 작업을 처리합니다.");

            // 1. 요청 메소드의 실제 Query 문을 매핑합니다.
            DataServiceTool.LoadQueryStatements(this, requestMessage);

            // 2. 요청 메시지 전체에 대한 사전 작업 수행
            ExecuteQueries(requestMessage.PreQueries);

            // 3. 요청 항목별로 작업 처리
            DoProcessRequestItems(requestMessage, responseMessage);

            // 4. 요청 메시지 전체에 대한 사후 작업 수행
            ExecuteQueries(requestMessage.PostQueries);
        }
        protected virtual void AssertResponseMessage(ResponseMessage responseMsg) {
            if(responseMsg.HasError)
                if(log.IsErrorEnabled)
                    log.Error(responseMsg.Errors.CollectionToString());

            Assert.IsFalse(responseMsg.HasError, responseMsg.Errors.CollectionToString());
            Assert.IsTrue(responseMsg.Items.Count > 0);

            responseMsg.Items.All(item => item.ResultSet.Count > 0).Should().Be.True();
        }