WebSphere Application Server - Express, Version 6.0.x   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows

             目次と検索結果のパーソナライズ化

コンテナー管理パーシスタンスの制約事項と例外

ご使用のアプリケーションに直接影響する外部ソフトウェアの 一部は、コンテナー管理パーシスタンス (CMP) の機能を制限することがあり ます。ただし、この制限は回避することができます。

それぞれの場合に、ソフトウェアの非常に固有な振る舞いのみが CMP Bean に制限を課します。 以下のヒントは、これらの振る舞いを防ぐための一助となるものです。

CMP デプロイメントおよび Sybase IMAGE 型の制約事項

コンテナー管理パーシスタンス (CMP) 型は、 非プリミティブで本来の JDBC マッピングを持たないため、 この型を備えたエンタープライズ Bean をデプロイする際には、デプロイメント・ツールが CMP 型を データベースでバイナリー形式にマップします。 データベースでは、この型はシリアライズ・インスタンスとして保管されます。 Sybase では、 このツールは JDBC 型である LONG VARBINARY を使用します。Sybase のドライバーは 、LONG VARBINARY をネイティブ型の IMAGE にマップします。

Sybase では、型 VARBINARY には IMAGE ほど多くの制約事項はありませんが、 サイズが 255 バイトに制限されていて、 シリアライズされた標準的な Java オブジェクトには小さすぎるため、この型は使用できません。

IMAGE 型に固有の制約事項は以下のとおりです。
  • SQL 照会の WHERE 文節では、IMAGE 型は使用できません。 WHERE 文節に CMP 型がある EJB-QL 照会がエンタープライズ Bean に含まれる場合は、常にこの制約事項に直面する可能性があります。この CMP 型は Sybase リレーショナル・データベースで IMAGE 型 にマップされます。
  • IMAGE 型は、DISTINCT と指定されている選択照会では使用できません。 この状態は、以下のユーザー・シナリオで生じます。
    • IMAGE にマッピングされる Java 型を備えた EJB-QL 選択照会 に DISTINCT キーワードが指定されている場合。
    • エンタープライズ Bean に、java.util を戻す finder および ejbSelect() メソッドがある場合。 CMP 型が IMAGE にマッピングされるように設定します。
この制約事項に対処するには、Rational Application Developer ツールセットの EJB マッピングを編集し、 以下のいずれかを実行します。
  • CMP 型のシリアライズ・インスタンスが 255 バイトを超えないことが確実である場合は、CMP 型マッピングを IMAGE または LONG VARBINARY から VARBINARY に変更することができます。
  • コンポーザーを使用して、CMP 型を複数の RDB フィールドにマップします。 例えば、CMP 型が int フィールドと string フィールドを持つ Java オブジェクト X である場合は、 コンポーザーを使用して、X を 2 つの RDB フィールド、INTEGERVARCHAR にマップします。 コンポーザーの使用について詳しくは、Rational Application Developer の資料を参照してください。

CMP 1.1 Bean の実行時に ClassCastException 例外が起こる

Enterprise JavaBeans (EJB) アプリケーションを、Rational Application Developer また は WebSphere Studio Application Developer Integration Edition バージョン 4.0.x で作成し、 そのアプリケーションにコンテナー管理パーシスタンス (CMP) 1.1 Bean がアソシエーション (関係) 付きで含まれている場合は、そのアプリケーションを WebSphere Application Server で 実行すると、java.lang.ClassCastException 例外が発生することがあります。

Rational Application Developer または WebSphere Studio Application Developer Integration Edition バージョン 4.0.x によって生 成されたキャスト操作では、リモート・オブジェクトを XToYLink.java (または YToXLink.java) クラス (X および Y は、CMP 1.1 Bean です) の CMP Bean のリモート・インターフェースに変 換するのに、javax.rmi.PortableRemoteObject.narrow(...) オブジ ェクトは使用しません。

推奨される対応

  1. すべてのリンク・クラス、例えば、XToYLink.java および YToXLink.java (X および Y は CMP 1.1 Bean です) で、以下のメソッドを見つけてください。
    public void secondaryAddElementCounterLinkOf(javax.ejb.EJBObject anEJB)
    public void secondaryRemoveElementCounterLinkOf(javax.ejb.EJBObject anEJB) 
    public void secondarySetCounterLinkOf(javax.ejb.EJBObject anEJB)
  2. javax.rmi.PortableRemoteObject.narrow(...) オブジェクトを追加して、リモート・オブジェクトを CMP Bean のリモート・インターフェースに変換します。
例えば、以下のオリジナルのメソッドを、
public void secondaryAddElementCounterLinkOf(javax.ejb.EJBObject anEJB) throws java.rmi.RemoteException {
        if (anEJB != null)
               ((X) anEJB).secondaryAddY((Y) getEntityContext().getEJBObject());
次のように変更します。
public void secondaryAddElementCounterLinkOf(javax.ejb.EJBObject anEJB) throws java.rmi.RemoteException {
        if (anEJB != null)
             ((X) anEJB).secondaryAddY((Y)
javax.rmi.PortableRemoteObject.narrow(getEntityContext().getEJBObject(), Y.class)); 



関連資料
CMP Bean 関連テクノロジー
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 11:31:28 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/rdat_cmptips.html