――JavaBeansとEJB、どちらを使えばよいのか――
EJBを流通させるという考え方 |
部品を作ることが重要だと認識されてくれば、部品をたくさん作ってビジネスしようという人も出てきます。車に例えれば分かりますが、皆さんはもっと快適に車に乗りたいために、オーディオをグレードアップしたり、カーナビを付けたり、ボディに魅力あるパーツを付けたりすることも多いと思います。これらの車のパーツを求めるユーザーが多いので、パーツを専門に作る会社がたくさん生まれました。その結果、パーツの数も膨大になり大きな市場を形成しています。これと同じようにサーバサイドJavaの世界でも、自分のやりたい業務処理を行うパーツさえあれば、これを活用したいという要望が多くあります。多くのソフトウェアメーカーやベンダが、さまざまな業務処理を提供するEJBを生み出せば、これを利用して簡単にシステムが完成するはずです。このようにEJBは数多くのEJBを部品として流通させて、新しいコンピュータのビジネスを作り出す潜在的な能力も持っているといわれています。
業務処理は必ず失敗なく実行されないといけない |
第2回の講座では、業務ロジックが記述されたexecuteメソッドの説明をしました。またこのexecuteメソッドは、JavaBeansとEJBの業務ロジックとしてまったく同じものが使えることもお話ししました。しかし実はこの意味には、事前に考えておかないといけない考慮点があります。いまからこのexecuteメソッドを例に取りながら、この考慮点をお話ししてみたいと思います。以下のリスト1を見てください。
リスト1 業務ロジックの部分 |
1 public void execute() {
|
このexecuteメソッドはJavaBeansでもEJBでもきちんと動くようにできています。しかし部品という意味を突き詰めると多少問題が出てくるメソッドでもあります。部品を活用するときに重要なのは、それを自分の持っているコンピュータに持ってきて、すぐに使えることが望ましいわけです。例えば上記のexecuteメソッドの7〜9行目には以下のような記述があります。
リスト2 業務ロジックのDBアクセス部分
|
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
|
この部分はRDBに対してデータベースをアクセスするJDBCドライバを指定している個所です。ここで注意しなければいけないのは、ここにRDB固有のドライバ名(クラス名)が指定されていることです。リスト2の一番最初の記述に、COM.ibm.db2.jdbc.app.DB2DriverというJDBCドライバ名が書かれています。これはIBM社のUDBで提供されているJDBCドライバ名です。前述のとおりEJBはどのAPサーバ環境でもEJBを導入するためのインストーラが提供されており、これを使えば簡単にEJBはAPサーバに導入でき、EJBを活動状態にすることができます。
しかしAPサーバでEJBを稼働させることができたとしても、そこに記述された業務ロジックもきちんと動くかというと必ずしもそうではありません。この業務ロジックには、特定のRDBをアクセスするドライバが記述されているため、APサーバ環境に業務ロジックが必要とするRDBも導入されていなければいけません。
図8 特定のRDBが導入されていないと動かないEJB
|
こういう話は当然といえば当然のことです。しかしよく考えると、これはおかしいというユーザーもたくさんいます。例えば皆さんがWindowsでいろいろなパッケージプログラムを使っていることを思い出してください。ワープロや表計算プログラム、データベースプログラムのほとんどがWindowsで稼働するパッケージプログラムです。これをサーバサイドJavaのAPサーバ環境に置き換えてみると、Windowsに相当するのがAPサーバで、パッケージプログラムに相当するのがEJBになります。
図9 Windowsに相当するのがコンテナ。パッケージに相当するのがEJB
|
Windowsパッケージは、Windowsさえあれば必ず動きます。だから私たちは安心してパッケージを購入して使うことができます。しかしEJBはAPサーバに導入して稼働させることはできますが、稼働させると問題が起こる可能性があります。これで果たしてWindowsパッケージがたくさん使われるようになったのと同じように、EJBが簡単に使える部品として世の中に流通する可能性があるのでしょうか?
よくよく考えてみますと、WindowsパッケージはWindowsというミドルソフトで提供されたAPIや機能を使って作られています。この決まりを守って作成されているからこそWindowsが動いているどのコンピュータであっても、必ずパッケージは動くわけです。ならばこれと同じくEJBもAPサーバで提供されたAPIや機能を使うのであればどのAPサーバでも変わらず稼働するはずです。
このようにEJBは、業務ロジックがどこでも動くがゆえ、さまざまなコンピュータ環境の違いも頭に入れて業務ロジックを作っておかなければ、思わぬ環境の違いでトラブルを引き起こし、どこでも使える業務ロジックにはならないという危険をはらみます。EJBを広く流通させるためにはWindowsパッケージと同じように、この環境の違いを乗り越えるためにどのようにEJBをデザインしておくか、この手法を頭に入れてEJBを作成しないと、真に広く流通するまでに至らないということです。しかし、ここで例に挙げたexecuteメソッドで問題のある個所は、RDBをアクセスする個所でした。
業務ロジックでRDBをアクセスするのは当然で、もしこれを記述できなくなるとデータを読み込むことはできませんし結果を保存することもできません。これでは業務処理がまったく成り立ちません。いったい、この問題をどのように解決すればいいのでしょうか?
3/5 |
INDEX |
||
第3回 EJBの正しい用い方 | ||
今回の内容の目的 | ||
JavaBeansとEJBのメリットとデメリットを知る EJBがJavaBeansのデメリットを改善する EJBは業務処理をサービスする窓口でもある |
||
EJBを流通するという考え方 業務処理は必ず失敗なく実行されないといけない |
||
どこでも使えるBeanにするための考慮点を知る | ||
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (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に関する基礎知識を解説する。
|
|