樋口研究室
2001/5/2
Beanには2種類の稼働形態がある!? |
さてBeanについては、皆さんの中にはすでにプログラム開発やシステム構築に活用されていて、すでによくご存じの方も多いと思います。この詳しい内容については、この@ITのサイトの中でもいろいろな先生が解説する分かりやすい記事があります。
そこでここではこのBeanをシステムに応用するデザインという観点に着目して、本来Beanの狙っている特長や活用方法というものを理解していきたいと思います。いままで解説したように、Beanというのは、あくまでも部品です。ですからBeanを利用するときは、サーブレットやJavaアプリケーション、Javaアプレットなど、Beanを呼び出すプログラムの存在が必要です。このBeanを呼び出して活用するプログラムを「外部プログラム」といいます。さてこのBeanですが、なかなかその使い勝手やメリットなどが端的に解説されたものはないですが、実はそのBeanの稼働の仕方によって大きく2種類の区別ができることをご存じでしょうか?
この区別というのはBeanを呼び出す外部プログラムと、そこから使われるBean、この2つのプログラムのコンピュータの配置の関係で決まってくるものです。それがいまからお話しする「ローカルBean」と「リモートBean」というものです。
ローカルBeanとは? |
ローカルBeanというのは、外部プログラムとそこから呼び出されるBeanが同一のコンピュータ(ホスト・コンピュータ)に配置されているBeanのことです。ローカルBeanは、一般的にJavaBeansと呼ばれており、この内容については多くの皆さんがご存じかと思います。
図6 外部プログラムとローカルBeanの配置 |
サーバ・サイドJavaで活用するJavaBeansの詳しい作り方や機能については後述しますが、JavaBeansというのはいつも同じコンピュータ上に存在しているプログラムを意識しながら動いています。そのため面白い特徴も幾つか持っています。
例えばローカルBeanで作成されたJavaBeansは、同じホスト上のほかのローカルBeanのJavaBeansを呼び出して使うことが多くなります。要はいろいろな処理の目的を持つJavaBeansがお互い連携して動くわけですね。
そのため、JavaBeansではこのような連携がラクにできるように、イベントという仕組みを持っています。イベントというのは、あるJavaBeansが動いたら、同時にその動いたことをほかのJavaBeansに知らせることができる情報のことです。この仕組みを応用すると、例えばJavaの開発ツールでよく見られるように、あるイベントが発生したら、次にこのJavaBeansを動かすといった指定をしてプログラムを作成したり、場合によってはJavaBeans同士を線で結んで(この線がイベントが発生したことを表します)、ほかのJavaBeansを起動させたりするプログラムを作成することもできます。このイベントはほかのJavaBeansに送られて、また違ったJavaBeansの処理を起動させることができます。
図7 JavaBeansはイベントという仕組みを持っている。 Java開発ツールにはイベントの定義を線で結ぶことで ビジュアルに 定義できるようにしているものもある |
このように、イベントなどはまさに同一のコンピュータというローカルな環境の中で動く仕組みなので、ローカルBeanと言葉を端的に表しているものだと思います。
リモートBeanとは? |
次にリモートBeanというのは、外部プログラムとBeanが、それぞれ異なるコンピュータ上で動くという特徴を持ちます。
外部プログラムとBeanが、それぞれ違ったコンピュータ上に配置されているので、外部プログラムがBeanを呼び出す際には、その間にネットワークが介在したデータのやりとりが行われます。このようなリモートBeanは一般的にEJBと呼ばれています(EJBの詳細については@ITの「サーバ・サイドJavaテクノロジ重点キーワード」を参照してみてください)。
図8 外部プログラムとリモートBeanの配置 |
このEJBもJavaBeansと同じようにほかのEJBと連携して動いてeビジネス・アプリケーションで活用されるケースが多いBeanです。しかしEJBがほかのEJBを呼び出すときは、JavaBeansのようにイベントを使ってほかのEJBを呼び出すわけではありません。
EJBからEJBを呼び出すときは、呼び出し元のEJB自体が外部プログラムの役目を果たすことになります。この外部プログラムの役目をするEJBの中に、EJBを呼び出すためのプログラム処理を記述します(これをEJBクライアントといいます)。このEJBクライアントがネットワークを経由して、また次のEJBを呼び出すことになります。
(リモートBeanが複数のリモートBeanにまたがって1つの業務になる) 図9 EJBからEJBの連携概要 |
またリモートBeanのEJBはローカルBeanと違った非常に大きな特徴を持っています。EJBというのは、遠く離れた外部プログラムから呼び出されて使われるという性質を持っていますから、EJBを動かすための専用のサーバ上に存在します(この専用サーバのことをコンテナなどといいます)。
このように1つのEJBはサーバ上に動いていて、同時に数多くのユーザーから使われる宿命を持ちます。同時に使われるということは、一挙に同じEJBが起動されても処理のパフォーマンスを落とさずに動かなければいけません。また、もし業務処理が失敗しても、いままで実行した内容を何もなかったように元に戻さないと処理全体の整合性がとれなくなってしまいます。
一般的にこのような仕組みをきちんと考えることを、トランザクション機能を持っているといいます。さらにEJBは、リモートのサーバにEJBを動かすコンテナというソフトウェアさえ動いていれば、どんなメーカーやベンダの提供するコンテナでも動くように作ることができるというのがJavaのオープンな考え方です。
皆さんはパソコンでWindowsを利用すると思いますが、そこで動くワープロや表計算などのパッケージ・プログラムは、どこのメーカーのパソコンで動くWindowsでも使えることを体験していると思います。
EJBも実はそのようなポータビリティ(どこでも動くという意味で可搬性といいます)を狙っていて、皆さんの好きな身近にあるアプリケーションサーバ(コンテナはアプリケーションサーバに付属して提供されています)さえあればどこでも稼働する、とても有益な部品になるわけです。
こういうことを実現するにはトランザクション機能以外にも、どんなアプリケーションサーバにもEJBを簡単に導入することができるようにインストール手順やカスタマイズ手順が明確に決められていないといけません。こういう作業をサーバ・サイドJavaの専門用語でデプロイメント作業といいますが、このような仕組みもリモートBeanのEJBでは考えられています。
図10 JavaBeansとEJBの共通部分、異なる部分 |
3/4 |
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (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に関する基礎知識を解説する。
|
|