Inheritance: MessageObjectBase
        protected override ResponseItem DoProcessRequestItem(RequestItem requestItem) {
            if(log.IsDebugEnabled)
                log.Debug("요청 Id=[{0}], Method=[{1}], Query=[{2}]에 대한 작업 처리를 시작합니다.",
                          requestItem.Id, requestItem.Method, requestItem.Query);

            var responseItem = new ResponseItem(requestItem);

            if(requestItem.Query.IsWhiteSpace())
                return responseItem;

            if(IsDebugEnabled)
                log.Debug("요청정보를 처리합니다. 메소드=[{0}], 인자=[{1}]",
                          requestItem.Method, requestItem.Parameters.CollectionToString());
            try {
                var command = DataCommandTool.GetCommand(requestItem.Method);

                Guard.Assert(command != null, "해당하는 메소드에 정의된 Command 가 없습니다. method=[{0}]", requestItem.Method);

                ExecuteQueries(requestItem.PreQueries);

                responseItem.ResultValue = command.Execute(AdoRepository, requestItem);

                if(IsDebugEnabled)
                    log.Debug("메소드를 실행했습니다. method=[{0}], resultValue=[{1}]", requestItem.Method, responseItem.ResultValue);

                ExecuteQueries(requestItem.PostQueries);
            }
            catch(Exception ex) {
                if(log.IsErrorEnabled)
                    log.ErrorException("쿼리문 수행에 실패했습니다. Query=" + requestItem.Query, ex);

                responseItem.Errors.Add(new ErrorMessage(ex));
            }

            if(log.IsDebugEnabled)
                log.Debug("요청 Id=[{0}], Method=[{1}], Query=[{2}]에 대한 작업 처리를 완료했습니다!!!",
                          requestItem.Id, requestItem.Method, requestItem.Query);

            return responseItem;
        }
Example #2
0
        /// <summary>
        /// 요청 쿼리 문을 수행하는데, 
        /// <see cref="IAdoRepository.ExecuteNonQuery(string,IAdoParameter[])" /> 나 
        /// <see cref="IAdoRepository.ExecuteScalar(string,IAdoParameter[])"/> 를 실행합니다.
        /// </summary>
        /// <param name="requestItem"></param>
        /// <param name="responseItem"></param>
        /// <param name="adoParameters"></param>
        protected virtual void ExecuteQuery(RequestItem requestItem, ResponseItem responseItem, IAdoParameter[] adoParameters) {
            // Scalar 값 구하기
            if(requestItem.ResponseFormat == ResponseFormatKind.Scalar) {
                if(IsDebugEnabled)
                    log.Debug("ExecuteNonScalar 를 수행하여, ResultValue 값을 설정합니다...");

                responseItem.ResultValue = AdoRepository.ExecuteScalar(requestItem.Query, adoParameters);
                return;
            }

            // 쿼리문이라면, 실행
            var query = requestItem.Query;
            if(AdoTool.IsSqlString(query)) {
                if(IsDebugEnabled)
                    log.Debug("ExecuteNonQuery 를 수행하고, 영향받은 행의 수를 ResultValue에 설정합니다...");

                responseItem.ResultValue = AdoRepository.ExecuteNonQuery(requestItem.Query, adoParameters);
                return;
            }


            if(IsDebugEnabled)
                log.Debug("ExecuteProcedure를 수행하고, Parameter 정보들을 ResultSet에 설정합니다.");

            //  Procedure 라면, Output Parameter 등을 ResultSet으로 반환함.
            //! 단 Procedure가 ResultSet을 반환해야 하는 경우는 OpenQuery를 수행할 수 있도록 ResponseFormat 을 ResponseFormatKind.ResultSet 으로 할 것
            //
            var parameters = AdoRepository.ExecuteProcedure(query, adoParameters);

            if(parameters != null) {
                responseItem.ResultValue = parameters.GetReturnValue();

                var row = new ResultRow(parameters.ToDictionary(p => p.Name, p => p.Value));
                responseItem.ResultSet.Add(row);
            }
        }
Example #3
0
        /// <summary>
        /// 요청 쿼리 문을 수행하여, <see cref="ResultSet"/> 으로 빌드하여, 응답 결과를 적용합니다.
        /// </summary>
        protected virtual void OpenQuery(RequestItem requestItem, ResponseItem responseItem, IAdoParameter[] adoParameters) {
            if(IsDebugEnabled)
                log.Debug("쿼리문을 수행하여 결과셋을 설정합니다...");

            using(var cmd = AdoRepository.GetCommand(requestItem.Query)) {
                var reader = AdoRepository.ExecuteReader(cmd, adoParameters);
                var resultSet = reader.CreateResultSet(NameMapper,
                                                       requestItem.FirstResult.GetValueOrDefault(),
                                                       requestItem.MaxResults.GetValueOrDefault(int.MaxValue));

                responseItem.ResultSet = resultSet;
            }
        }
Example #4
0
        protected virtual ResponseItem DoProcessRequestItem(RequestItem requestItem) {
            if(log.IsDebugEnabled)
                log.Debug("요청 Id=[{0}], Method=[{1}], Query=[{2}]에 대한 작업 처리를 시작합니다.",
                          requestItem.Id, requestItem.Method, requestItem.Query);

            var stopwatch = new Stopwatch();
            stopwatch.Start();

            var responseItem = new ResponseItem(requestItem);

            if(requestItem.Query.IsWhiteSpace())
                return responseItem;

            try {
                ExecuteQueries(requestItem.PreQueries);

                var adoParams = requestItem.BuildAdoParameters().ToArray();

                if(requestItem.ResponseFormat == ResponseFormatKind.ResultSet)
                    OpenQuery(requestItem, responseItem, adoParams);
                else
                    ExecuteQuery(requestItem, responseItem, adoParams);

                ExecuteQueries(requestItem.PostQueries);
            }
            catch(Exception ex) {
                if(log.IsErrorEnabled)
                    log.ErrorException("쿼리문 수행에 실패했습니다. Query=" + requestItem.Query, ex);

                responseItem.Errors.Add(new ErrorMessage(ex));
            }

            stopwatch.Stop();
            responseItem.ExecutionTime = stopwatch.Elapsed;

            if(log.IsDebugEnabled)
                log.Debug("요청 Id=[{0}], Method=[{1}], Query=[{2}]에 대한 작업 처리를 완료했습니다!!! 수행시간=[{3}]",
                          requestItem.Id, requestItem.Method, requestItem.Query, responseItem.ExecutionTime);

            return responseItem;
        }