重点用語解説
サーバサイドJavaテクノロジ 重点キーワード
米持幸寿
日本アイ・ビー・エム
2000/10/10
Enterprise JavaBeans(EJB) |
■EJBとは何か?
JavaBeansはJavaクラスをコンポーネント化する技術だったが、EJB(Enterprise JavaBeans)とは何だろうか。EJB
は、その名前からもわかるとおり、エンタープライズ・システム、すなわち基幹業務を意識したコンポーネント技術である。コンポーネント技術であるためJavaBeansという名前が付いているが、根本的にJavaBeansとは異なった技術であると認識したほうがよいだろう。
JavaBeansは、クライアント(GUIを実装した)で実行することを意識したコンポーネント技術である。ゆえに、インスタンスは基本的にローカル参照でアクセスされるし、GUIの実装に便利な機能を豊富に備えている。シリアライズ化によって、インスタンスを保管、復元することや、プロパティエディタという設定用のGUIを提供するための仕様も含んでいる。
これに対し、EJBはサーバでの実行を前提にしている。EJBのコンポーネントは普通のクラスやJavaBeansのようにプログラム内でインスタンス化することはできない。EJBコンテナと呼ばれるサーバが必要であり、その中でインスタンス化される。
アクセスはネーミング機構を通してリモートアクセスすることになっている。基本的には、RMI/IIOP(RMIオーバーIIOPと読む)という分散オブジェクトの技術を使ってアクセスすることになっている。EJBではシリアライズ化でディスクに保存したり、GUIを提供することは基本的に許されていない(図1)。
図1 JavaBeansとEnterprise JavaBeansは根本的に異なるものである点に注意してほしい |
EJBでは、その値や状態の同期や保存をサーバにまかせることができる(もちろん、アプリケーション側でも制御可能である)。どういうことかというと、処理の同期を取る機能として「トランザクション機能」、データをRDBにマッピングする機能として「パーシステンス機能」を提供するという仕様になっている。アプリケーション側で制御する場合も、このルールに従ってコーディングしなければならない。これらのEJBのトランザクション管理は、JTA(Java Transaction Architecture)によって実現される。
EJBは、以上のような思想によって設計されており、次の内容を目標にしている。
- パーシステンス処理実装の簡便化(特にCMPにおいて)
- トランザクション処理実装の簡便化と確実性の追求
- コンポーネントのポータビリティの確立
- インターオペラビリティ(相互接続性)
残念ながら、インターオペラビリティは、まだまだ課題が多いようであるが、パーシステンス、トランザクション、ポータビリティにおいては、かなり高いレベルで実現されており、今後の期待が膨らむ技術である。
EJBの仕様の中で、サーバをEJBコンテナと呼ぶことは前に触れた。その中に入れるアプリケーションコードのことを「Enterprise Bean」という。Java Beansの仕様でプログラムコードのことを「Bean」と呼ぶのと同じと考えればよい。Enterprise Beanには、大きく分けて2つの種類があり、コンポーネントを開発する場合には、それぞれの部品をどの種類で作るかを決めてから作ることになる。2つの種類はさらにそれぞれ2つに分けられ、全部で4種類になる。それぞれの特徴は表1のようになる。
|
||||||||||||||||||||||||||||
表1 EnterpriseBean の特徴 |
■EJBはどこで使うべきか?
EJBがはやりであるので、「とりあえず使ってみよう」というのはなかなかよい志であるが、なんでもかんでもEJBにしていこう、というのは少し考えた方がよいと思う。EJBを使うからには、EJBの利点をしっかり生かした作り方をしたい。
EJBが目指しているのは、前にも述べたようにパーシステンス、トランザクション、ポータビリティ、インターオペラビリティなどである。これらがまったく関係ないようなシステムや、EJBを採用することによって著しく性能が落ちるような場合には、使用を控える勇気も必要である。
たとえば、名簿などの検索システムを考えてみよう。検索システムで要求される機能に「速いレスポンス」が要求されていたとする。現状では、単純なプログラムからJDBCを使ったデータベースアクセスで得られたResultSetをHTMLへ書き出すシステムの場合、Java Servletを使ったシステムとEJBを使ったシステムとを比べると、明らかにJava Servletのほうが速い。検索結果にヒットする件数が多くなると、さらに差が顕著になる。それでもEJBであることによるメリットが優先するなら、使う意義はあるだろう。
これに対して、トランザクション処理を含むような場合を考えてみよう。在庫管理システムから引当処理を行い、決済処理をしてから出荷指示を追加するようなアプリケーションを考えてみてほしい。最低でも3つのデータベース(またはレガシーシステム)に対して更新が行われる。もし、処理途中でシステムが異常終了したり、回線エラーになったり、アプリケーションが異常終了した場合などを想定して、安全なコードを記述する自信があなたにはあるだろうか。また、その記述コストを考えると、大変なことが想像できるだろう。EJBでこのような処理を記述する場合、EJBのルールに従って記述することによって、より安全に、より確実に、そして少ないコーディング量でこれらを実装することができる。これは、間違いなくEJBを使う意義のあるアプリケーションである。
また、1つのビジネス・ロジックに対して複数の種類のクライアントからアクセスする可能性がある場合も有効である。例えば、クライアントがブラウザからHTML形式(Servlet経由)でアクセスする、Appletからもアクセスする、クライアント・サーバ型アプリケーションからもアクセスする、サーバ側の処理からもアクセスする、などが同時に行われるような場合である。こういったビジネス・ロジックをEJBとして実装することで、外部からのアクセスをRMI/IIOP経由でのアクセスに標準化できるので、メリットがあると言えるだろう。また、ユーザー・インターフェイスやプラットフォームから独立したビジネス・ロジックを実装する場面でも、将来性に期待できるであろう。このように、汎用性や将来性を見据えて、EJBをうまく活用していきたいものだ。
Keyword Index | |
[重点用語解説]
サーバサイドJavaテクノロジの重点キーワード |
|
■Java Servlet | |
■JSP(JavaServer Pages) | |
■EJB(Enterprise Java Beans) | |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (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に関する基礎知識を解説する。
|
|