[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 11179] EJB-SQL と Dynamic Query (1/3)



  高橋(智)です。

  先日の読書会で、EJB-QLを固定で書かざるを得ず、柔軟な検索用クエリ
を発行してEntityBeanを取得するためにはベンダ依存のDynamic Query
機能を使用することになる、という話が出たと思います。
  しかし、少し紹介しましたように、EJB2.0から追加された EJBホームメ
ソッドを使用すれば、EntityBeanのホームインターフェースを通して、自由
な検索を行えます。もちろん、このような機能はSessionBeanに追加すること
も可能ですが、他のEJB-QLによるfindByXXXXの宣言がEntityBeanにあること
を考えると、特に変な実装でもないと思います。

  以下、簡単な例として
    Windows2000,JDK1.3.1,MySQL,Borland Enterprise Server,JBuilder
という環境で、

  --------------------------------------------
  CREATE DATABASE ejbtest;
  CREATE TABLE book (ID integer NOT NULL,
                     ISBN varchar(16) NOT NULL,
                     TITLE varchar(32) NOT NULL,
                     PRIMARY KEY (ID),
                     UNIQUE KEY ISBN (ISBN));
  --------------------------------------------
というテーブルを作成し、

  ・EntiryBean名          : Book
  ・Homeインターフェース   : BookRemoteHome
  ・Remoteインターフェース : BookRemote
  ・Bean実装クラス         : BookBean
という CMP2.0 の EntiryBeanを作成し、

  BookRemoteHomeに
    public Collection execDynaSQL(String sql)
                                  throws FinderException, RemoteException;
というホームメソッドを作成し、

  BookBeanに
    public java.util.Collection ejbHomeExecDynaSQL(java.lang.String sql)
                                                       throws FinderException
の実装を追加し、

  BookTestClient1というテストクライアントから
  ・テスト用データ(2行)の追加
  ・SQL文字列 "select * from book where ISBN='1123412345' を用意
  ・execDynaSQLホームメソッドを利用して、Book EntityBean の取得
を行った時の

  ・ソースコード
    ・BookRemoteHome.java
    ・BookRemote.java
    ・BookBean.java
  ・配布ディスクリプタ
    ・ejb-jar.xml
    ・ejb-borland.xml
  ・テストクライアントコード
    ・BookTestClient1.java
を添付します。

-- 
高橋智宏