――JavaBeansとEJB、どちらを使えばよいのか――
JavaBeansとEJBのメリットとデメリットを知る |
皆さんはこの講座を通して、JavaBeansとEJBの違いを稼働環境やプログラミングの観点でいろんな角度から見てきました。これをまとめる意味でJavaBeansとEJBのメリットやデメリットを考えてみたいと思います。
まずJavaBeansはビーンを呼び出す外部プログラムと同じホストコンピュータに存在したことを思い出してください。これとは違い、EJBは外部プログラムの稼働するホストコンピュータとは異なるコンピュータに存在し、ネットワークを経由してEJBを活用したことも思い出してください。この特徴が端的に分かるようにJavaBeansをローカル・ビーン、EJBをリモート・ビーンと呼んだわけです。このようにプログラムが稼働する場所や配置の関係によってコンピュータを理解する方法は、分散コンピューティングというコンピュータ技術の分類の中でいろいろと研究されてきた分野です。しかしJavaBeansやEJBは少し見方を変えると、ビーンを数多く作成し、それをたくさんの人に使ってもらうことで、システム開発の省力化や効率化をアップする役目も担います。こういう考え方は分散コンピュータというよりは、部品の流通や効率化という見方です。ここではこれに焦点を当ててそのメリットとデメリットを探ってみたいと思います。JavaBeansはJavaが生み出されてきた最初からJavaに組み込まれていた部品の考え方です。ですからこれを利用して業務ロジックをJavaアプリケーション・プログラムやアプレット、サーブレットに、ただ何も考えずに記述するのではなく、JavaBeansのような部品にしておくと、Javaが動く環境ならどこでも使える業務ロジックになります。
図1 業務ロジックはBeanにするとどこでも使える部品になる
|
またJavaBeansの作り方は厳格に決められているので、これに従ってJavaプログラムを作成すれば、開発の手順を統一化させたりすることもできます。こうすると同時に業務システムの標準化なども図れるでしょう。いいことばかりのJavaBeansのように思えますが、実は次のような不便なこともあります。
例えばJavaBeansはプログラムを開発する人には極めて有効な手法です。しかし、ただ業務ロジックを使って仕事するだけの人にも有効かといえば、必ずしもそうではありません。なぜなら業務ロジックを利用する人は、それがどのような手順で作られていようと関係ありません。要はいつでも簡単に業務ロジックが使えればいいわけです。
またJavaBeansはそのまますぐに使えるわけではありません。必ずそれをJava開発ツールに組み込んだり、手でプログラムを作成するなどのコンパイル作業をして業務プログラムを組み立てないといけません。
図2 JavaBeansには組み立て作業が必要
|
さらに、JavaBeansの弱いところは、外部プログラムとJavaBeansの間や、JavaBeans同士でプログラムを活用したいときにネットワークを介在してやりとりすることができないことだといわれています。例えば、あるJavaBeansが多くのユーザーから使われるようになったときに、その影響が同じコンピュータ内の全部のプログラムの性能悪化に及んでしまいます。こういう場合は負荷の大きいJavaBeansをほかのコンピュータに移して使うのがコンピュータの世界のセオリーです。そのためには外部プログラムとJavaBeansがコンピュータ間の違いをまたいでネットワークを介してやりとりすることが必要です。
いくつかいいましたが、このようにJavaBeansにはメリットがたくさんあります。しかしコンピュータの使い方が多様化する中で、JavaBeansのデメリットも目立ってきたわけです。
EJBがJavaBeansのデメリットを改善する |
いままでお話ししたJavaBeansのデメリットを改善するために考え出されたのが、実はEJBです。EJBはJavaBeansで足りない機能を積極的に補うように考えられた部品の仕組みです。例えば外部プログラムとEJBのやりとりは、基本的にネットワークを利用して行うようになっています。ネットワークのやりとりの仕組みを皆さんが1つ1つ考えて行うのは大変なことです。
しかしEJBでは、これらネットワークのやりとりが私たちの見えない個所で自動的に行われています。こうすることで私たちは、難しい仕組みを意識することなく簡単に業務ロジックの開発に専念することができます。またEJBはメーカーやベンダに依存することなく、どんなアプリケーションサーバ(以下APサーバ)でも導入して動かすことができます。
図3 EJBはどのAPサーバでも導入して動く
|
JavaBeansは開発者による組み立て作業を行ってJavaBeansの業務ロジックを使う必要がありましたが、EJBはAPサーバ付属の専用インストーラを使って導入すれば、いつでも使えるように待機状態にさせておくことができます。
図4 待機状態のEJBを呼び出して活用する
|
そうすれば、EJBを使いたい外部プログラムが待機状態のEJBをコールすれば、いつでも目的のEJBを使うことができます。このようにJavaBeansはプログラミング開発の効率的に有効な部品であるのに対して、EJBは簡単にAPサーバに導入して使うという、いわばパッケージプログラムのような側面を持つ部品ともいえるのです。
EJBは業務処理をサービスする窓口でもある |
EJBは、APサーバに導入すれば、いつでも使うことができるようになります。ここからEJBというのは業務処理というサービスを提供する窓口になる、という発想も生まれてきます。例えばこれらの窓口をいくつか組み合わせて、最後に必要な業務処理を完成させることになります。
図5 複数の窓口を組み合わせて業務を作る
|
こうなると重要になってくるのが、複数のEJBをまとめて1つの業務ロジックとするわけですから、その中の処理が1つでも失敗したら、いままでやったすべての処理をなかったことにしなければいけません。こういう考え方をトランザクションといいます。EJBはたくさんの人が分業して作成した部品を組み合わせて業務を遂行するという目的から、おのずとトランザクションという世界でうまく働いてくれないと使いものにならない部品でもあるわけです。
図6 トランザクションの考え方
|
EJBはほかの人が作ったEJBを自由自在に組み合わせて業務ロジックを作った場合でも、トランザクションの単位(トランザクションのスコープといいます)を自由に決めることができるようになっています。こういう作業はJavaBeansではまったくできない処理です。
図7 EJBはトランザクション・スコープを自由に決められる
|
このように業務ロジックをEJBにしておくことは、複数のプログラムから簡単にEJBを活用させて業務システム構築の生産性をアップさせるのに、非常に有効な手段となり得るわけです。
COLUMN リモートの業務ロジックを呼ぶ方法はWebサービス以外に、TCP/IPで細かく制御したり、RPCを使ったり、ミドルソフトで決まった呼び出し方法などたくさんあります。でもトランザクション単位の制御を手軽に制御できる方法はEJBしかありません。サーバサイドJavaの世界でもプログラムのいろいろな呼び出し方法がありますが、それぞれどのような違いがあるのか研究してみるのも面白いかもしれません。
|
2/5 |
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|