ひがやすを blog このページをアンテナに追加 RSSフィード

Information

2008-10-30

Slim3入門

Slim3 Container、略してS3ContainerのDI部分は出来上がったので、機能を軽く紹介します。

まだ、サイトデザインが決まってないので、サイト自体がないのですが、興味のある方は、https://www.slim3.org/svnリポジトリアクセスすることで最新のソースを見ることができます。

はしもとさん、はやくSlim3サイトの打ち合わせをしましょう。


S3Containerを動かすには、以下のjarファイルが必要です。

geronimo-xxxのjarファイルは、EJB3, JPA用のjarファイルです。アプリケーションサーバEJB3, JPAに対応しているなら不要です。

設定ファイルとして、slim3_configuration.propertiesをクラスパスの通っているディレクトリにおきます。中身はこんな感じ。

slim3.stage=test
slim3.deployment=hot
slim3.rootPackages=tutorial
java.naming.factory.initial=org.slim3.container.S3ContainerContextFactory

slim3.stageは今どのステージにいるのかを指定します。本番用は、productionです。それ以外は任意ですが、test, developmentを使うという想定でいます。RailsのENVと一緒ですね。

slim3.deploymentでHOT deploy(hot)なのかCOOL deploy(cool)なのかを指定します。Seasar2でいうWARM deployはなくなりました。実は、Slim3COOL deployは、Seasar2のWARM deployと同じなので、Seasar2COOL deployがなくなったというのが正しいです。

slim3.rootPackagesは、プロジェクトルートになるパッケージを指定します。例えば、プロジェクトがxxx.action, xxx.service, xxx.entityなどのパッケージを持つ場合には、ルートパッケージはxxxになります。複数ある場合は、カンマで区切ります。

java.naming.factory.initialで、どのネーミングコンテキストを使うのかを指定します。指定しなかった場合は、アプリケーションサーバのネーミングコンテキストが使われます。

設定はこれだけ、簡単ですね。


それでは、アクションサービスを作ってみましょう。

package tutorial.action;

@Stateless
public class AaaAction {
    @EJB
    protected BbbService bbbService;
    ...
}

package tutorial.service;

@Stateless
public class BbbService {
    ...
}

作成したEJBは、設定ファイルに登録する必要はありません。AaaActionを取得してみましょう。書くコードはこれだけ。

AaaAction action = Jndi.lookup("aaaAction");

EJB名を後ろから見て最初に大文字に出会うまでがEJBステレオタイプになります。今回の例だとAction。ルートパッケージEJBステレオタイプの先頭を小文字にしたものを足し、EJB名の先頭を大文字にしたものがクラス名になります。aaaActionの場合だと、tutorial.action.AaaActionになります。

このような感じで、名前からクラスが特定できるので、後はアノテーションを読み取って、Beanを組み立てるわけです。

フィールド名をBean名にしたくないときには、@EJB(name = "Bean名")のようにname属性で指定します。

名前クラス規約は、自由にカスタマイズすることができます。


EJBではないオブジェクトは、@Resourceをつけて、プロパティ自動設定されるようにします。EJBではないオブジェクトには、UserTransactinやJdbcManagerなどがあります。


slim3_configuration.propertiesのエントリを@Resourceで設定することもできます。例えば、

app.hoge=aaa

のようなエントリがあった場合に、次のように書くとhogeプロパティaaaが設定されます。

@Resource(name = "app.hoge")
protected String hoge;

プロパティ文字列以外の場合で、数値やbooleanの場合は、Slim3自動的に変換します。

app.hogeエントリの値をステージ(slim3.stage)がテストのときにはbbb、本番ではaaaに設定したいとします。その場合には、次のようにslim3_configuration.propertiesを書きます。

app.hoge=aaa
app.hoge_test=bbb

エントリのキー_ステージ」のエントリがあると通常のエントリより優先されます。slim3.stageの値は、Systemのプロパティで上書きできます。実際は、slim3.stageだけではく、すべてのエントリがSystemのプロパティで上書きすることができます。


DIだけなら、覚えることはこれだけ。仕様スリムでしょ。org.slim3.containerには、いまのところ12のクラスしかありません。AOPが入ってくるともう少しクラスは増えるでしょうが、30は超えない気がする。実装もスリムなのです。


S3Containerのソースコードは量が少なく直ぐに読める(Javadoc英語だけど)ので、ブラックボックス感がないところが意外と開発者にはうれしいと思う。開発者は、できればフレームワークの挙動を完全に把握して使いたいと思っているはず。

hogehoge 2008/11/01 23:01 https://www.slim3.org/svn
に、firefox3.0.3でアクセスしようとしたところ、セキュリティ証明書のエラーになってしまいました。

チェックアウトについては、上記ではなく、

https://www.slim3.org/svn/trunk/slim3/

を直接指定したらいけました。僕の環境の問題かもしれませんが、ご参考まで。

secondarykeysecondarykey 2009/05/01 20:28 >hogeさん
>https://www.slim3.org/svn/trunk/slim3/
>を直接指定したらいけました。僕の環境の問題かもしれませんが、ご参考まで。

私の環境でもそうでした。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/higayasuo/20081030/1225365898