ひとつのインターフェースで複数のEJBクラスを参照する

このQ&Aのポイント
  • インターフェースが同じなら複数のEJBクラスを参照する構成は可能か
  • Beanごとにインタフェースが違う場合はこの構成はむりか
  • 共通RemoteI/F側にBean1~Nのインタフェースを定義し、使わないインターフェースの実装も行う必要がある
回答を見る
  • ベストアンサー

「ひとつのインターフェースで複数のEJBクラスを参照する」の続き

「ひとつのインターフェースで複数のEJBクラスを参照する」の続き こんにちは、k-makotoと申します。 インターフェースが同じなら↓のような構成は可能でしょうか? 「ひとつのインターフェースで複数のEJBクラスを参照する」の投稿の 続きなのですが、 仮にBeanごとにインタフェースが違うならこの構成はむりなのでしょうか? 子サーブレット1                                 Bean1 子サーブレット2---共通HomeI/F、共通HomeI/F-----Bean2 子サーブレット3                                 Bean3 子サーブレットN                                 BeanN Bean1の機能 データベースの検索 Data_Search() 検索結果をCSVファイルで取得する Get_Csv() Bean2の機能 テーブルの更新 Data_Update() テーブルの新規作成 Data_New() BeanNの機能 ........ のような場合だったら共通RemoteI/F側にBean1~Nのインタフェースの定義をしてさらに Bean1~Nに使わないインターフェースの実装も行わないとだめだということですよね.... .

  • Java
  • 回答数1
  • ありがとう数1

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

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

> 仮にBeanごとにインタフェースが違うならこの構成はむりなのでしょうか? 「ひとつのインターフェースで複数のEJBクラスを参照する」の続きと言うことですが、Beanごとのインタフェースが違うんなら、Remote や Homeインタフェースを共有するというのは、EJB設計上問題があると思うのですが。。。 > 共通RemoteI/F側にBean1~Nのインタフェースの定義をしてさらに > Bean1~Nに使わないインターフェースの実装も行わないとだめだということですよね.... . そういうことになりますね。。。 このような状況に対応する方法としては、以下の2パターンがあると思います。 1.EJBを呼び出すメソッドを子サーブレットに実装させる 2.個別のEJBを呼び出すEJBを用意する   プロキシクラスとか、アダプタクラスとか呼ばれる呼び出し元と   呼び出し先の間のブリッジになるクラスを使う 1の方は、親サーブレットに callEJB() といったメソッドを用意し、子サーブレットで、EJB呼び出しを実装するというものです。 最初の質問で、子サーブレットは独自の処理を実装するとなっていましたが、 EJBクラスのI/Fが別々ということであれば、それは既に独自の処理となると思うので、 EJB呼び出し用のメソッドを子サーブレットごとに実装していきます。 2の方では、ブリッジになるEJBを用意し、サーブレットからはこのEJBに呼び出したい EJBの情報を渡します。それで、このブリッジになるEJB内で、受け取った情報に 合わせたEJBを呼び出して結果を返却します。 2の方は、フレームワークを作成するときなどに一般に使われる方法だと思います。 特に、ブリッジに渡す情報を外部ファイル化したり、パラメータ化したりすると 新しいEJBの追加時の修正個所が局所化できると思います。 ただし2の場合、単純な場合でも、少なくとも2回EJB呼び出しが発生するので、 呼び出しのオーバーヘッドが気になるところですが。。。 # EJB2.0 からは、LocalHome、Local インタフェースが定義できるので、 # それらを使うことも考慮すべきですね

k-makoto
質問者

お礼

お返事ありがとうございました。 いろいろと考えたのですが、2の方法で考えてみようかと 思っています。EJBを2回呼び出さないといけないので 処理時間が気になりますが、それは実際に作ってみて検証を してみようと思っています。

関連するQ&A

  • ひとつのインターフェースで複数のEJBクラスを参照する

    はじめまして、MAKOTOと申します。 EJBを使った開発を行っているのですが、 サーブレットからEJBクラスを呼ぶとき 現在はRemoteインターフェイス、Homeインターフェース、EJBクラス1を1対 にしているのを Remoteインターフェイス1 Homeインターフェース1 EJBクラス1 Remoteインターフェイス2 Homeインターフェース2 EJBクラス2 ↓のように1対Nの関係で呼び出しを行いたい Remoteインターフェイス Homeインターフェース EJBクラス1 EJBクラス2 EJBクラス3 EJBクラス4 EJBクラス5 このようなことは可能なのでしょうか?

    • ベストアンサー
    • Java
  • EJBコンテナ。

    OJT期間中でサーバサイドを勉強中です。 アプリケーションサーバーの使用で組んだEJBをデプロイ(配置ですか)したときのコンテナの動作を知りたいです。 ちなみに基本的にアプリケーションサーバはオートデプロイで、jarファイルを当該ディレクトリに置いたとき、自動的にEJBが認識されます。 そもそも、EJBのコンテナとは、アプリケーションサーバにEJBが認識された時に作られるものなのでしょうか? クライアントからEJBの機能を呼び出そうとしたときにコンテナを意識したことはありませんが、参照の取得の過程でHomeインターフェース、Remoteインターフェース、Beanは一体どのような過程を辿ってインスタンスを生成し、実行可能状態に至るのでしょうか? また、Beanで実装したビジネスメソッドを実行する過程はどのようなものでしょうか?(まぁ、インスタンスが生成されれば普通にメソッドが呼び出されるのですが) 内部の概念の部分で、知る必要がないかも知れませんが、知りたいのでぜひ教えてください。 ちなみに java.sun.com のサイトにあるj2eetutorial を見て勉強中ですが、そこの説明は表層的なもののようでよくわかりません。 それと、余裕がありましたら、複数のサーブレットに渡って一つの EJB インスタンスを使用する方法(Sessionに設定する以外に)を教えてください。 いまいちよく分かっていないので、質問内容が的外れになっているかも知れませんが、よろしくお願いします。 説明するのが面倒くさいという方は解説のあるページを教えていただくだけでも結構です。

    • ベストアンサー
    • Java
  • JAVAでHTML数値を参照する方法

    java(JSP,サーブレット)を始めたばかりで、よくわからなく お教えねがえないでしょうか java(JSP+HTML)からjava(JSP,サーブレット)には request.getParameter()でデータを参照することは 出来たのですが、 JSP(HTML+javascript)の構成の場合 HTMLのinput文(value)とjavascript 変数を <% JSP %>の中でどのように記述したらデータを参照出来る のでしょうか

    • ベストアンサー
    • Java
  • アクセス 複数データの変換

    アクセス、またはエクセルで、テーブルのデータを、ほかのテーブルを参照にして、一括で変化する方法を教えてください。 具体的には、一つのテーブルに a b c a b d e f b d f g h となっているデータがあって、もう一つのテーブルに a apple b lemon c orange となっている場合に、最初のテーブルのデータをすべて、その対応する第二テーブルの内容に変換する方法です。 よろしくお願いします。

  • Accessのインポートについて

    マイクロソフトアクセス2010でテーブルを作り、そこにCSVファイルを読みこませたいです。 テーブルのフィールドはテキスト型です。 例えば、Table_TESTというテーブルにF1というテキスト型のフィールドを設けます。 Access標準のTEXTインポート機能を使い、インポートを行おうとします。 CSVファイルのデータは、「12345678912345678ABCD」といったように数値とアルファベットです。 なぜか、このようなデータをインポートする時にデータ変換エラーと表示されて、正しくインポートできません。 これは、なぜこのような現象が起こるのでしょうか?

  • Accessでcsvを読み込ませるプログラム(VB)

    教えてください。 毎月、同じ書式のCSVデータが発行されます。 そのcsvデータを参照ボタンを用意して、 任意の場所にあるそのCSVデータを毎回同じtable名で取り込み、 その後のプロシージャ―で使用したいのですが、 どのようにやったら可能でしょうか?

  • SQL*LoaderでCSVから指定した列のみインポートしたい。

    SQL*Loaderを用いてOracleのテーブルにデータを格納 しようと思っています。 格納するデータはカンマ区切りのCSVファイルです。 入力CSVファイルは他テーブル用のファイルなので、 ローダーで落とし込むテーブルとは列数が異なります。 ですので、「CSVの5列目の値をテーブルのAA_NOというフィールドに 格納する。ということが可能なのでしょうか?」 CSVファイルのある行が a,b,c,d,e,f というデータの場合、テーブルには a,e,f とインポートしたいのです。 よろしくお願いします。

  • リレーション?参照整合性の謎?

    Ac2000です。 「T_メンバー一覧」(テーブル) ・ID ・名前 ・所属 「T_マスタ」(テーブル) ・ID ・名前 ・所属 ・備考 とします。 それぞれからフォームを作成し、「F_マスタ」のフォーム上で IDはコンボボックスとし、ここでIDを指定すれば 名前と所属が入るようになっています。 「T_メンバー一覧」に変更があった場合(所属が変わるなど)に、 「T_マスタ」も自動で変更されるようにしたいのです。 T_マスタにデータが入っている場合です。(1件のみ) リレーションをはり、ID同士で設定しました。 「参照整合性」にチェックをし作成しようとすると、 「T_マスタ」テーブルのデータが参照整合性の規則に違反しています。 たとえば、ある社員に関連するレコードがリレーションテーブルにあるときに、 この社員に関連するレコードが主テーブルにありません。 ・・・・ となってしまうのです。 T_マスタにデータが入っておらず、上のリレーションが成功したあとに、 入力をしようと、F_マスタを開き、IDを選択して、 フォームを閉じようとすると、 「テーブル 'T_メンバー一覧'にリレーションシップが設定されたレコードが必要なので、 レコードの追加や変更は行うことはできません。 となります。 この2点を解決する回避策を教えてください。

  • javascriptでCSVを呼出しvlookup

    javascriptでCSVデータをを呼出して、あるinputに入力したデータでCSVをvlookupし、該当した行のある列を別のinputに書くということがしたいです。 こちらの記事はテーブルを参照していますが、 http://okwave.jp/qa/q6750899.html 外部CSVデータを直接読むコードはないでしょうか。 どうか助けてください。 よろしくお願いします。

  • テーブルに変更があったらCSV出力

    Oracle上のあるテーブルに変更があったら、そのテーブルのデータをCSVに出力するということをしたいのですが、どのようにするのが、よいでしょうか?知恵を貸してください。 ちょっとだけ考えたこととして、Trigger機能がうまく利用できないかと思ったのですが、CSVと連動するのが難解で悩み中です。 どうか、ご教授ください。お願いします。

専門家に質問してみよう