コード例 #1
0
        /// <summary>
        /// executing transaction
        /// </summary>
        /// <param name="cbm"></param>
        /// <param name="vo"></param>
        /// <returns></returns>
        internal static ValueObject Invoke(CbmController cbm, ValueObject vo, UserData userData, TransactionContextFactory trxFactory, string connectionString)
        {
            if (cbm == null)
            {
                MessageData messageData = new MessageData("ffce00001", Properties.Resources.ffce00001, System.Reflection.MethodBase.GetCurrentMethod().Name);
                logger.Error(messageData, new NullReferenceException());
                throw new SystemException(messageData, new NullReferenceException());
            }

            if (trxFactory == null)
            {
                //please write code here
                defaultTrxFactory.GetTransactionContext(userData);
                trxFactory = defaultTrxFactory;
            }


            IDbTransaction dbTransaction = null;
            IDbConnection  connection    = null;
            //Get TransactionContext
            TransactionContext trxContext = trxFactory.GetTransactionContext(userData);

            try
            {
                connection = new NpgsqlConnection(connectionString);

                trxContext.DbConnection = connection;
                trxContext.DbConnection.Open();

                dbTransaction = trxContext.DbConnection.BeginTransaction();

                //Get DB Processing Time
                CbmController GetDBProcessingTimeCbm = trxFactory.GetDBProcessingTimeCbm();

                TimeVo time = (TimeVo)GetDBProcessingTimeCbm.Execute(trxContext, vo);

                trxContext.ProcessingDBDateTime = time.CurrentDateTime;

                //Start transaction
                ValueObject returnedVo = cbm.Execute(trxContext, vo);



                //commit
                dbTransaction.Commit();

                return(returnedVo);
            }
            catch (ApplicationException appEx)
            {
                //rollback
                if (dbTransaction != null)
                {
                    dbTransaction.Rollback();
                }

                MessageData messageData = new MessageData("ffce00003", Properties.Resources.ffce00003, appEx.Message);
                logger.Error(messageData, appEx);
                throw appEx;
            }
            catch (SystemException sysEx)
            {
                //rollback
                if (dbTransaction != null)
                {
                    dbTransaction.Rollback();
                }

                MessageData messageData = new MessageData("ffce00003", Properties.Resources.ffce00003, sysEx.Message);
                logger.Error(messageData, sysEx);

                throw sysEx;
            }
            catch (Exception Ex)
            {
                //rollback
                if (dbTransaction != null)
                {
                    dbTransaction.Rollback();
                }

                MessageData messageData = new MessageData("ffce00003", Properties.Resources.ffce00003, Ex.Message);
                logger.Error(messageData, Ex);

                throw new SystemException(messageData);
            }
            finally
            {
                try
                {
                    if (connection != null)
                    {
                        connection.Close();
                    }
                }
                catch (Exception ex)
                {
                    //need to be implemented
                    MessageData messageData = new MessageData("ffce00003", Properties.Resources.ffce00003, ex.Message);
                    logger.Error(messageData, ex);

                    throw new SystemException(messageData);
                }
            }
        }
コード例 #2
0
ファイル: MySqlCbmInvoker.cs プロジェクト: D-Khoa/MyGit
        /// <summary>
        /// executing transaction
        /// </summary>
        /// <param name="cbm">cbm  to be executed</param>
        /// <param name="vo">input vo for the cbm</param>
        /// <param name="userData">userdata</param>
        /// <param name="trxFactory">TransactionContextFactory to get transactioncontext using userdata</param>
        /// <param name="connectionString">connectionString for connecting with another database</param>
        /// <exception cref="Com.Nidec.Mes.Framework.ApplicationException">application exception handled in cbm access and cbm invoke</exception>
        /// <exception cref="Com.Nidec.Mes.Framework.SystemException">system exception handled in cbm access and cbm invoke</exception>
        /// <exception cref="System.Exception">Unhandled exception occured has been thrown as system exception in cbm access and cbm invoke</exception>
        /// <returns>output vo will be returned / exception will be thrown for error cases</returns>
        internal static ValueObject Invoke(CbmController cbm, ValueObject vo, UserData userData, TransactionContextFactory trxFactory, string connectionString)
        {
            if (cbm == null)
            {
                MessageData messageData = new MessageData("ffce00041", Properties.Resources.ffce00041, System.Reflection.MethodBase.GetCurrentMethod().Name);
                logger.Error(messageData, new NullReferenceException());
                throw new SystemException(messageData, new NullReferenceException());
            }

            if (trxFactory == null)
            {
                //please write code here
                defaultTrxFactory.GetTransactionContext(userData);
                trxFactory = defaultTrxFactory;
            }


            IDbTransaction dbTransaction = null;
            IDbConnection  connection    = null;
            //Get TransactionContext
            TransactionContext trxContext = trxFactory.GetTransactionContext(userData);

            try
            {
                connection = new MySqlConnection(connectionString);

                trxContext.DbConnection = connection;
                trxContext.DbConnection.Open();

                dbTransaction = trxContext.DbConnection.BeginTransaction();

                //Start transaction
                ValueObject returnedVo = cbm.Execute(trxContext, vo);

                //commit
                dbTransaction.Commit();

                return(returnedVo);
            }
            catch (ApplicationException appEx)
            {
                //rollback
                DbTransactionRollback(dbTransaction);

                MessageData messageData = new MessageData("ffce00042", Properties.Resources.ffce00042, appEx.Message);
                logger.Error(messageData, appEx);

                throw appEx; //throw original app exception
            }
            catch (SystemException sysEx)
            {
                //rollback
                DbTransactionRollback(dbTransaction);

                MessageData messageData = new MessageData("ffce00043", Properties.Resources.ffce00043, sysEx.Message);
                logger.Error(messageData, sysEx);

                throw sysEx; //throw original sys exception
            }
            catch (Exception Ex)
            {
                //rollback
                DbTransactionRollback(dbTransaction);

                MessageData messageData = new MessageData("ffce00044", Properties.Resources.ffce00044, Ex.Message);
                logger.Error(messageData, Ex);

                throw new SystemException(messageData, Ex); //throw original exception as sys exception
            }
            finally
            {
                try
                {
                    if (connection != null)
                    {
                        connection.Close();
                    }
                }
                catch (Exception ex)
                {
                    //need to be implemented
                    MessageData messageData = new MessageData("ffce00045", Properties.Resources.ffce00045, ex.Message);
                    logger.Error(messageData, ex);

                    throw new SystemException(messageData, ex); //throw original exception as sys exception
                }
            }
        }