CDIが業務システム開発にもたらすメリットとは? EJBとの使い分けは?──最新Java EE開発“虎の穴” 第3回 上妻宜人氏

Oracle Java & Developers編集部
2014-03-24 11:00:00
  • このエントリーをはてなブックマークに追加

POJOとして書くことで、ビジネス・ロジックから"技術への依存"も排除できる

──CDIには、「Java EEアプリケーションの各層を相互に依存させないかたちで結び付ける」という役割のほかに、「EJBを使わずにビジネス・ロジックを実現する」という役割もあるようです。

 そのとおりです。Java EE 5まではEJBでのみDI機能が使えたわけですが、Java EE 6でCDIが導入されたことにより、今後はEJBを使わずにビジネス・ロジックを実現することも可能になります。

JAVA EE仕様におけるCDIの位置づけ

 アノテーションさえ付ければ通常のJavaクラスでも注入できるので、Java EEアプリケーションのビジネス・ロジックをPOJOとして作れるようになるわけです。これもCDIの特徴の1つであり、テスト容易性と並ぶもう1つの大きなメリットをもたらします。それは"技術依存の排除"です。

 業務分野にもよりますが、一般にエンタープライズ・システムのビジネス・ロジックは頻繁に変更されるものではありません。それに対して、Web層の技術は、例えばJSPやStrutsからJSFあるいはWebSocketへといった具合に、比較的、短期間で変化していきます。ビジネス層のコードがWeb層に密結合していると、そうしたWeb層の変化に合わせてビジネス層にも改修が発生しますが、多くの場合、それは本来不要な作業です。コストや保守性、品質確保の観点から、こうした不要な作業はなくしたいのですが、CDIを使いPOJOとしてビジネス・ロジックを作れば、それが可能になります。Web層で使う技術を変えたり、アプリケーション・サーバのバージョンを上げたりする度にビジネス・ロジックの修正やテストを行う必要がなくなるのです。

CDIによりビジネス・ロジックを特定技術に非依存にする

棲み分けは明快。CDIとEJBの使い分け方

──CDIには"テスト容易性"と"技術依存の排除"という2つの大きな利点があるわけですね。ところで、CDIにより、EJBを使わずにPOJOとしてビジネス・ロジックを書けるとしたら、今後、エンタープライズ・システム開発においてEJBは不要になっていくのでしょうか?

 そうは思いません。私のようにJava EEでミッション・クリティカル・システムの構築に携わっている者にとって、EJBは引き続き重要な技術です。そもそも、CDIとは明確に使い分けることができると考えています。

 次の図をご覧ください。これはJava EE 6のCDI 1.0とEJB 3.1の機能を比較したものです。ご覧のとおり、DI機能はCDIとEJBの両方に備わっていますが、それ以外の機能は綺麗に棲み分けができています。

CDIとEJB機能の比較(JAVA EE 6)

 EL(Expression Language)式やスコープ操作の機能はCDIにしか備わっていませんが、一方で宣言的トランザクションや非同期実行、JMS(Java Message Service)との連携、リモート実行、タイマーなどの機能はEJBにしか備わっていません。

 非同期実行の機能は、例えば「請求処理を行った後にメールでPDFの請求書を送付する」といった機能の実装で必要ですし、JMSによるメッセージ・サービスとの連携も、エンタープライズ・システムでは広く使われています。タイマーの機能はcronで代替することも可能ですが、cronの場合はアプリケーション・サーバへのデプロイとは別にOSに設定する必要があるので、リリース手順を簡略化するためにタイマーを使いたいというニーズは一定数あるでしょう。

 比較的、シンプルなWebアプリケーションならCDIの機能だけで十分かもしれませんが、上に挙げたような機能が求められるシステムでは、引き続きEJBが必要なのです。トランザクション処理のあるエンタープライズ・システムでCDIとEJBを使う場合には、次のようなアプリケーション構成をとることになるでしょう。

JAVA EE 6におけるCDIとEJBの使い分け(EJBでトランザクションを制御する)

 ちなみに、Java EE 7ではCDIに宣言的トランザクションの機能が追加され、EJBを使わずにCDIでトランザクション制御が行えるようになりました。ただし、他の機能の棲み分けについてはJava EE 6と同じであり、ミッション・クリティカルな業務システムで必要となるメッセージ・サービス連携などの機能は引き続きEJBで作り、比較的シンプルなWebアプリケーションはCDIで作るといった使い分けは変わらないと思います。

──EJBが不要になるわけではないのですね。それでは最後に、CDIについてこれから学ぼうという方のために、上妻さんお勧めの参考資料などを教えてください。

 お勧めの参考記事や書籍をいくつか挙げておきましょう。オンラインでも優れた資料や解説記事を読むことができるので、ぜひ活用してください。

【CDIについて学ぶための参考記事/書籍】

■仕様書関連

■書籍(洋書)

■オンラインの解説記事

 ──書籍に関しては、現場でのニーズの高まりに日本語による技術書の刊行が追いついていないという状況のようですが、今後、充実してくることに期待しましょう。上妻さん、本日はありがとうございました。

最新のJavaを3時間で知る!Java解説セミナー

  • 日時:2014年4月17日(木)
  • 場所:オラクル青山センター

株式会社 構造計画研究所の菊田 洋一氏登壇

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]