――JavaBeansとEJB、どちらを使えばよいのか――
どこでも使えるビーンにするための考慮点を知る |
APサーバはEJBを稼働させる専用の機能があります。これを「EJBコンテナ」とかただ単に「コンテナ」と呼んでいます。現在、流通しているAPサーバにはコンテナ機能がほとんど組み込まれています。またいままで何度も出てきていますが、コンテナにはEJBを導入する(これをデプロイといいます)機能が付けられています。J2EEというJavaのオープンな取り決めが行われている中で、EJBだけでなくサーブレット、JSP、HTMLコンテンツなども一括してWebサーバやAPサーバ、コンテナにデプロイする方法が確立してきました。
しかしAPサーバやEJBなどの開発ツールを提供するソフトウェアメーカーやベンダは、もっとユーザーに分かりやすい方法や手順でこれらを導入する方法を提供している場合もあります。Javaの世界では標準もどんどんいいものを取り入れて変化していきますし、いままでやっていた手順がなくなってしまうこともあります。結局重要なのは、APサーバにEJBを導入することではなく、どのAPサーバでもうまく稼働する業務ロジックのデザイン手法です。これからお話しするEJBを作る考慮点は、JavaやAPサーバのバージョンが変化しても決して変わることのない、今後も応用の利くEJBの設計コンセプトといえます。
設計コンセプト(1) EJBはどこで動くか分からない部品だ、ということを認識しよう |
ここで重要なことは、EJBの業務ロジックの処理はコンピュータにその処理に必要な機能や資源が必ずあると思ってはいけないことです。上記のexecuteメソッドで説明した件もそうですが、EJBが動いているコンピュータに特定のRDBやそのほかのミドルソフトが必ず存在すると思ってはいけません。またEJBが動くコンピュータは大型コンピュータもあればパソコンも考えられます。コンピュータによっては、HDDを全然持たずにメモリだけで動くコンピュータもあります。それゆえ業務処理がふんだんにハードディスクやメモリを要求しても、コンピュータ自体がそれにこたえられない場合もあるわけです。ですからEJBが稼働するコンピュータに必ず自分の使いたいリソースが存在すると思わないように心がけることが重要です。 |
設計コンセプト(2) コンテナで提供されるミドルソフト機能だけを使うようにしよう |
|||||||
とはいっても、EJBが稼働する環境でまったく使える機能や資源がないかといえばそうではありません。コンテナではEJBの業務ロジックで必ず使うことになるような機能をいくつか提供してくれています。例えばexecuteメソッドにあった特定のRDBへのアクセスの個所を見てみましょう。業務ロジックではRDBにアクセスするというのは必須の機能でもあります。そこでコンテナではデータソースという共通のRDBアクセス機能を提供しています。これを使えば業務ロジックに特定のJDBCドライバの名前を記述しなくてよくなります。以下のリスト3を見てください。これがリスト2の部分をデータソースを使った部分に変更したものです。このような変更を行っても、それ以外のコードはまったく変更しなくても構いません。
データソースというのは、いわばコンテナで提供されたRDB接続のための共通ミドルソフトといえます。このようにコンテナで提供された機能を使う限りは、すべてのAPサーバのコンテナでも同じ機能を使えます。すなわち結果的にどのAPサーバでも動く業務ロジックになります。またAPサーバでもデータソース以外に共通のミドルソフト機能があります。例えばOLTPミドルソフトで提供されているトランザクション機能も提供されています。通常、業務ロジックからトランザクションを発生させたり終了させる場合には、プログラムでbeginやcommitと呼ばれるAPIを呼び出す必要があります。EJBでは、これらトランザクションの制御に関するAPIをコンテナで自動的に呼び出したり、またプログラムで記述した自由に定義できる機能を提供してくれています。 またJ2EEという仕様では、キューを使ったサーバサイドJavaプログラム間の通信(これをJMS機能といいます)を標準的なミドルソフト機能として提供します。
|
設計コンセプト(3) EJBに必要な機能を明確に分かるようにしておこう |
業務ロジックのほとんどはほかのプログラムの処理結果やミドルソフト機能の力を借りなければ実行できないケースが多いはずです。例えば業務ロジックからユーザーに対してメールを送信したり、既存のオンライン処理の一部を活用したいことも頻繁にあるでしょう。このような処理を最近では基幹システム連携ということも多いようですが、業務ロジックからこれらほかのプログラムを活用するのは、一種の業務ロジックからのミドルソフト呼び出し処理といえなくもないケースといえます。何度もいいましたが、コンテナで標準的に提供されていないミドルソフト機能を呼び出すときは、その環境がセットアップされているコンピュータ上でしか稼働できないEJBになることに注意しないといけません。しかしここで間違えてはいけないのは、絶対にこのようなEJBを作っていけないかというと、必ずしもそうではないということです。業務の内容によっては、どうしてもEJBの業務ロジックで特定のミドルソフトを使いたいケースも出てきます。このときに重要なのは、EJBの業務ロジックでどのような機能を要求するのかEJBを導入して使う人が、EJB情報やマニュアルなどを作成して、明確に分かるようにしておくことです。
EJBをAPサーバで活用したいと思う人が、APサーバ以外のほかのどのような機能が必要になるか明確に判断できれば、だれでも失敗なく目的のEJBを動かすことができます。このようにEJBをトラブルなく稼働させるためには、業務ロジック内部の工夫だけでなく、きちんとEJBの仕様が分かる情報も一緒に付加させることが重要だということを覚えておいてください。 |
設計コンセプト(4) EJBにタイミングやパフォーマンスを期待してはいけません |
最後にEJBは、どこでも必ず期待した性能で動くとは限らないことを認識しないといけません。Windowsパッケージの例に戻りますが、たとえパッケージが動いたとしてもCPUパワーが少なく、メモリやHDDの余裕のないコンピュータで動いているとすれば、パッケージの性能が悪いことは皆さんも十分承知していることだと思います。これと同じようにEJBが動く環境も、大型コンピュータもあればオフコンもあります。またパソコンもあるでしょう。このようにどんなコンピュータで動くか分からないEJBの業務ロジックに、一定時間以内に処理の戻りを期待するような、タイミング依存の処理を記述するのは避けるよう心がけてください。 |
4/5 |
INDEX |
||
第3回 | ||
今回の内容の目的 | ||
JavaBeansとEJBのメリットとデメリットを知る EJBがJavaBeansのデメリットを改善する EJBは業務処理をサービスする窓口でもある |
||
EJBを流通するという考え方 業務処理は必ず失敗なく実行されないといけない |
||
どこでも使えるBeanにするための考慮点を知る | ||
JavaBeansにするのか、EJBにするのか では実際にどうするのか? |
||
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (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に関する基礎知識を解説する。
|
|