ひがやすを技術ブログ

電通国際情報サービスのプログラマ

プロダクト計画

今年のプロダクト計画を発表します。状況に応じて、優先順位を変えているので、以前言ってたことと違うところもあります。

  • 1月の早いうち。EJB3に対応したSeasar2
  • 1末。S2EJB3Unit:EJB3を簡単にテストするためのフレームワーク。詳しくは別のエントリで。
  • 2中。S2Dxo
  • 2末。TeedaCore EA1。JSFを簡単にテストするためのフレームワークTeedaUnit(名称仮)を含む。
  • 3末。TeedaCoreリリース。TeedaCoreとSeasar2を連動させるTeedaExtensionもリリース。
  • 4末。TeedaExtensionに無設定JSF機能を追加。
  • 5末。KuinaCore EA1。
  • 6末。KuinaCoreリリース。
  • 7末。TeedaExtensionにHTMLテンプレート機能を追加。
  • 8末。KuinaDao EA1。
  • 9末。KuinaDaoリリース。

Kuina関連のスケジュールが後回しにされているのは、S2Hibernate3があれば、とりあえずDIやAOPが使えないという問題はあるにせよ、シンドメインモデルでいけば、何とかなるという判断です。
この計画も、もちろんフィックスではなく、状況に応じて、最も良いと思われるものにしたいと思っています。
上記の計画には入ってないけど、S2Flex2も仕事上必要になると思っています。仕事上本当に必要になったときに計画に組み込みます。

S2EJB3Unit

S2EJB3Unitは、S2DaoTestCaseのEJB3版です。テスト対象のオブジェクトはS2EJBTestCaseを継承したクラスで次のように指定します。

@EJB
private Foo foo;

テストに必要なクラスは次のようにして登録します。クラスに設定されたアノテーションを元に適切にコンポーネントの定義を組み立てます。


protected void setUp() {
register(FooImpl.class);
register(BarDaoImpl.class);
}
複雑なコンポーネントを組み立てるときは、diconファイルに登録して、includeで読み込むこともできます。

protected void setUp() {
include("foo.dicon");
}
testXxxの中では、@EJBで指定されたコンポーネントが既に設定されているので、それを使ってそのままテストができます。
データベースに対するテストは、S2Unitと同様にExcelでデータを用意して簡単にテストを行えます。
http://s2container.seasar.org/ja/S2Unit.html#DBTest
@Rollbackを使ってtestXxxの直前にトランザクションを開始し、testXxxの直後に自動的にロールバックを行い、テストしたデータの後始末を簡単に行えるようにすることもできます。

@Rollback
void testXxx() {
...
}
j2ee.diconとs2hibernate3.diconがクラスパスに含まれていれば、自動的にincludeします。
S2EJB3Unitは、S2Tigerに含める予定です。以前、KuinaUnitと呼んでいたやつは、S2EJB3Unitに統合されます。

@Statelessの解釈

@StatelessをSeasar2がどう解釈するかですが、思っていた以上にいろいろ意見がありますね。デフォルトは、パフォーマンスとEJB3との互換性を考慮して、instance=SINGLETON、autoBinding=NONEにしたいと思いますが、*ComponentAutoRegisterで登録するときに、instanceとautoBindingのデフォルトを変えられるようにしたいと思います。今は、instanceしか変えられないので、autoBindingも変更できるようにします。後、個別に変えたいときは、@Componentでさらに上書きできるようにしたいと思います。


@Stateless
@Component(autoBindng=AutoBindingType.PROPERTY)

@Statelessの解釈その2

@Statelessの解釈ですが、仕様への準拠及び安全性を考えて、instance=PROTOTYPEにしたいと思います。ことの経緯は、http://d.hatena.ne.jp/higayasuo/20060101#c1136114429を参照してください。いまどきのVMは、一時的なオブジェクトの管理が賢くなっているので、パフォーマンス的な問題も特に問題にならないと思います。S2JSFS2StrutsでもActionをrequestで管理したりしてますが、それでパフォーマンス的な問題が起きたことはないので。