めざましテレビ

今日の早耳ムスメ徳澤直子ちゃん,お題は「直子オススメ!! ヘルシーメニューのお店」.
またしても冬太り対策? (^^;
ともあれ (JW),直チンですが,いつもと印象が違いますね.髪型? うーみゅ,微妙に前髪が違うなぁ.去年は (向かって) 右側に分け目があったけど今日は逆だ.色は... 別に変わってないかなぁ.初登場の時ほど明るくないと思うけど.
なんかですね,微妙にいつもと違うのです.ちょっと地味めというか華がないというか普通にかわいい女のコになっちゃってる感じ.まぁ,それでもかわいいからいいか.
今日はネイビーのベルベットジャケットを着てます.やっぱりベルベットいいねぇ.


昨日は成人の日だったということで優ちゃん登場.でも昨日のジャストでもやってましたから!! 残念!!!!

旅美人

今週の旅美人も桜井裕美ちゃん,訪れたのは青森県弘前市
桜井裕美ちゃん 4 週連続登場の二回目.場所も先週と同じ.なので桜井裕美ちゃんの衣装も先週と同じ.つまんないの.
先週は座っていたので膝上丈に見えたロールアップのデニム,実はギリギリ膝下くらいまでの長さだったようです.短めに見えるけど.それにブーツを合わせているのですが,これがニーハイの上の方を折り返しているような感じで,デニムとつながって見えるのですが,なんか変.(^^;
ともあれ (JW),今週は映像的には今ひとつ.天気が悪かったせいもあるのかなぁ.
次週は十和田湖.そう,番組直後に流れる JR 東日本の美しい CM と同じロケーションに同じキャスト.超期待!!!!


P.S.
番組中に桜井裕美ちゃんを下から見上げるように撮影したシーンがあったのですが,その時の表情が彼女によく似ていてどっきり.JJ ではそんな風に思ったことなかったけどなぁ.最近 JJ 買ってないなぁ.明日買って来ようかなぁ.

時刻が出ない

おかしいなぁ,見出しの先頭を「*T*」で始めると時刻になるはずなのに今日はならない...
01/11 の 01:11 を狙ったのにぃ...


02:30 追記
「*T*」じゃなくて「*t*」だったのですね...
昨日までは「*T*」でもうまくいってた気がするんだけど? うーみゅ...

S2Remoting 0.0.5 リリース

変更点は以下の通りです.

  • ターゲットとなるリモートオブジェクトごとに URL を解決する機能を URLBasedConnector のサブクラス TargetSpecificURLBasedConnector に移動しました.

ころころと変更して申し訳ありませんが,S2Hessian,S2XmlRpc は新しい TargetSpecificURLBasedConnector を使ってください.
S2RMIURLBasedConnector を使ってください.

セッターインジェクションでの型変換

要望というほどでもない思いつき第一弾.
S2Remoting でプロパティの型が URL だと dicon ファイルの設定が面倒なので String にした (正確には setter メソッドの引数型を String にした) のですが,こういうのってコンテナでサポートしてもらえた方がうれしいかなぁとか思っちゃいました.
つまり,

  • プロパティに OGNL 式の値の型を割り当てることが出来ない.
  • プロパティの型がインタフェースでも抽象クラスでもない.
  • プロパティの型が OGNL 式の値の型を唯一の引数の型とするコンストラクタを持っている.

という条件が成立した場合には,最後の条件で該当したコンストラクタでインスタンス化したオブジェクトをプロパティに設定してもらえないかなぁ,ということです.
最後のやつは一致した型で探すか代入可能な型で探すかあると思うのですが,代入可能な型の引数を持つコンストラクタは複数あり得る上に,それがインタフェース型だと優先順位を付けることも困難だと思うので,条件を絞って一致する型でいいかなと思いました.


そんなわけで (どんなわけで?),実験コーナー!!
プロパティに値を設定するのは org.seasar.framework.beans.impl.PropertyDescImpl が行っています.その中に convertIfNeed(Object) というメソッドがあり,ここでプリミティブ型や BigDecimalDate などの変換がサポートされています.
その最後の return の前に

        if (!propertyType_.isAssignableFrom(arg.getClass()) &&
                !Modifier.isAbstract(propertyType_.getModifiers())) {
            try {
                Constructor ctor = ClassUtil.getConstructor(propertyType_, 
                        new Class[] {arg.getClass()});
                return ConstructorUtil.newInstance(ctor, new Object[] {arg});
            }
            catch (NoSuchConstructorRuntimeException ignore) {
            }
        }

        return arg;
    }

を追加!!
これで次のように dicon ファイルを記述することが出来るようになりました.

<components>
    <component name="foo" class="type.Foo">
        <property name="url">"http://localhost/path"</property>
        <property name="formatter">"yyyy/MM/dd"</property>
        <property name="bigInt">"123"</property>
    </component>
</components>

プロパティ url はもちろん java.net.URL 型です.プロパティ formatterjava.text.SimpleDateFormat 型.プロパティ bigIntjava.math.BigInteger 型です.Number 型の一員なのに,なぜか現在はサポートが漏れています.(^^;
課題はプリミティブ型を引数とするコンストラクタをうまく拾えないことかなぁ.
ともあれ (JW),ちょっとだけ便利な感じがしませんか?

S2Tx と例外

要望というほどでもない思いつき第二弾.
S2Tx の提供するインターセプタは,対象となるメソッドが例外をスローすると無条件にトランザクションロールバックします (自分が開始したトランザクションに限りますが).
一方,EJB の CMT では,システム例外とされている RuntimeExceptionRemoteException 以外の例外がスローされてもトランザクションはコミットされます.ロールバックしたければ EJBContext (または UserTransaction) の setRollbackOnly(true) を呼び出します.
そして Spring はデフォルトの動作は EJB と同様なのですが,トランザクションプロパティの設定で特定の例外に対してコミットするかロールバックするかを個別に設定することが出来ます.
基本的に,例外をスローする場合はトランザクションロールバックしたいケースが圧倒的に多いと思うので,S2Tx の動きはデフォルトとして好ましいように思います.


とはいえ,ごくごくごくごくまれに例外をスローするんだけれどもトランザクションをコミットしたいという場合があるかもしれません.そんなわけで (どんなわけで?),S2Tx をちょっとだけ拡張するってのはどうかなぁ.


そんなわけで (どんなわけで?),実験コーナー!!
S2Tx の各インターセプタのベースになっている AbstractTxInterceptor に以下のコードを追加.

    private static class TxRule {
        private Class exceptionClass_;
        private boolean committing_;

        public TxRule(Class exceptionClass, boolean commit) {
            exceptionClass_ = exceptionClass;
            committing_ = commit;
        }
        public Class getExceptionClass() {
            return exceptionClass_;
        }
        public boolean isCommitting() {
            return committing_;
        }
    }

    private List txRules_ = new ArrayList();

    public void addCommitRule(Class exceptionClass) {
        txRules_.add(new TxRule(exceptionClass, true));
    }

    public void addRollbackRule(Class exceptionClass) {
        txRules_.add(new TxRule(exceptionClass, false));
    }

    public boolean isCommitting(Throwable t) {
        for (int i = 0; i < txRules_.size(); ++i) {
            TxRule rule = (TxRule) txRules_.get(i);
            if (rule.getExceptionClass().isAssignableFrom(t.getClass())) {
                return rule.isCommitting();
            }
        }
        return false;
    }

そして RequiredInterceptor なんかを次のように修正.

        } catch (Throwable t) {
            if (began) {
                if (isCommitting(t)) {
                    commit();
                }
                else {
                    rollback();
                }
            }
            throw t;
        }

そして,次のような dicon ファイルを用意.

<components namespace="ejb">
    <component name="requiredTx" class="org.seasar.extension.tx.RequiredInterceptor">
        <initMethod name="addRollbackRule"><arg>@java.lang.RuntimeException@class</arg></initMethod>
        <initMethod name="addRollbackRule"><arg>@java.rmi.RemoteException@class</arg></initMethod>
        <initMethod name="addCommitRule"><arg>@java.lang.Exception@class</arg></initMethod>
    </component>
    ・・・
</components>

これで EJB 互換の宣言的トランザクションが必要な場合は,j2ee.requiredTx の代わりに ejb.requiredTx を使うことが出来るようになります.Spring のようにきめ細かい制御が必要な場合は独自のインターセプタを定義することができます.
EJB や Spring からの移行を考えている人には安心ではないかと思うのですがどうでしょう?

出演予定 TV 番組

この近辺 (どこ?) で話題のモデルが出演するテレビ番組を分かるだけ掲載します.
新規分は赤字で (レギュラー除く).直近分は太字で.

蛯原友里
01/14 (金) 23:15〜00:10 ANB 「特命係長・只野仁
山田優
01/15 (土) 19:00〜19:57 CX 「脳内エステ IQ サプリ」

CanCam 02 月号 エビちゃんベストセレクション 20

CanCam2005年02月号の蛯原友里ちゃん

CanCam から,お気に入りの蛯原友里ちゃんを紹介しようというこのコーナー.
今日も「スマートアイ プティ」という目薬のタイアップ広告で「かわいい系エビちゃん OL のアイケアは "簡単&スマート" !」の友里ちゃん.
優しげな表情ですね.01/09 のベストセレクション もよかったですが,こっちもなかなか.まぁ,なんてったって友里ちゃんですからね.素晴らしいに決まってます♪
そんなわけで (どんなわけで?),やっぱり CanCam 買うしか!!