FaqJ2EEGeneratePKJa

主キー値の生成

この記事は、MySQL データベースの主キー値生成機能を使用する CMP ビーンの開発を記述します。この文書は MySQL の App Server 8.1 内の設定を記述することは意図していません。

背景

Sun Java System Application Server は、EBJ 1.1、2.0、2.1 CMP ビーンに対する自動主キー生成をサポートします。自動主キー生成を指定するには、ejb-jar-xml ファイル内の prim-key-class 要素に java.lang.Object 値を与えます。自動生成主キーを伴う CMP ビーンは他の CMP ビーンとの関係にも関与できます。Sun Java System Application Server は、データベース生成主キー値はサポートしません。

データベーススキーマが配備中に生成された場合、Sun Java System Application Server は主キー列を含むスキーマを生成し、実行時に主キー列用の一意値を生成します。

データベーススキーマが配備中に生成されない場合、マップされた表内の主キー列は19桁以上の精度を持つ NUMERIC 型で無ければならず、いかなる CMP フィールドにもマップしてはいけません。Sun Java System Application Server は、実行時に主キー列用の一意値を生成します。

データベースとアプリケーションサーバの設定

  1. 表の作成:
       CREATE TABLE customer (
       id BIGINT(19) NOT NULL auto_increment, -- this column will be automat. generated
       lastName varchar(25) NOT NULL,
       firstName varchar(30) default NULL,
       PRIMARY KEY  (id))
     
  1. MySQL JDBC ドライバ (mysql-connector-java-xxxx.jar) を $SUN_APP/domains/domain1/lib/ext に複写
  2. サーバを再起動

EJB モジュールの作成

  1. 新規 EJB モジュール CustomerModule を作成します
  2. カスタム表から CMP ビーンを生成します
  3. id 行が CMP ビーンにマップされていない、プロジェクトタブで id を示すノードを選択し、削除アクションを実行します
  4. エディタでビーンクラスを開き、ejbCreate メソッドと ejbPost メソッドから id パラメータを削除します
  5. 作成メソッドの戻りパラメータを java.lang.Object に変更します
  6. CustomerLocalHome インタフェースを開き、作成メソッドから id パラメータを削除します
  7. findByPrimaryKey メソッドのパラメータ型を java.lan.Object に変更します
  8. 新規無状態セッションビーン CustomerFacade を遠隔インタフェースに追加します
  9. Call EJB を呼び出し、カスタマエンティティービーンを選択します
  10. これらのビジネスメソッドを実装し、遠隔インタフェースに追加します:
    public long createCustomer(String lastName, String firstName) throws Exception {
        return ((Long)customerHome.create(lastName, firstName).getPrimaryKey()).longValue();
    }

    public String getName(long id) throws Exception {
        CustomerLocal customer = customerHome.findByPrimaryKey(new Long(id));
        return customer.getFirstName() + " " + customer.getLastName();
    }
    
  1. 接続プールノードを選択し、DataSouce クラスの名前を次のように変えます: com.mysql.jdbc.jdbc2.optional.MysqlDataSource。IZ 参照。
  2. モジュールを配備します

CMP ビーンの検査

  1. プロジェクトタブの中でソースの下の CustomerFacadeBean を選択し、「ツール」->「JUnit テスト」->「テストを作成」を起動します
  2. すべての testxxx メソッドを削除します
  3. setUp と二つの検査メソッドを実装します
    protected void setUp() throws Exception {
        InitialContext ctx = new InitialContext();
        Object obj = ctx.lookup("ejb/CustomerFacadeBean");
        customerFacade = ((CustomerFacadeRemoteHome)PortableRemoteObject.narrow(obj, CustomerFacadeRemoteHome.class)).create();
    }

    public void testCreateCustomer() throws Exception {
        System.out.println("PK: " + customerFacade.createCustomer("Foo","Bar"));
    }

    public void testGetCustomerName() throws Exception {
        long id = customerFacade.createCustomer("Blaha", "Petr");
        assertEquals("Petr Blaha",customerFacade.getName(id));
    }
    
  1. appserv-rt.jar を Test クラスパスに追加します
  2. 検査を実行し結果を調べます

課題

  • 配備の際にエラーになりました JDO71030: There is no column in table myTable which can be used to support the servers implementation of unknown key classes.。この問題は、あなたのモジュールの誤った構成によって発生します。ejb-jar.xml、作成メソッドの戻り型、findByPrimaryKey のパラメタが、正しいことを確認してください。

---

Not logged in. Log in, Register

By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2012, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo