S2Valiを作りながら提供側に必要な技術を学ぶ(2)
毎朝2時間は仕事に直接関係ないことをやろうと決め、その枠組みでS2Valiを進めてます。(これも仕事に使うといえば使うのですが。。)
S2Valiでは s2vali-rules.xml (Struts等でおなじみのcommons-validatorの定義ファイル) を読込んでValidationを実行します。
しかしメソッド呼び出しのたびに毎回XMLファイルを読みに行くのはあり得ません。
そこでValidatorResourcesContainerというコンポーネントを作って、initMethodでファイルの読み込みからValidatorResources(commons-validatorのクラス)を生成するようにしました。
ファイルの読み込みはひとまず classpath直下にあるs2vali-rules.xml という名前固定でいきます。
リソースファイルはjar内にアーカイブされた状態でも読めないとだめです。
そこで、自分が[Seasar-user:15840] で指摘させていただいた問題(env.txtがjarから読めなかったという問題) のトラックレコードを見て先人の知恵を拝借することにしました。
※S2には便利なUtilクラスがたくさん含まれているのでそれらをうまく活用することは、フレームワークの使い手側にとっても非常に有益です。
env.txtの読み込みは以下のように行なわれていました。(途中略)
final URL url = ResourceUtil.getResourceNoException(filePath); ↓ file = ResourceUtil.getFile(url); ↓ if (file != null) { calcValue(); else { calcValue(url); }
calcValue(url)の中では、 final InputStream is = URLUtil.openStream(url); のようにInputStreamを取得しています。
ResourceUtil,URLUtilといったseasarのUtilクラス群を使えば楽できるわけですね。
ところでなぜいったんfileから取得することを試みているのか?
これはもしかして jar外のものを優先して読み、無ければjar内から取得するためなのでしょうか。。
HotDeploy対応のためこのようになっているとのことです。
今日はJarファイルからリソースを取得できることを確認して、ひとまず終了。