• ベストアンサー

インタフェースについて

現在、EJBにてをWebシステムを開発しようとしている者です。そこでふと気になったことがあります。 それは、EJBにおいてローカルインタフェース、Homeインターフェイス、Remoteインターフェイスは一体それぞれどういう役割があり何の意味があるのか?ということです。普通のJavaBeansではなぜいけないのか? いろいろ、参考書見てもネットで調べてもピンとこないので誰か分かりやすく教えてくれる方いたらアドバイスお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#49664
noname#49664
回答No.1

私もあまりEJBは詳しくないので、概略程度の説明になりますが・・・。 EJBを使うとき、勘違いしてはいけないのは、「EJBは、Webアプリケーション開発のためのものではない」という点だと思います。EJBは本来、Web開発のためのものではありません。あくまで「分散処理」のためのコンポーネント技術です。  分散処理のためのものですので、基本は「分散処理に関する機能を実装したコンポーネントを作り、それを利用する」ということになるかと思います。EJBでは、そのためにRMIのためのインターフェイスを必要とします。これはローカル上とリモート上で異なる処理を行うため、2つの異なるインターフェイスが用意されています。ローカルであればそのままEJBサーバとクライアント間でEJBObjectをやり取りしますが、リモートである場合にはJNDIを介してEJBHomeを登録し、それによりEJBObjectを取得するような仕組みになっていたと思います。こうした違いにより、2つのインターフェイスが用意されていたのだと思います。  「普通のJavaBeansではなぜいけないのか?」ということですが、それではEJBObjectとして扱うことができません。EJBObjectはEJBHomeインターフェイスを内包しており、これによりクライアントがEJBコンテナからEJBを生成し検索することができます。  つまり、EJBコンテナの中でEJBとして機能するオブジェクトとするためには、これらのインターフェイスがないとダメだということです。そういうようにEJBコンテナは作られているわけですから。例えばサーブレットコンテナで動くオブジェクトはHttpServletを継承していないといけませんね。ただのJavaBeansでは動きません。「なぜ、ダメなのか?」といわれれば、「そういうようにサーブレットコンテナが作られているから」としかいいようがありません。それと同じでしょう。  逆に、なぜEJBを使おうと考えるのですか? サーブレットコンテナにApplication Beanなどを常駐させるのではなぜいけないのですか? そこを考えると、「通常のBeanとEJBは何が違うのか」ということが明確になってくるんじゃないでしょうか。ただ、サーバにあるBeanにアクセスするだけならEJBなんて不要です。別にエンティティBeanなんか使わなくてもデータベースアクセスする永続化オブジェクトなんて作れるわけです。私ならEJBなど使わずHibernateですませます。  そうではない何かを実現するためにEJBはあるわけでしょう。それは何なのか?といえば、突き詰めると「分散処理が必要かどうか」という部分にたどり着くと思うのです。 ちなみに、時期EJB 3.0ではDI(Dependency Injection)の手法が大幅に取り入れられ、こうしたやたら重たいインターフェイスを引きずったEJBからおさらばできるようですよ。そのへんもあるので、私は今、EJBに手を出すのはちょっとためらっています。3.0から勉強をしようかな?と思ったりしています。3.0ではかなりEJBは変わりそうですので、そちらの仕様なども確認してみてはいかがでしょうか。

関連するQ&A