めざましテレビ
今日の早耳ムスメは徳澤直子ちゃん,お題は「直子オススメ!! ヘルシーメニューのお店」.
またしても冬太り対策? (^^;
ともあれ (JW),直チンですが,いつもと印象が違いますね.髪型? うーみゅ,微妙に前髪が違うなぁ.去年は (向かって) 右側に分け目があったけど今日は逆だ.色は... 別に変わってないかなぁ.初登場の時ほど明るくないと思うけど.
なんかですね,微妙にいつもと違うのです.ちょっと地味めというか華がないというか普通にかわいい女のコになっちゃってる感じ.まぁ,それでもかわいいからいいか.
今日はネイビーのベルベットジャケットを着てます.やっぱりベルベットいいねぇ.
昨日は成人の日だったということで優ちゃん登場.でも昨日のジャストでもやってましたから!! 残念!!!!
旅美人
今週の旅美人も桜井裕美ちゃん,訪れたのは青森県の弘前市.
桜井裕美ちゃん 4 週連続登場の二回目.場所も先週と同じ.なので桜井裕美ちゃんの衣装も先週と同じ.つまんないの.
先週は座っていたので膝上丈に見えたロールアップのデニム,実はギリギリ膝下くらいまでの長さだったようです.短めに見えるけど.それにブーツを合わせているのですが,これがニーハイの上の方を折り返しているような感じで,デニムとつながって見えるのですが,なんか変.(^^;
ともあれ (JW),今週は映像的には今ひとつ.天気が悪かったせいもあるのかなぁ.
次週は十和田湖.そう,番組直後に流れる JR 東日本の美しい CM と同じロケーションに同じキャスト.超期待!!!!
P.S.
番組中に桜井裕美ちゃんを下から見上げるように撮影したシーンがあったのですが,その時の表情が彼女によく似ていてどっきり.JJ ではそんな風に思ったことなかったけどなぁ.最近 JJ 買ってないなぁ.明日買って来ようかなぁ.
Lakers 105 - 96 Timberwolves
\(^o^)/
第 3 クオーターを追えて 9 点のビハインドから逆転勝利!!
この前の Inter といい,見事な演出で.(^^;
Kobe 31 得点,放ったシュート 19 本のうち 11 本が 3P で半数以上の 6 本を決めたようです.さすが!!
S2.1.9
- components21.dtdのcomponents属性を一部変更しました。
おぉ,昨日書いたばかりの対応をしてくださっている!!
ありがとうございます!!
S2Remoting 0.0.5 リリース
変更点は以下の通りです.
- ターゲットとなるリモートオブジェクトごとに URL を解決する機能を
URLBasedConnector
のサブクラスTargetSpecificURLBasedConnector
に移動しました.
ころころと変更して申し訳ありませんが,S2Hessian,S2XmlRpc は新しい TargetSpecificURLBasedConnector
を使ってください.
S2RMI は URLBasedConnector
を使ってください.
セッターインジェクションでの型変換
要望というほどでもない思いつき第一弾.
S2Remoting でプロパティの型が URL
だと dicon ファイルの設定が面倒なので String
にした (正確には setter メソッドの引数型を String
にした) のですが,こういうのってコンテナでサポートしてもらえた方がうれしいかなぁとか思っちゃいました.
つまり,
- プロパティに OGNL 式の値の型を割り当てることが出来ない.
- プロパティの型がインタフェースでも抽象クラスでもない.
- プロパティの型が OGNL 式の値の型を唯一の引数の型とするコンストラクタを持っている.
という条件が成立した場合には,最後の条件で該当したコンストラクタでインスタンス化したオブジェクトをプロパティに設定してもらえないかなぁ,ということです.
最後のやつは一致した型で探すか代入可能な型で探すかあると思うのですが,代入可能な型の引数を持つコンストラクタは複数あり得る上に,それがインタフェース型だと優先順位を付けることも困難だと思うので,条件を絞って一致する型でいいかなと思いました.
そんなわけで (どんなわけで?),実験コーナー!!
プロパティに値を設定するのは org.seasar.framework.beans.impl.PropertyDescImpl
が行っています.その中に convertIfNeed(Object)
というメソッドがあり,ここでプリミティブ型や BigDecimal
,Date
などの変換がサポートされています.
その最後の 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
型です.プロパティ formatter
は java.text.SimpleDateFormat
型.プロパティ bigInt
は java.math.BigInteger
型です.Number
型の一員なのに,なぜか現在はサポートが漏れています.(^^;
課題はプリミティブ型を引数とするコンストラクタをうまく拾えないことかなぁ.
ともあれ (JW),ちょっとだけ便利な感じがしませんか?
S2Tx と例外
要望というほどでもない思いつき第二弾.
S2Tx の提供するインターセプタは,対象となるメソッドが例外をスローすると無条件にトランザクションをロールバックします (自分が開始したトランザクションに限りますが).
一方,EJB の CMT では,システム例外とされている RuntimeException
や RemoteException
以外の例外がスローされてもトランザクションはコミットされます.ロールバックしたければ 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 からの移行を考えている人には安心ではないかと思うのですがどうでしょう?
CanCam 02 月号 エビちゃんベストセレクション 20
CanCam から,お気に入りの蛯原友里ちゃんを紹介しようというこのコーナー.
今日も「スマートアイ プティ」という目薬のタイアップ広告で「かわいい系エビちゃん OL のアイケアは "簡単&スマート" !」の友里ちゃん.
優しげな表情ですね.01/09 のベストセレクション もよかったですが,こっちもなかなか.まぁ,なんてったって友里ちゃんですからね.素晴らしいに決まってます♪
そんなわけで (どんなわけで?),やっぱり CanCam 買うしか!!