環境づくり
環境を作った際のメモ書きです。幾つかの手順はなくてもいいかしれない。
- all_in_one_testlinkjp_20081027_174.exeとtestlink_1.8.1.zipをダウンロード
- all_in_one_testlinkjp_20081027_174.exeを実行してC:\にインストール
- インストール先のxampp_start.exeを実行し起動
- Webで動作確認
- xampp_stop.exe
- htdoc/testlinkを退避
- testlink_1.8.1.zip解凍してhtdocに配置
- 退避先のファイルconfig_db.inc.phpをコピー
- WebでInstallのURLを指定して更新処理
- WebでTestLinkにログインして更新を確認
- 画面に警告がでているのでログを確認
- 対応できるところだけ修正し、設定ファイルを修正しSILENTモードに
- 設定ファイルがどれだかわからなかったのでGrepして見つける
- 書き換える前にxampp_stop.exeを実行
- Grepでみつけたconfig.inc.phpを修正
- installのフォルダを削除
- xampp_start.exe
- WebでTestLinkにログインして警告が無くなっているのを確認
1.8.1にしたのはTestLinkAdapterを使用したいためです。
Loggerクラスはスレッドセーフじゃなかった
Logger.GetLoggerがJava版とちがってスレッドセーフじゃないことを今日同僚が発見した。S2のLoggerクラスが保持してるHashtableはHashtable.Synchronized でOKなんですが、GetLoggerメソッドが排他制御をしていないためにほぼ同時に同じTypeを渡してコールした場合に例外を吐く可能性があります。S2Container.NETがLoggerクラスを使用する場合はこの現象が起きない書き方(Staticなメンバーで宣言)しているのでわかる範囲で問題がありません。なおかつ一度Loggerクラスが保持しているHashtableにエントリーが出来てしまえば現象は起きません。
というわけでアプリ側でS2Container.NETのLoggerを使用する場合は少々気をつける必要があります。
とりあえず対応として
- S2Container.NETのLoggerは使用せず log4netを直に使用する。
- S2Container.NETの使用方法でLoggerを使用する。(Staticなメンバーとして使用)
- 下駄クラスを作成して排他処理を行う。
そもそもアプリ側でLoggerクラスは使用しないのが作法でしたらごめんなさい。あと対応してもらうよう明日にでもMLに投稿しようかなと
接続文字列に悩む(解決編?)
試行錯誤して動いてるので、この対応方法で行こうと思います。
接続文字列が確定した段階で
protected SelectableDataSourceProxyWithDictionary dataSourceProxyWithDictionary;
使用箇所のクラスにSelectableDataSourceProxyWithDictionary変数を定義しQuillでdataSourceProxyWithDictionaryをバインドしてもらいます。
var ds = dataSourceProxyWithDictionary.DataSourceCollection["hoge"] as TxDataSource;
ds.ConnectionString = "hogehoge"
そして、使用箇所のメソッド内でTxDataSourceを引っ張ってきて、接続文字列を設定しています。