sato

【Seasar2】設定ファイルの内容をDI

佐藤です。

先週に引き続き、Seasar2環境でのあれこれについて。


いろんな案件をこなすたび、毎回思うのが
設定ファイルをXMLにしようか、iniファイル形式にしようか、、、
というあたり。
といっても最近は殆どXMLで、Digesterで読んでたんですが。


Seasar2で開発するにあたって「設定ファイル周りもなんとか簡単にできないもんかな」と思いまして、いろいろ調べていました。

こちらにて
 XML内に[文字列] [数値] [Map] [List]を区別して書くことができ、
 [Map]や[List]をネストさせることも可能なDigesterの使い方

が乗っていたので、それを参考にしまして、階層的な設定もすんなり書けるXML設定ファイルができました。
これで、毎回XMLをどう書くかを気にしなくて良いです。

ただ、これだけだと単に「器用な設定ファイル」が出来ただけで、Seasarとは関係ない。

というわけで、設定ファイルに
  <string key="hoge">設定内容</string>
とか設定されていたら、Tomcat起動時に読み込んでS2Containerに登録しちゃって

 @Resource
 private String hoge;

とかやったら、hogeに"設定内容"がDIされたりするのはどうでしょう?

と思って作ってみました。
これで、設定ファイル用クラス(ConfigUtilとか)を用意して
 ConfigUtil.getString("hoge")
とかやらなくていいのです。
コード内に設定ファイルのキーを示すリテラルが無くなって良い感じです。


実現方法としては、diconファイルに
<component name="initializeService" class="jp.co.ncad.hoge.Init">
    <initMethod name="init"/>
</component>
と言う感じで起動時に実行されるクラスを置いて


public class Init {
    @Resource
    private S2Container container;
   
    private static Digester digester =
        DigesterLoader.createDigester(Configuration.class.getResource(RULE_XML_NAME));


    public void init(){
        Map map = (Map)digester.parse(CONFIG_XML_PATH);

        for (String key : map.keySet()) {
            container.register(new SimpleComponentDef(defaultMap.get(key), key) {
                public AutoBindingDef getAutoBindingDef() {
                    return AutoBindingDefFactory.AUTO;
                }
            });
        }
    }
}

と言う感じ。
SimpleComponentDefの実装を内部クラスでやってるあたり・・・・ちょっと手荒かな?という気もしなくも無いですが、一応実現できました。
他にもっと良い方法があるのかもしれません。

難点は、Tomcat再起動しないと設定ファイル再読込みしない、ということで
再起動せずに毎回設定読むような要望があると対応できないのです。
きっとこれもやり方次第で何とかなるんだろうなと思いますが。

もう少しS2Containerについての知識を深めないといけませんね。。

Seasar2てんこ盛り

佐藤です。

1月中旬から、珍しく他の会社に常駐して作業をしています。

1月中旬から開始で、2月中旬にはリリースと言う超絶スケジュールですが
画面数が少ないことと、Seasar2を有効に使ったアジャイル開発で何とか間に合いそうです。

「Seasar2を有効に使う」ということですが、今回の案件はSeasar2てんこ盛りです。
開発はSAStruts+Mayaa+S2JDBC+Mobylet+S2Chronos
単体試験はS2JUnit4


WEBで検索したり、SeasarのMLを検索したりしても、こんな組み合わせは見当たりませんでした(汗)

組み合わせるにあたって苦労した点や、便利だった点を、何回かに分けて紹介していきたいと思います。


まずは、苦労した点、、というかまだ解決していなくて、誰か教えてくださいという感じなのですが、SAStrutsとS2Chronosを組み合わせると、Hot Deployがうまく動かないのです。。

こちらの記事が2008/9/24で、S2Chronosの最終リリース(1.0.0)が2008/9/8なので、対応されていない、と言うことですよね。。
うーん。

Hot Deployが動かないなら、app.diconに
<include condition="#ENV != 'ct'" path="chronos-extension.dicon"/>
こんな感じで、Cool Deployの時だけS2Chronosを動かそうとしてみましたが

web.xmlにS2ChronosServletを登録してるので、
起動した時点でS2コンテナにSchedulerが無いと怒られる始末。。

S2ChronosServletを拡張してSchedulerが無かったらスルーするようにすれば良いんだけど、今回の案件の思想的には微妙ですのでやめておきました。。

結局、開発を全体的にCool Deployで行っていて、効率ダウンです。

SeasarMLに投稿してみようかな。

ITSスカイパック

佐藤です。

12/23(水)がお休みで、代休が2日分溜まっていたこともあり
21,22と代休消費して沖縄旅行に行ってきました。

日本CADは、健康保険組合「関東ITソフトウェア健康保険」に加入していて
その特典(?)として保養所とかスポーツジムなどの優待とかあるのですが
その中に「ITSスカイパック」というのがありまして、それを利用しました。

簡単に説明すると、旅行金額の半額(上限1人あたり2万円)の補助金を出してくれるのです。
1人あたり2万なので、夫婦で最大4万円の補助が出ます。
子供もいますが、まだ小さくて旅行代金が必要ないので、その分は補助が出ませんでした。
出たら出たでびっくりしますが。

今回の沖縄旅行の場合、2人で3泊4日76,000円のツアーだったので、半額の38,000円で行けてしまいました。
しかもレンタカー付き。
ホテルも安いとこから1ランクアップしたりして。

実は去年もスカイパックで旅行(北海道)に行っていて、2人で3万弱だったと思います。

ITSの回し者ではないですが、、こういうのはどんどん利用していった方がいいですね!
ただ、ITSスカイパック、どうやら来年度から上限が2万から1万になってしまうようですが。。。

上限減額は残念ですが、今後も気分のリフレッシュに利用したいと思います。

SQLのフォーマット

仕事でSQLを書いていると、長ーいSQLになってしまったりする上に
括弧の開始と終了でインデントが違ったり
他人の書いたSQLで見辛かったり
実行時に「右カッコがありません」とか言われても、どこに無いのか分からなかったり

そういうことがままあります。。

人によって結構フォーマットが違うし、皆さん多分自分なりのこだわりがあるのだろうと思います。

CSEというDB操作用のツールでCtrl+Qで整形できたりしますが、
整形ルールを変更できないので、自分流のSQLにはならなかったりしますね。

そこでちょっとgoogle先生に聞いてみると、たくさんツールが出てきます。
今のところ一番理想に近いのが SQLConvert です。

・カンマやANDを行の後ろに付けるか前に付けるか変更できる
・SELECT,FROM,UPDATE等の後で改行する、しないを変更できる
・インデントをタブかスペースか選べる
などがいいところです。

テキストエディタなどでCtrl+Cでコピーして
SQLConvertで「実行」して
テキストエディタに貼り付けると、整形されて貼り付けられます。
「実行」はCSEと同じくCtrl+Qでもできるので、起動しておけばEclipse上でもCSEのように整形できるのがいいですね。


ただ、
・EXISTSの中身とかを整形してくれない
・INNER JOIN ... ON の整形がイマイチ
・カラム名の前のインデントを半角スペースじゃなくタブに変更させて欲しい
などなど、、まだ完璧に整形してくれるツールに出会えていません。

Eclipseのプラグインでフォーマット出来そうな奴は
DBViewer Plugin for Eclipse とか
BlancoSqlEditorPlugin とかありますが
やはり整形ルールが微妙ですねー

Eclipseのjavaのフォーマッタぐらい色々指定できる奴、ないのかな。。
情報求む!

一段落

こんにちは、佐藤です。

しばらく長い案件に携わっていて、昨日やっとその案件が一段落しました。
日本CADとしては一段落ですが、現場はまだまだゴタゴタしているようなので、この後も何かと対応することはありそうですが、なんとか終わってほっとしています。


そんな中、今日は健康診断でした。
先週は追い込みで非常に不規則な生活だったので、ちょっと風邪気味だったりするのですが。。
毎年「やせぎみ」判定が出ますが、基本的には健康なので、多少風邪気味でも大丈夫でしょう。

健康診断自体の結果は後日ですが、今日の時点で分かるのは身体測定の結果です。
身長・体重はほとんど変わりませんでしたが、一点大きく変わったことが。

去年の年末にレーシックを受けてメガネにさよならしたので、今年は裸眼視力を測るのでした。

レーシック直後は2.0
1ヶ月検診も3ヶ月検診も2.0だったのですが
6ヶ月以降は先述の案件で忙しく、検診に行かなかったのです。。
多少は視力低下していると覚悟しています。


視力検査のところでまず言われたのが
「以前はメガネでしたが、今日はコンタクトですか?」

いえ、裸眼です。と答えると
「レーシック受けられたんですか?」


おお、判断が早い。
ということはやっぱり受けている方もかなりいるんですかね。

肝心の結果は
「両目とも1.2ですね~」

ふむ、大分低下してますね。
とはいえ、元が0.1とかだったので2.0も1.2もよく見えることに変わりはないので良しとします。


仕事も落ち着いてきたので、たまに画面から目を離しつつがんばろうと思います。

livedoor プロフィール
QRコード
QRコード
  • ライブドアブログ