ご使用のアプリケーションに直接影響する外部ソフトウェアの 一部は、コンテナー管理パーシスタンス (CMP) の機能を制限することがあり ます。ただし、この制限は回避することができます。
それぞれの場合に、ソフトウェアの非常に固有な振る舞いのみが CMP Bean に制限を課します。 以下のヒントは、これらの振る舞いを防ぐための一助となるものです。
コンテナー管理パーシスタンス (CMP) 型は、 非プリミティブで本来の JDBC マッピングを持たないため、 この型を備えたエンタープライズ Bean をデプロイする際には、デプロイメント・ツールが CMP 型を データベースでバイナリー形式にマップします。 データベースでは、この型はシリアライズ・インスタンスとして保管されます。 Sybase では、 このツールは JDBC 型である LONG VARBINARY を使用します。Sybase のドライバーは 、LONG VARBINARY をネイティブ型の IMAGE にマップします。
Sybase では、型 VARBINARY には IMAGE ほど多くの制約事項はありませんが、 サイズが 255 バイトに制限されていて、 シリアライズされた標準的な Java オブジェクトには小さすぎるため、この型は使用できません。
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(...) オブジ ェクトは使用しません。
推奨される対応
public void secondaryAddElementCounterLinkOf(javax.ejb.EJBObject anEJB) public void secondaryRemoveElementCounterLinkOf(javax.ejb.EJBObject anEJB) public void secondarySetCounterLinkOf(javax.ejb.EJBObject anEJB)
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));