【コラム】
Enterprise JavaBeans 3.1(EJB 3.1)は現在Java EE 5に採用されているEJB 3.0の後継バージョンであり、次期Java EEプラットフォームとなるJava EE 6をターゲットとして仕様の策定が進められている。JCPでは2月29日よりEary Draftが公開されており、3月30日にかけてレビューが行われている段階だ。
バージョン2.xから3.0にかけては大幅な仕様の変更が行われたEJBだが、3.1はマイナー・バージョンアップであり、Early Draftによれば主に次のような機能が追加される予定となっている。
以下に、いくつかの新機能の概略を紹介する。
従来ローカルクライアントからSession Beanにアクセスするには、個別に定義されたローカルビジネスインタフェースを介する必要があった。EJB 3.1ではこれを簡潔にし、ビジネスインタフェースなしでもSession Beanのpublicなメソッドにアクセスできる簡易ビューが提供される。
インタフェースを持たないビューはビジネスインタフェースと同様にJNDI経由でEJBコンテキストから取得できる。コンテキストは対象となるBeanの型を持ったビューへの参照を返すが、クライアントからアクセスできるのはあくまでもpublicなメソッドだけであり、その他のメソッドにアクセスしようとした場合にはjavax.ejb.EJBExceptionがスローされるとのこと。また、Session Beanのインスタンスを (コンテキストを介さないで) 直接生成することもできない。
EJB 3.1ではSingleton Session Beanがサポートされる。Singleton Session Beanは複数のクライアント間で単一のインスタンスが共有されるSession Beanで、@Singletonアノテーションを用いるか、デプロイメントデスクリプタによって定義する。
Singleton Session Beanのインタフェースを持たないビューに対する参照は、常に同じオブジェクト識別子を持つ。したがってequalsメソッドによる比較は常にtrueとなる。ただし、異なるビジネスインタフェースタイプへの参照どうしや、インタフェースタイプへの参照とインタフェースを持たないビューへの参照、異なるSession Beanへの参照どうしの比較はtrueにはならない。
デフォルトでは、Session Beanの呼び出しはすべて同期呼び出しである。すなわち、処理を開始してから値を返すまでの間、単一のクライアントによってブロックされる。それに対して、EJB 3.1からは非同期呼び出しもサポートされることになった。非同期呼び出しが可能なメソッド (非同期メソッド) は()@Asynchronousアノテーションによって作成し、戻り値は必ずvoidまたはjava.util.concurrent.Future<V>のインスタンスとする (Vは実行結果の型)。
@Asynchronous
public Future performCalculation( ... ) {
// ... 計算を実行
Integer result = ...;
return new AsyncResult(result);
}
クライアントがSession Beanに対して非同期呼び出しを行った場合、コンテナはクライアントにコントロールを渡し、独立したスレッドにおいて処理を実行する。処理が完了したらFuture<V>のインスタンスが返されるので、クライアントではここからgetメソッドによって実行結果を取得したり、cancelメソッドによって処理の取り消しを行ったりすることができる。
EJBタイマーサービスを利用するには、Beanクラスにコールバックメソッドを実装し、javax.ejb.TimerServiceのcreateTimerメソッドを用いてjavax.ejb.Timerインスタンスを生成する。このときcreateTimerメソッドにはタイマーの持続時間やインターバルをlong値やjava.util.Dateオブジェクトとして指定するのが従来の方法だった。これに対してEJB 3.1ではカレンダーベースの式よって指定する方法が追加されている。
この式はjavax.ejb.ScheduleExpressionのインスタンスとしてリスト2のように生成する。この例では毎週日曜日の午前1時に実行されるタイマーになるとのこと。
ScheduleExpression schedule =
new ScheduleExpression().dayOfWeek(“Sat”).hour(1);
Timer timer = timerService.createTimer(schedule, null);
また、EJB 3.1ではTimerServiceを利用せずに、コンテナによってタイマーを自動生成する方法が提供される。その場合、コールバックメソッドは@Scheduleアノテーションを用いて作成し、タイマーの持続時間はアノテーションのパラメータで指定する。たとえばリスト3のようにすると、毎月1日の午前1時に処理を実行するタイマーが生成されるという。
@Schedule(hour=”1”, dayOfMonth=”1”)
public void generateMonthlyAccountStatements() { ... }
EJB 3.1では、フルセットの実装とは別に軽量化されたサブセットを提供しようという案が持ち上がっている。これはJava EE 6で導入が検討されているプロファイル機能に関連したものとなる。Java EE 6ではプロファイル機能によって、部分的な実装のみを含む機能制限されたJava EEプラットフォームを提供できるようになる予定。その際、一般的でない機能を省いた軽量プロファイルの提供も検討されており、EJB 3.1(lite)はそれを念頭に置いた提案である。
具体的にどの機能をEJB 3.1 (lite)に含めるかなどは現在議論されている最中だが、たとえばEJB 2.1スタイルのSession Beanなどを省略し、EJB 3.xのアノテーションベースのスタイルのみを利用可能にする、などといったことが考えられる。
提供:マイナビ
大学・大学院・短大・専門学生向けの就職情報サイト「マイナビ2010」「マイナビ2009」に今すぐ登録しよう! 大手企業からベンチャー企業までの約13,000社の企業情報を公開、エントリーが可能です。2010年卒予定の方は「マイナビ2010」に、2009年卒予定の方は「マイナビ2009」に登録してください。
毎日コミュニケーションズはプライバシーマークを取得しています。
| Java EE 6、採用する仕様を詰める段階へ [2007/9/25] |
| EJB 3.1仕様、JSR承認投票へ [2007/7/23] |
| Java永続化APIの次期バージョン、"JSR 317"として仕様策定プロセスへ [2007/7/23] |
| Java EE 6のEJBに拡張要望 - JBoss・Gavin King氏 [2007/4/5] |
| JSR 318: Enterprise JavaBeans 3.1 |
| JSR 220 Enterprise JavaBeans 3.0 |
| JSR 316: Java Platform, Enterprise Edition 6(Java EE 6)Specification |
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
9ストーリーズ ~バレンタインのエピソード~ [08:05 2/11] キャリア |
|
RX-7改フェラーリ登場!/マジックRX-7XX 【大阪オートメッセ2012】 [08:04 2/11] キャリア |
|
【連載】鉄道トリビア 第137回 山手線と京浜東北線から●●●が消えた!? [08:00 2/11] ライフ |
|
JRグループ、「周遊きっぷ」を見直し - 19の周遊ゾーンが3/31で販売終了に [07:30 2/11] ライフ |
|
「青春18きっぷ」春季用は2/20発売 - 夏季用・冬季用の発売は現時点で未定 [07:30 2/11] ライフ |