/// <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); } } }
/// <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 } } }