2014-03-10
EJBとは
世に出ているEJBの説明はクソみたいなものが多く、簡潔に機能や特徴を記述しているものが見当たらないので書きました。Java EE 6, 7を対象として書いています。
EJBというのはJava EEアプリケーションサーバ上で利用できるJavaのコンポーネントです。EJBには4種類あります。
- 基本となるステートレスセッションビーン (Stateless Session Bean, SLSB)
- 状態を保持できるステートフルセッションビーン (Stateful Session Bean, SFSB)
- 単一インスタンスのシングルトンセッションビーン (Singleton Session Bean, SSB)
- メッセージ(イベント)処理を行うメッセージ駆動ビーン (Message Driven Bean, MDB)
基本となるステートレスセッションビーンには以下の特徴、機能があります。これらの便利機能はほぼ全てオプションなので、全て覚える必要はありません。インジェクションとトランザクション管理は無効にするようなシナリオが基本的に無いためデフォルトで有効になっています。
- スレッドセーフ
- 他のオブジェクトのインジェクション
- 自動トランザクション管理
- インタセプターによるカスタマイズ
- @Asynchronousによる非同期実行
- @Remoteによるリモート呼び出し
- @Scheduleによる定期実行
- @Timeoutによるタイマー実行
- @PostConstruct, @PreDestroyなどのライフサイクルメソッドサポート
- 同時実行されるインスタンス数制限
- セキュリティ制限
通常のJavaオブジェクトに@Statelessアノテーションを付与してjarに含め、Java EEアプリケーションサーバへデプロイするとステートレスセッションビーンとして登録されてこれらの機能が使えるようになります。
ステートフルセッションビーンはその名前の通り破棄を指示するまで状態を保持することができます。逆に、状態を保持しているので利用する際には最後に明示的に状態の破棄を行うメソッドを呼び出す必要があります。アクセスされていない状態は自動的にメモリからディスクなどへ退避されたり、クラスタ環境では状態が複製されていてひとつのサーバがダウンしても処理が継続できるようになってたりしています。
シングルトンセッションビーンは単一のインスタンスしか必要のない部分に利用します。シングルトンセッションビーンも状態を保持できます。設定情報など全体から共有する情報の保持、開始終了処理を@PostConstruct/@PreDestroyに記述したり、というような複数のインスタンスがあっても意味のない場合に使われます。
MDBはいろいろな「イベント」をスレッドプールで処理することができる非同期実行のEJBです。JMSのメッセージに対して利用するのが一般的ですが、ファイルを監視したり、メールの受信をトリガーにしたりなど、どんな種類のイベントに対しても実行させることもできます。クラスタリングされた10台のアプリケーションサーバにJMSで100万メッセージを送って、全台で分散処理、というような利用ができます。
- 22 http://t.co/FPNQrWGBDY
- 20 http://t.co/KNQpEiF3Yk
- 9 http://news.google.com/
- 6 http://t.co/4CkXR65NKD
- 5 https://www.google.co.jp/
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCUQFjAA&url=http://d.hatena.ne.jp/nekop/&ei=WSMdU42wDYLilAWyxoDgAQ&usg=AFQjCNEqoriO0_V5DwZbUv2b0jTjtdJJ5Q&bvm=bv.62578216,d.dGI
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CC4QFjAB&url=http://d.hatena.ne.jp/nekop/20111207/1323242691&ei=hSYdU62IMM-FlAWPt4GIDA&usg=AFQjCNFnDeVgNV_tKGJVfPU9Z6Fy_BNPBg&bvm=bv.62578216,d.dGI
- 2 http://www.google.com/url?source=web&url=http://d.hatena.ne.jp/nekop/20140310/1394417531
- 2 https://www.google.com/
- 1 http://api.twitter.com/1/statuses/show/442846914506014721.json