/// <summary>存在チェックのみのメソッド</summary> /// <param name="filePath">[リソース ファイル]格納フォルダのパス</param> /// <param name="fileName">[リソース ファイル]名</param> /// <param name="throwException">存在しない場合例外をスローするかどうかを指定</param> /// <returns>存在する:true、存在しない:false</returns> /// <remarks>自由に利用できる。</remarks> public static bool Exists(string filePath, string fileName, bool throwException) { // パス文字結合 string loadfilepath = Path.Combine(filePath, fileName); // 環境変数の組み込み処理に対応 loadfilepath = StringVariableOperator.BuiltStringIntoEnvironmentVariable(loadfilepath); // 存在チェック if (File.Exists(loadfilepath)) { // 存在する。 return(true); } else { // 存在しない。 if (throwException) { throw new ArgumentException(String.Format( PublicExceptionMessage.RESOURCE_FILE_NOT_FOUND, loadfilepath)); } else { return(false); } } }
/// <summary>XmlDocumentをLoad</summary> /// <param name="filePath">string</param> /// <returns> /// 真 : ロードできた /// 偽 : ロードできなかった /// </returns> private static bool LoadFromFile(string filePath) { if (EmbeddedResourceLoader.Exists(filePath, false)) { XmlDocument xMLMSG = new XmlDocument(); // Load xMLMSG.LoadXml(EmbeddedResourceLoader.LoadXMLAsString(filePath)); // Save GetMessage.DicMSG[filePath] = GetMessage.FillDictionary(xMLMSG); return(true); } else if (ResourceLoader.Exists(filePath, false)) { XmlDocument xMLMSG = new XmlDocument(); // Load xMLMSG.Load(StringVariableOperator.BuiltStringIntoEnvironmentVariable(filePath)); // Save GetMessage.DicMSG[filePath] = GetMessage.FillDictionary(xMLMSG); return(true); } else { return(false); } }
/// <summary>Main</summary> static void Main(string[] args) { //////////////////////////////////////////////////////////////////////// // 簡素なサンプルなので、 // ・多重化(タスク毎、結果セットを分割) // ・フェッチ・サイズ(メモリ消費量を抑える) // ・コミット・インターバル、リラン // 等の考慮が別途必要になることがあります。 //////////////////////////////////////////////////////////////////////// // configの初期化 GetConfigParameter.InitConfiguration("appsettings.json"); // コマンドラインをバラす関数がある。 List <string> valsLst = null; Dictionary <string, string> argsDic = null; StringVariableOperator.GetCommandArgs('/', out argsDic, out valsLst); // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( System.Reflection.Assembly.GetExecutingAssembly().Location, "-", "SelectCount", argsDic["/DAP"] + "%" + argsDic["/MODE1"] + "%" + argsDic["/MODE2"] + "%" + argsDic["/EXROLLBACK"], new MyUserInfo("", "")); // 戻り値 TestReturnValue testReturnValue; // B層呼出し LayerB layerB = new LayerB(); testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) string error = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; error += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; error += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; Console.WriteLine(error); Console.ReadKey(); } else { // 結果(正常系) Console.WriteLine(testReturnValue.Obj.ToString() + "件のデータがあります"); Console.ReadKey(); } }
/// <summary>[リソース ファイル]から文字列を読み込む。</summary> /// <param name="filePath">[リソース ファイル]格納フォルダのパス</param> /// <param name="fileName">[リソース ファイル]名</param> /// <param name="enc">エンコード</param> /// <returns>[リソース ファイル]から読み込んだ文字列</returns> /// <remarks>自由に利用できる。</remarks> public static string LoadAsString(string filePath, string fileName, Encoding enc) { // パス文字結合 string loadfilepath = Path.Combine(filePath, fileName); // 環境変数の組み込み処理に対応 loadfilepath = StringVariableOperator.BuiltStringIntoEnvironmentVariable(loadfilepath); StreamReader sr = null; try { // 存在チェック if (File.Exists(loadfilepath)) { // 存在する。 } else { //存在しない。 throw new ArgumentException(String.Format( PublicExceptionMessage.RESOURCE_FILE_NOT_FOUND, loadfilepath)); } // 開く sr = new StreamReader(loadfilepath, enc); // 読む return(sr.ReadToEnd()); } finally { // nullチェック if (sr == null) { // 何もしない。 } else { // 閉じる sr.Close(); } } }
/// <summary>コンストラクタ</summary> public TransactionControl() { // トランザクション定義をロードする。 // リソース ローダでチェック(ここで落とすとハンドルされないので落とさない。) if (EmbeddedResourceLoader.Exists( GetConfigParameter.GetConfigValue(FxLiteral.XML_TC_DEFINITION), false)) { // トランザクション定義(XmlDocument)のロード this.XMLTCD.LoadXml( EmbeddedResourceLoader.LoadXMLAsString( GetConfigParameter.GetConfigValue(FxLiteral.XML_TC_DEFINITION))); } else if (ResourceLoader.Exists( GetConfigParameter.GetConfigValue(FxLiteral.XML_TC_DEFINITION), false)) { // トランザクション定義(XmlDocument)のロード this.XMLTCD.Load( StringVariableOperator.BuiltStringIntoEnvironmentVariable( GetConfigParameter.GetConfigValue(FxLiteral.XML_TC_DEFINITION))); } else { // チェック if (GetConfigParameter.GetConfigValue(FxLiteral.XML_TC_DEFINITION) == null || GetConfigParameter.GetConfigValue(FxLiteral.XML_TC_DEFINITION) == "") { // 定義が無い(offの扱い)。 // トランザクション定義(XmlDocument)を空で初期化 this.XMLTCD.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?><TCD></TCD>"); } else { // 定義が間違っている(エラー)。 // エラーをスロー throw new FrameworkException( FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH2[0], String.Format(FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH2[1], FxLiteral.XML_TC_DEFINITION)); } } }
/// <summary>Main</summary> static void Main(string[] args) { // コマンドラインをバラす関数がある。 List <string> valsLst = null; Dictionary <string, string> argsDic = null; StringVariableOperator.GetCommandArgs('/', out argsDic, out valsLst); // 引数クラス値(B層実行用) string screenId = System.Reflection.Assembly.GetExecutingAssembly().Location; string controlId = "-"; string actionType = "SQL"; // argsDic["/DAP"] + "%" + argsDic["/MODE1"] + "%" + argsDic["/MODE2"] + "%" + argsDic["/EXROLLBACK"]; MyUserInfo myUserInfo = new MyUserInfo("userName", "ipAddress"); // B層クラス LayerB layerB = new LayerB(); // ↓B層実行:主キー値を全て検索(ORDER BY 主キー)----------------------------------------------------- // 引数クラスを生成 VoidParameterValue selectPkListParameterValue = new VoidParameterValue(screenId, controlId, "SelectPkList", actionType, myUserInfo); // B層呼出し SelectPkListReturnValue selectPkReturnValue = (SelectPkListReturnValue)layerB.DoBusinessLogic(selectPkListParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); // 実行結果確認 if (selectPkReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) string error = "ErrorMessageID:" + selectPkReturnValue.ErrorMessageID + "\r\n"; error += "ErrorMessage:" + selectPkReturnValue.ErrorMessage + "\r\n"; error += "ErrorInfo:" + selectPkReturnValue.ErrorInfo + "\r\n"; Console.WriteLine(error); Console.ReadKey(); return; //バッチ処理終了 } // 戻り値取得 ArrayList pkList = selectPkReturnValue.PkList; // ↑B層実行:主キー値を全て検索(ORDER BY 主キー)----------------------------------------------------- int recordCount = pkList.Count; // 全レコード数 int initialIndex = 0; // 処理開始インデックス ※ todo:リラン時に途中から再開する場合は初期値を変更する int transactionCount = Convert.ToInt32(Math.Ceiling(((double)(recordCount - initialIndex)) / INTERMEDIATE_COMMIT_COUNT)); // 更新B層実行回数 // 性能測定 // 性能測定 - 開始 PerformanceRecorder pr = new PerformanceRecorder(); pr.StartsPerformanceRecord(); for (int transactionIndex = 0; transactionIndex < transactionCount; transactionIndex++) { ArrayList subPkList; // 主キー一覧(1トランザクション分) int subPkStartIndex; // 主キー(1トランザクション分)の開始位置 int subPkCount; // 主キー数(1トランザクション分) // 取り出す主キーの開始、数を取得 subPkStartIndex = initialIndex + (transactionIndex * INTERMEDIATE_COMMIT_COUNT); if (subPkStartIndex + INTERMEDIATE_COMMIT_COUNT - 1 > recordCount - 1) { subPkCount = (recordCount - initialIndex) % INTERMEDIATE_COMMIT_COUNT; } else { subPkCount = INTERMEDIATE_COMMIT_COUNT; } // 主キー一覧(1トランザクション分)を取り出す subPkList = new ArrayList(); subPkList.AddRange(pkList.GetRange(subPkStartIndex, subPkCount)); // ↓B層実行:バッチ処理を実行(1トランザクション分)---------------------------------------------------- // 引数クラスを生成 ExecuteBatchProcessParameterValue executeBatchProcessParameterValue = new ExecuteBatchProcessParameterValue(screenId, controlId, "ExecuteBatchProcess", actionType, myUserInfo); executeBatchProcessParameterValue.SubPkList = subPkList; // B層呼出し VoidReturnValue executeBatchProcessReturnValue = (VoidReturnValue)layerB.DoBusinessLogic(executeBatchProcessParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); // 実行結果確認 if (selectPkReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) string error = "ErrorMessageID:" + selectPkReturnValue.ErrorMessageID + "\r\n"; error += "ErrorMessage:" + selectPkReturnValue.ErrorMessage + "\r\n"; error += "ErrorInfo:" + selectPkReturnValue.ErrorInfo + "\r\n"; Console.WriteLine(error); Console.ReadKey(); return; // バッチ処理終了 } // ↑B層実行:バッチ処理を実行(1トランザクション分)---------------------------------------------------- } // 性能測定 - 終了 Console.WriteLine(pr.EndsPerformanceRecord()); Console.ReadKey(); }
/// <summary>コンストラクタ</summary> /// <remarks>CallController、ServiceInterfaceから利用するので、public</remarks> public InProcessNameService() { // インプロセス呼び出しの名前解決定義をロードする。 #region 埋め込まれたリソース ローダでチェック(ここで落とすとハンドルされないので落とさない。) if (EmbeddedResourceLoader.Exists( GetConfigParameter.GetConfigValue(FxLiteral.XML_TM_INPROCESS_DEFINITION), false)) { // インプロセス呼び出しの名前解決定義(XmlDocument)を[埋め込まれたリソース]で初期化 this.XMLTMD_InProcess.LoadXml(EmbeddedResourceLoader.LoadXMLAsString( GetConfigParameter.GetConfigValue(FxLiteral.XML_TM_INPROCESS_DEFINITION))); // 戻す return; } else { // 何もしない。 } #endregion #region リソース ローダでチェック(ここで落とすとハンドルされないので落とさない。) if (ResourceLoader.Exists( GetConfigParameter.GetConfigValue(FxLiteral.XML_TM_INPROCESS_DEFINITION), false)) { // インプロセス呼び出しの名前解決定義(XmlDocument)を[リソース]で初期化 this.XMLTMD_InProcess.Load( StringVariableOperator.BuiltStringIntoEnvironmentVariable( GetConfigParameter.GetConfigValue(FxLiteral.XML_TM_INPROCESS_DEFINITION))); // 戻す return; } else { // 何もしない。 } #endregion #region チェック(定義の有無や、定義の誤り) if (GetConfigParameter.GetConfigValue(FxLiteral.XML_TM_INPROCESS_DEFINITION) == null || GetConfigParameter.GetConfigValue(FxLiteral.XML_TM_INPROCESS_DEFINITION) == "") { // 定義が無い(offの扱い)。 // インプロセス呼び出しの名前解決定義(XmlDocument)を空で初期化 this.XMLTMD_InProcess.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?><TMD></TMD>"); } else { // 定義が間違っている(エラー)。 // 例外をスロー throw new FrameworkException( FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH2[0], String.Format(FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH2[1], FxLiteral.XML_TM_INPROCESS_DEFINITION)); } #endregion }
/// <summary>名前解決(URL)</summary> /// <param name="name">名前</param> /// <param name="url">URL</param> /// <param name="timeout">タイムアウト</param> /// <param name="props">プロパティ</param> internal void NameResolutionProtocolUrl(string name, out string url, out int timeout, out Dictionary <string, string> props) { // 初期化 url = ""; timeout = -1; props = new Dictionary <string, string>(); // 属性チェック用 XmlNode xmlNode = null; // Transmissionタグを取得 XmlElement xmlTransmission = this.XMLTMD_Protocol.GetElementById(name); // チェック if (xmlTransmission == null) { // Transmissionタグがない場合 // 例外をスロー throw new FrameworkException( FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0], String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1], String.Format(FrameworkExceptionMessage.NAMESERVICE_XML_FORMAT_ERROR_tm, name))); } else { // Transmissionタグがある場合 #region URL // url属性 xmlNode = xmlTransmission.Attributes[FxLiteral.XML_TM_PROTOCOL_ATTR_URL]; if (xmlNode == null) { // url属性なしの場合 // url_ref属性 xmlNode = xmlTransmission.Attributes[FxLiteral.XML_TM_PROTOCOL_ATTR_URL_REF]; if (xmlNode == null) { // url_ref属性なしの場合 // 例外をスロー throw new FrameworkException( FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0], System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1], System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_url1, name))); } else { // url_ref属性ありの場合 string url_ref = xmlNode.Value; if (this.XMLTMD_Protocol.GetElementById(url_ref) == null) { // IDFERからUrlタグを発見できない場合 // 例外をスロー throw new FrameworkException( FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0], System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1], System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_url2, url_ref))); } else { // IDFERからUrlタグを発見できた場合 // value属性 xmlNode = this.XMLTMD_Protocol.GetElementById(url_ref).Attributes[FxLiteral.XML_CMN_ATTR_VALUE]; if (xmlNode == null) { // value属性なしの場合 // 例外をスロー throw new FrameworkException( FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0], System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1], System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_url3, url_ref))); } else { // value属性ありの場合 // urlを取得 url = xmlNode.Value; if (url == "") { // urlが空の場合 // 例外をスロー throw new FrameworkException( FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0], System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1], System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_url4, FxLiteral.XML_TM_PROTOCOL_TAG_URL, url_ref))); } } } } } else { // url属性ありの場合 // urlを取得 url = xmlNode.Value; if (url == "") { // urlが空の場合 // 例外をスロー throw new FrameworkException( FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0], System.String.Format( FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1], System.String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_url4, FxLiteral.XML_TM_TAG_TRANSMISSION, name))); } } #endregion #region タイムアウト // timeout属性 xmlNode = xmlTransmission.Attributes[FxLiteral.XML_TM_PROTOCOL_ATTR_TIMEOUT]; if (xmlNode == null) { // timeout属性なしの場合 → なにもしない。 } else { // timeout属性ありの場合 string timeoutString = xmlNode.Value; // チェック(数値か) if (int.TryParse(timeoutString, out timeout)) { // timeout = int.Parse(timeoutString); } else { // timeout値のフォーマットエラー // 例外をスロー throw new FrameworkException( FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0], String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1], String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_to, name))); } } #endregion #region プロパティ // prop_ref属性 xmlNode = xmlTransmission.Attributes[FxLiteral.XML_TM_PROTOCOL_ATTR_PROP_REF]; if (xmlNode == null) { // prop_ref属性なしの場合 → なにもしない。 } else { // prop_ref属性ありの場合 string prop_ref = xmlNode.Value; if (this.XMLTMD_Protocol.GetElementById(prop_ref) == null) { // IDFERからPropタグを発見できない場合 // 例外をスロー throw new FrameworkException( FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0], String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1], String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_prop1, prop_ref))); } else { // IDFERからPropタグを発見できた場合 // value属性 xmlNode = this.XMLTMD_Protocol.GetElementById(prop_ref).Attributes[FxLiteral.XML_CMN_ATTR_VALUE]; // プロパティ文字列を取得 if (xmlNode == null) { // value属性なしの場合 // 例外をスロー throw new FrameworkException( FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[0], String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR[1], String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_prop2, prop_ref))); } else { // value属性ありの場合 // プロパティ文字列をディクショナリに変換 string propStr = xmlNode.Value; props = StringVariableOperator.GetPropsFromPropString(propStr); } } } #endregion } }
public static string BuiltStringIntoEnvironmentVariable(string builtString) { return(StringVariableOperator.BuiltStringIntoEnvironmentVariable(builtString)); }
public static void GetCommandArgs(char prefixChar, out Dictionary <string, string> argsDic, out List <string> valsLst) { StringVariableOperator.GetCommandArgs(prefixChar, out argsDic, out valsLst); return; }
public static Dictionary <string, string> GetPropsFromPropString(string propString) { return(StringVariableOperator.GetPropsFromPropString(propString)); }
static void Main(string[] args) { // configの初期化 GetConfigParameter.InitConfiguration("appsettings.json"); // コマンドラインをバラす関数がある。 List <string> valsLst = null; Dictionary <string, string> argsDic = null; StringVariableOperator.GetCommandArgs('/', out argsDic, out valsLst); if (argsDic.ContainsKey("/SQL")) { SqlConnection cn = new SqlConnection(GetConfigParameter.GetConnectionString("ConnectionString_SQL")); cn.Open(); SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM SHIPPERS", cn); Console.WriteLine("SQL:" + cmd.ExecuteScalar().ToString() + "件"); } if (argsDic.ContainsKey("/ODP")) { OracleConnection cn = new OracleConnection(GetConfigParameter.GetConnectionString("ConnectionString_ODP")); cn.Open(); OracleCommand cmd = new OracleCommand("SELECT COUNT(*) FROM SHIPPERS", cn); Console.WriteLine("ODP:" + cmd.ExecuteScalar().ToString() + "件"); } if (argsDic.ContainsKey("/MCN")) { MySqlConnection cn = new MySqlConnection(GetConfigParameter.GetConnectionString("ConnectionString_MCN")); cn.Open(); MySqlCommand cmd = new MySqlCommand("SELECT COUNT(*) FROM Shippers", cn); Console.WriteLine("MCN:" + cmd.ExecuteScalar().ToString() + "件"); } if (argsDic.ContainsKey("/NPS")) { NpgsqlConnection cn = new NpgsqlConnection(GetConfigParameter.GetConnectionString("ConnectionString_NPS")); cn.Open(); NpgsqlCommand cmd = new NpgsqlCommand("SELECT COUNT(*) FROM SHIPPERS", cn); Console.WriteLine("NPS:" + cmd.ExecuteScalar().ToString() + "件"); } if (argsDic.ContainsKey("/REDIS")) { ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost"); IDatabase cache = redis.GetDatabase(); cache.StringSet("key:jp:hello", "こんにちは"); cache.StringSet("key:jp:goodbye", "さようなら"); Console.WriteLine(cache.StringGet("key:jp:hello")); Console.WriteLine(cache.StringGet("key:jp:goodbye")); } if (argsDic.ContainsKey("/MONGO")) { string connectionString = "mongodb://*****:*****@localhost:27017"; MongoClient client = new MongoClient(connectionString); IMongoDatabase db = client.GetDatabase("testdb"); IMongoCollection <Person> collection = db.GetCollection <Person>("testtbl"); // 全ドキュメントの削除 collection.DeleteMany(FilterDefinition <Person> .Empty); // ドキュメントの挿入 Person person = null; person = new Person { Name = "Dan", Age = 18, }; collection.InsertOne(person); person = new Person { Name = "Bob", Age = 22, }; collection.InsertOne(person); person = new Person { Name = "John", Age = 30, }; collection.InsertOne(person); // ドキュメントの参照 var persons = collection.Find(FilterDefinition <Person> .Empty).ToList(); foreach (Person _person in persons) { Console.WriteLine(JsonConvert.SerializeObject(_person)); } } }
/// <summary>コンストラクタ</summary> /// <remarks>インナークラス</remarks> public SharedPropertyManager() { // 共有情報定義をロードする。 XmlDocument xMLSP = new XmlDocument(); if (GetConfigParameter.GetConfigValue(FxLiteral.XML_SP_DEFINITION) == null || GetConfigParameter.GetConfigValue(FxLiteral.XML_SP_DEFINITION) == "") { // 定義が無い(offの扱い)。 // 共有情報定義(XmlDocument)を空で初期化 xMLSP.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?><SPD></SPD>"); } else { //// 定義が間違っている(エラー)。 //// エラーをスロー //throw new FrameworkException( // FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH2[0], // String.Format(FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH2[1], // FxLiteral.XML_SP_DEFINITION)); #region 埋め込まれたリソース ローダでチェック(ここで落とすとハンドルされないので落とさない。) if (EmbeddedResourceLoader.Exists( GetConfigParameter.GetConfigValue(FxLiteral.XML_SP_DEFINITION), false)) { // 共有情報定義(XmlDocument)を[埋め込まれたリソース]で初期化 xMLSP.LoadXml(EmbeddedResourceLoader.LoadXMLAsString( GetConfigParameter.GetConfigValue(FxLiteral.XML_SP_DEFINITION))); //// 戻す //return; } else { // 何もしない。 } #endregion #region リソース ローダでチェック(ここで落とすとハンドルされないので落とさない。) if (ResourceLoader.Exists( GetConfigParameter.GetConfigValue(FxLiteral.XML_SP_DEFINITION), false)) { // 共有情報定義(XmlDocument)を[リソース]で初期化 xMLSP.Load( StringVariableOperator.BuiltStringIntoEnvironmentVariable( GetConfigParameter.GetConfigValue(FxLiteral.XML_SP_DEFINITION))); //// 戻す //return; } else { // 何もしない。 } #endregion } #region すべてのSHAREDPROPタグをDictionary化 // すべてのSHAREDPROPタグを取得、大文字・小文字は区別する。 XmlNodeList xmlNodeList = xMLSP.GetElementsByTagName(FxLiteral.XML_SP_TAG_SHARED_PROPERTY); foreach (XmlNode xmlNodeSP in xmlNodeList) { // 属性の取得 XmlNode xmlNodeKey = xmlNodeSP.Attributes.GetNamedItem(FxLiteral.XML_CMN_ATTR_KEY); XmlNode xmlNodeVal = xmlNodeSP.Attributes.GetNamedItem(FxLiteral.XML_CMN_ATTR_VALUE); if (xmlNodeKey == null) { // id属性なしの場合 throw new FrameworkException( FrameworkExceptionMessage.SHAREDPROPERTY_XML_FORMAT_ERROR[0], String.Format(FrameworkExceptionMessage.SHAREDPROPERTY_XML_FORMAT_ERROR[1], String.Format(FrameworkExceptionMessage.SHAREDPROPERTY_XML_FORMAT_ERROR_ATTR, FxLiteral.XML_CMN_ATTR_KEY, "-"))); } if (xmlNodeVal == null) { // description属性なしの場合 throw new FrameworkException( FrameworkExceptionMessage.SHAREDPROPERTY_XML_FORMAT_ERROR[0], String.Format(FrameworkExceptionMessage.SHAREDPROPERTY_XML_FORMAT_ERROR[1], String.Format(FrameworkExceptionMessage.SHAREDPROPERTY_XML_FORMAT_ERROR_ATTR, FxLiteral.XML_CMN_ATTR_VALUE, xmlNodeKey.Value))); } this.DicSP.Add(xmlNodeKey.Value, xmlNodeVal.Value); } #endregion }
/// <summary> /// log4net.ILogインスタンスの取得 /// </summary> /// <param name="loggerName">ロガー名</param> /// <returns>log4netのインターフェイス</returns> public static log4net.ILog GetLog4netIf(string loggerName) { lock (LogManager._lock) { // null対策 if (LogManager._logIfHt == null) { LogManager._logIfHt = new Dictionary <string, log4net.ILog>(); } // すでにlog4net.ILogインスタンスが存在する。 if (LogManager._logIfHt.ContainsKey(loggerName)) // Dic化でnullチェック変更 { // 生成済みのlog4net.ILogインスタンスを返す。 return((log4net.ILog)LogManager._logIfHt[loggerName]); } else { // #12-start // 定義ファイル string log4netConfFile = GetConfigParameter.GetConfigValue(PubLiteral.LOG4NET_CONF_FILE); // log4netの設定ファイルのパス if (log4netConfFile == null || log4netConfFile == "") { // 定義ファイルのパスが無い場合 // 空のロガーを返す(エラーにはならない) #if NETSTD return(log4net.LogManager.GetLogger(Assembly.GetEntryAssembly(), "")); #else return(log4net.LogManager.GetLogger("")); #endif } else { #if NETSTD // Repositoryなる何か。 ILoggerRepository logRep = log4net.LogManager.CreateRepository( Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy)); #else #endif // 埋め込まれたリソース ローダで存在チェック if (EmbeddedResourceLoader.Exists(log4netConfFile, false)) { // ログ定義 [埋め込まれたリソース] XmlDocument xmlDef = new XmlDocument(); // Exceptionが上がり得る。 xmlDef.LoadXml(EmbeddedResourceLoader.LoadXMLAsString(log4netConfFile)); if (xmlDef["log4net"] == null) { // XmlElement(log4net)が無い場合 throw new ArgumentException(String.Format( PublicExceptionMessage.XML_ELEMENT_ERROR, PublicExceptionMessage.XML_ELEMENT_ERROR_LOG4NET)); } // log4net #if NETSTD XmlConfigurator.Configure(logRep, (XmlElement)xmlDef["log4net"]); #else XmlConfigurator.Configure(xmlDef["log4net"]); #endif } else { // リソース ローダで存在チェック(存在しなければエラー) ResourceLoader.Exists(log4netConfFile, true); // ログ定義 [リソース ファイル] → ストリームを開く FileStream s = new FileStream( StringVariableOperator.BuiltStringIntoEnvironmentVariable(log4netConfFile), FileMode.Open, FileAccess.Read, FileShare.Read); // log4netのXML形式の設定ファイルを読み込む。 #if NETSTD XmlConfigurator.Configure(logRep, s); #else XmlConfigurator.Configure(s); #endif s.Close(); } // log4net.ILogインスタンスを初期化する。 #if NETSTD LogManager._logIfHt.Add( loggerName, log4net.LogManager.GetLogger(Assembly.GetEntryAssembly(), loggerName)); #else LogManager._logIfHt.Add(loggerName, log4net.LogManager.GetLogger(loggerName)); #endif // 生成したlog4net.ILogインスタンスを返す。 return((log4net.ILog)LogManager._logIfHt[loggerName]); } // #12-end } } }