EJB検証ツールで実装される規則

このドキュメントでは、EJB 2.0仕様によってEJBデプロイメント・ディスクリプタおよびコードに課せられる規則について説明します。

注意: EJBベリファイアは、EJB 2.0仕様に従って開発されたモジュールおよびBean(EJB 2.0仕様に準拠するCMP 1.xのBeanも含む)を検証します。EJB 1.1仕様に従って開発されたモジュールおよびBeanはサポートされません。

JDeveloper 9.0.4のEJBベリファイアは、次の規則の多くを実装しますが、まだ実装されていない規則は、9.0.5で実装される予定です。ここでは、実装されている規則は黒丸で、実装されていない規則は白丸で示します。次に例を示します。

 この規則は検証ツールでチェックされます。
 この規則はチェックされません。

セッションBean、エンティティCMP BeanおよびエンティティBMP Beanの規則と、リモートおよびローカル・ホームなどの規則とでは、多くの重複があります。このため、仕様の参照のみの違いで何度も出てくる規則が多数あります。

メッセージは、問題の対象範囲が的確にわかるように書かれています。たとえば、CMP 2.xエンティティBeanはabstractである必要がありますが、CMP 1.xエンティティBeanはabstractにしないでください。そこで、メッセージでは必要に応じて「CMP 2.xエンティティBean」、「BMPエンティティBean」または「CMP 1.xエンティティBean」と対象を明示しています。一方、すべてのエンティティBeanはjavax.ejb.EntityBeanを拡張する必要があるので、メッセージでは「エンティティBean」とのみ書かれています。

規則の中には、最後に[警告]と指定されているものがあります。これは、仕様で厳格に禁止されてはいないが非推奨とされている規則を示します。この場合のメッセージでは、「する必要があります、しないでください」ではなく「することをお薦めします、しないことをお薦めします」と表記されていることがあります。

デプロイメント・ディスクリプタの規則

規則は、囲みDTD要素によってグループ化されます。各規則の最後にある丸カッコ内のパスは、規則が適用されるDTD要素を、囲みDTD要素に対する相対位置で表しています(「.」は囲み要素自体を示します)。

Beanの説明

<entity><message-driven><session>

  EJB名<class-name>はすでに宣言されています(ejb-name)。
  Beanクラス<class-name>がプロジェクトで見つかりません(ejb-class)。
  環境エントリ名<name>はすでに宣言されています(env-entry/env-entry-name)。
  環境エントリ・タイプ<class-name>はプリミティブ・ラッパー型またはStringにする必要があります(env-entry/env-entry-type)。
  環境エントリ値は、<class-name>に変換可能である必要があります(env-entry/env-entry-value)。
  EJB参照<name>はすでに宣言されています(ejb-ref/ejb-ref-name、ejb-local-ref/ejb-ref-name)。
  EJB参照名<name>には接頭辞「ejb/」を付けることをお薦めします(ejb-ref/ejb-ref-name、ejb-local-ref/ejb-ref-name)。[警告]
  EJB参照では、タイプがエンティティまたはセッションである必要があります(ejb-ref/ejb-ref-type、ejb-local-ref/ejb-ref-type)。
  EJB参照の<interface>インタフェース<class-name>がプロジェクトで見つかりません(ejb-ref/remote、ejb-ref/home、ejb-ref/local、ejb-ref/local-home)。
  EJB参照の<interface>インタフェースでは、<class-name>を拡張する必要があります(ejb-ref/remote、ejb-ref/home、ejb-ref/local、ejb-ref/local-home)。
  EJB<name>は外部で定義されているとみなされます(ejb-ref/ejb-link、ejb-local-ref/ejb-link)。[警告]
  リソース・ファクトリ<name>はすでに参照されています(resource-ref/res-ref-name)。
  リソース・ファクトリ・タイプ<class-name>がプロジェクトで見つかりません(resource-ref/res-type)。
  リソース・ファクトリ認証タイプはアプリケーションまたはコンテナである必要があります(resource-ref/res-auth)。
  リソース・ファクトリの共有性は共有可または共有不可である必要があります(resource-ref/res-sharing-scope)。
  リソース環境<name>はすでに参照されています(resource-env-ref/resource-env-ref-name)。
  リソース環境タイプ<class-name>がプロジェクトで見つかりません(resource-env-ref/resource-env-ref-type)。
  セキュリティ・ロール名<name>が有効なXML名(NMTOKEN)ではありません(security-identity/run-as/role-name)。
  セキュリティ・ロール<name>がアセンブリ記述子で宣言されていません(security-identity/run-as/role-name)。

<entity><session>

  <interface>インタフェース<class-name>がプロジェクトで見つかりません(remote、home、local、local-home)。
  リモート・インタフェースまたはローカル・インタフェースを宣言する必要があります(.)。
  リモート・インタフェースが宣言されているときは、ホーム・インタフェースを宣言する必要があります(remote)。
  ホーム・インタフェースが宣言されているときは、リモート・インタフェースを宣言する必要があります(home)。
  ローカル・インタフェースが宣言されているときは、ローカル・ホーム・インタフェースを宣言する必要があります(local)。
  ローカル・ホーム・インタフェースが宣言されているときは、ローカル・インタフェースを宣言する必要があります(local-home)。
  セキュリティ・ロール参照<name>がセキュリティ・ロールにリンクされていません(security-role-ref/role-name)。
  セキュリティ・ロール名<name>が有効なXML名(NMTOKEN)ではありません(security-role-ref/role-link)。
  セキュリティ・ロール<name>がアセンブリ記述子で宣言されていません(security-role-ref/role-link)。

<session>

  セッション・タイプはステートフルまたはステートレスのいずれかである必要があります(session-type)。
  トランザクション・タイプはBeanまたはコンテナのいずれかである必要があります(transaction-type)。

<message-driven>

  <interface>インタフェースはMessage-Driven Beanには適用できません(remote、home、local、local-home)。
  認識モードはコンテナ・トランザクション・タイプでは適用できません(acknowledge-mode)。
  認識モードはAuto-acknowledgeまたはDups-ok-acknowledgeのいずれかである必要があります(acknowledge-mode)。
  宛先タイプはjavax.jms.Queueまたはjavax.jms.Topicのいずれかである必要があります(message-driven-destination/destination-type)。
  受信(Subscription)の永続性がキュー宛先タイプに対して不適切です(message-driven-destination/subscription-durability)。
  受信(Subscription)の永続性はDurableまたはNonDurableのいずれかである必要があります(message-driven-destination/subscription-durability)。
  トランザクション・タイプはBeanまたはコンテナのいずれかである必要があります(transaction-type)。

<entity>

  エンティティBean名<name>は有効なJava識別子である必要があります(ejb-name、10.3.13)。
  エンティティBean名<name>には予約済EJB QL識別子を使用しないでください(ejb-name、11.2.6.1)。
  永続性タイプはBeanまたはコンテナのいずれかである必要があります(persistence-type)。
  リエントラントはTrueまたはFalseのいずれかである必要があります(reentrant)。
  主キー・クラス<class-name>がプロジェクトで見つかりません(prim-key-class)。

<entity> CMP

  CMPバージョンは1.xまたは2.xのいずれかである必要があります(cmp-version)。
  CMPフィールド<name>は、主キー・フィールド<name>に対応するように定義されている必要があります(prim-key-class)。
  主キー・フィールド<name>はpublicである必要があります(prim-key-class)。
  主キー・フィールド<name>はCMPフィールドである必要があります(primkey-field)。
  主キー・フィールドは、主キー・クラス<class-name>の主キー・フィールドである必要があります(prim-key-class)。

<entity> CMP 2.x

  CMP 2.x Beanの名前<name>が有効なXML名(NMTOKEN)ではありません(ejb-name)。
  CMP 2.x Beanの名前<name>にはEJB QLの予約語を使用しないでください(ejb-name、10.6.14)。
  CMP 2.x Beanに抽象スキーマ名が必要です(abstract-schema-name)。
  抽象スキーマ名<name>は有効なJava識別子である必要があります(abstract-schema-name、10.3.13)。
  抽象スキーマ名<name>には予約済EJB QL識別子を使用しないでください(ejb-name、10.6.14)。
  問合せメソッド<signature>に対する問合せ宣言がありません(.)。
  findメソッド<signature>がエンティティBeanクラスで見つかりません(query/query-method)。
  selectメソッド<signature>がエンティティBeanクラスで見つかりません(query/query-method)。
  CMP 2.xフィールド名<name>は小文字で始める必要があります(cmp-field/field-name)。
 CMP 2.xフィールド名<name>は有効なJava識別子である必要があります(cmp-field/field-name、10.3.1)。
  結果タイプ・マッピングはfinderメソッドには適用できません(query/result-type-mapping)。
  結果タイプ・マッピングはローカルまたはリモートである必要があります(query/result-type-mapping)。

<entity> CMP 1.x

  CMP 1.x Beanにはホーム・インタフェースが必要です(.)。
  CMP 1.x Beanにはリモート・インタフェースが必要です(.)。
  問合せ宣言はCMP 1.x Beanには適用できません(query)。
  CMP 1.x BeanにはCMPフィールドが必要です(cmp-field/field-name)。
  CMP 1.x Beanフィールド<name><class-name>で定義されている必要があります(cmp-field/field-name)。

<entity> BMP

  主キー・フィールドはBMP Beanには適用できません(primkey-field)。
  CMPバージョンはBMP Beanには適用できません(cmp-version)。
  問合せ宣言はBMP Beanには適用できません(query)。
  CMPフィールドはBMP Beanには適用できません(cmp-field)。

関連

<ejb-relation>

  関連名<name>はすでに使用されています(ejb-relation-name)。
  関連ロール名<name>はすでに使用されています(ejb-relationship-role/ejb-relationship-role-name)。
  ロール・ソース・エンティティBean<name>が定義されていません(ejb-relationship-role/relationship-role-source/ejb-name)。
  Bean<name>はCMP 2.xのエンティティBeanでないため、関連に使用できません(ejb-relationship-role/relationship-role-source/ejb-name)。
  多重度は「1」または「多」である必要があります(ejb-relationship-role/multiplicity)。
  他のロールに「多」の多重度がある場合は、カスケード削除を適用できません(ejb-relationship-role/cascade-delete)。
  CMRフィールド名は小文字で始める必要があります(ejb-relationship-role/cmr-field/cmr-field-name)。
 CMP 2.xフィールド名<name>は有効なJava識別子である必要があります(cmp-field/field-name、10.3.1)。
  CMRフィールド型はjava.util.Collectionまたはjava.util.Setである必要があります(ejb-relationship-role/cmr-field/cmr-field-type)。
  CMRフィールド<name>に対するアクセッサ・メソッド<signature><class-name>で見つかりません(ejb-relationship-role/cmr-field/cmr-field-name)。

アセンブリ記述子

<assembly-descriptor>

  セキュリティ・ロール名<name>が有効なXML名(NMTOKEN)ではありません(security-role/role-name)。
  セキュリティ・ロール<name>はすでに宣言されています(security-role/role-name)。
  メソッド呼出しの権限のセキュリティ・ロール名が有効なXML名(NMTOKEN)ではありません(method-permission/role-name)。
  メソッド呼出しの権限のセキュリティ・ロール<name>が宣言されていません(method-permission/role-name)。
  EJB <name>が未知です(method-permission/method/ejb-name、container-transaction/method/ejb-name、exclude-list/method/ejb-name)。
  EJBインタフェース・セレクタが、Home、Remote、LocalHomeまたはLocalではありません(method-permission/method/method-intf、container-transaction/method/method-intf、exclude-list/method/method-intf)。
  メソッド<signature><interface-list>で定義されている必要があります(method-permission/method、container-transaction/method、exclude-list/method)。
  トランザクション属性は、NotSupported、Supports、Required、RequiresNew、Mandatory、Neverのいずれかである必要があります(container-transaction/trans-attribute)。
  Message-Driven Bean onMessageメソッドのトランザクション属性は、NotSupported、Requiredのいずれかである必要があります(container-transaction/trans-attribute、15.4.7)。
  メソッド<signature>はすでにトランザクション属性を割り当てています(container-transaction/method)。
  <unchecked>はメソッド<signature>のセキュリティ・ロールの割当てをオーバーライドします(method-permission/method)。[警告](.)
  <exclude-list>はメソッド<signature>のセキュリティ・ロールの割当てをオーバーライドします(exclude-list/method)。[警告]
  メソッド<signature>にセキュリティ・ロールの割当てがありません(assembly-descriptor)。[警告]

その他

<large-icon><small-icon><ejb-jar><entity><message-driven><session>における)

  アイコン<file>がプロジェクトで見つかりません(.)。
  アイコン<file>は有効なGIFまたはJPEGイメージではありません(.)。

<ejb-client-jar>

  クライアントJAR <file>がワークスペースで見つかりません(.)。[警告]

インタフェースおよびクラスの規則

セッションBean

セッションBeanクラス

  セッションBeanクラスはjavax.ejb.SessionBeanを実装する必要があります(7.10.2)。
  セッションBeanクラスではjavax.jms.MessageListenerを実装しないでください(15.4.2)。
  セッションBeanクラスはpublicである必要があります(7.10.2)。
  セッションBeanクラスはabstractにしないでください(7.10.2)。
  セッションBeanクラスはfinalにしないでください(7.10.2)。
  セッションBeanクラスには引数なしのpublicコンストラクタが必要です(7.10.2)。
  セッションBeanクラスではfinalize()を定義しないでください(7.10.2)。
  セッションBeanではリモート・インタフェースを実装しないでください(7.10.2)。[警告]
  セッションBeanではローカル・インタフェースを実装しないことをお薦めします(7.10.2)。[警告]
  サポート・メソッド名<name>は「ejb」で始めないでください(7.10.4)。
  リモート・ビジネス・メソッド<signature>を実装する必要があります(7.10.5)。
  ローカル・ビジネス・メソッド<signature>を実装する必要があります(7.10.7)。
  リモートejbCreateメソッド<signature>を実装する必要があります(7.10.6)。
  ローカルejbCreateメソッド<signature>を実装する必要があります(7.10.8)。
  ejbCreateメソッドではRemoteExceptionをスローしないことをお薦めします(7.10.3)。[警告]
  ejbCreateメソッドはpublicである必要があります(7.10.3)。
  ejbCreateメソッドはfinalにしないでください(7.10.3)。
  ejbCreateメソッドはstaticにしないでください(7.10.3)。
  ejbCreateメソッドの戻り型はvoidである必要があります(7.10.3)。
  ejbCreateメソッド<signature>はcreateメソッドに対応している必要があります(7.10.4、7.10.6)。
  ビジネス・メソッドではRemoteExceptionをスローしないことをお薦めします(7.10.4)。[警告]
  ビジネス・メソッドはpublicである必要があります(7.10.4)。
  ビジネス・メソッドはfinalにしないでください(7.10.4)。
  ビジネス・メソッドはstaticにしないでください(7.10.4)。
  ビジネス・メソッドの戻り型は<class-name>である必要があります(7.10.5)。
  ビジネス・メソッドの戻り型は<class-name>である必要があります(7.10.7)。
  セッションBeanフィールドはtransientにしないでください(7.4.1)。
  Bean管理のトランザクション境界(デマーケーション)を持つセッションBeanでは、javax.ejb.SessionSynchronizationを実装しないでください7.5.3)。
  ステートレス・セッションBeanではjavax.ejb.SessionSynchronizationを実装しないでください(7.10.2)。
  ejbPostCreateメソッドはセッションBeanには適用できません(7.10.2)。[警告]

セッションBeanクラスのメソッド本体

  メソッド<name>では、SessionContextメソッド<name>を使用しないでください(7.6.1)。
  メソッド<name>では、UserTransactionメソッド<name>を使用しないでください(7.6.1)。
  メソッド<name>では、Enterprise Beanメソッド<name>を使用しないでください(7.6.1)。
  メソッド<name>では、リソース・マネージャ・メソッド<name>を使用しないでください(7.6.1)。
  セッションBeanではgetPrimaryKey()を起動しないでください(6.9.3)。

セッション・リモート・インタフェース

  セッションBeanリモート・インタフェースでは、javax.ejb.EJBObjectを拡張する必要があります(7.10.5)。
 メソッド名を「ejb」で始めることはできません(7.10.4)。
  メソッド<signature>は、メソッドを実装することによってスローされる<class-name>をスローする必要があります(7.10.5)。
  ローカル・インタフェース<class-name>は公開しないでください(7.10.5)。
  ローカル・ホーム・インタフェース<class-name>は公開しないでください(7.10.5)。
  メソッド<signature>は、RemoteExceptionをスローする必要があります(7.10.5)。
  メソッド<signature>を、<class-name>および<class-name>の両方から導出することはできません(7.10.5)。
  定数<name>はプリミティブ型またはStringにする必要があります(7.10.5)。
  メソッド<signature>および<signature>は同じIDL名にマップされます(7.10.5)。
  <class-name>はシリアライズ可能またはRMI/IIOP互換とみなされます(7.10.5)。[警告]

セッション・ホーム・インタフェース

  セッションBeanリモート・インタフェースでは、javax.ejb.EJBHomeを拡張する必要があります(7.10.6)。
  ローカル・インタフェース<class-name>は公開しないでください(6.7.2)。
  ローカル・ホーム・インタフェース<class-name>は公開しないでください(6.7.2)。
  セッションBeanローカル・ホーム・インタフェースでは、createメソッド以外のメソッドを定義しないでください(7.10.6)。
  メソッド<signature>はリモート・インタフェース<class-name>を返す必要があります(7.10.6)。
  メソッド<signature>は、RemoteExceptionをスローする必要があります(7.10.6)。
  メソッド<signature>は、CreateExceptionをスローする必要があります(7.10.6)。
  メソッド<signature>は、ejbCreateメソッドを実装することによってスローされる<class-name>をスローする必要があります(7.10.6)。
  メソッド<signature>を、<class-name>および<class-name>の両方から導出することはできません(RMI/IIOPの規則)(7.10.6)。
  定数<name>はプリミティブ型またはStringにする必要があります(7.10.6)。
  メソッド<signature>および<signature>は同じIDL名にマップされます(7.10.6)。
  <class-name>はシリアライズ可能またはRMI/IIOP互換とみなされます(7.10.6)。[警告]

ステートフル・セッション・ホーム・インタフェース

  セッションBeanでは1つ以上のcreateメソッドを定義する必要があります(7.10.6)。

ステートレス・セッション・ホーム・インタフェース

  ステートレス・セッションBeanでは、引数なしのcreateメソッドを定義する必要があります(7.10.6)。
  ステートレス・セッションBeanでは、引数なしのcreate以外のcreateメソッドを定義しないでください(7.10.6)。

セッション・ローカル・インタフェース

  セッションBeanローカル・インタフェースでは、javax.ejb.EJBLocalObjectを拡張する必要があります(7.10.7)。
  メソッド名を「ejb」で始めないでください(7.10.4)。
  メソッド<signature>ではRemoteExceptionをスローしないでください(7.10.7)。
  メソッド<signature>は、メソッドを実装中することによってスローされる<class-name>をスローする必要があります(7.10.7)。

セッション・ローカル・ホーム・インタフェース

  セッションBeanローカル・ホーム・インタフェースでは、javax.ejb.EJBLocalHomeを拡張する必要があります(7.10.8)。
  セッションBeanローカル・ホーム・インタフェースでは、createメソッド以外のメソッドを定義しないでください(7.10.8)。
  メソッド<signature>ではRemoteExceptionをスローしないでください(7.10.8)。
  メソッド<signature>は、CreateExceptionをスローする必要があります(7.10.8)。
  メソッド<signature>はローカル・インタフェース<class-name>を返す必要があります(7.10.8)。
  メソッド<signature>は、ejbCreateメソッドを実装することによってスローされる<class-name>をスローする必要があります(7.10.8)。

ステートフル・セッション・ローカル・ホーム・インタフェース

  セッションBeanでは1つ以上のcreateメソッドを定義する必要があります。

ステートレス・セッション・ローカル・ホーム・インタフェース

  ステートレス・セッションBeanでは引数なしのcreateメソッドを定義する必要があります(7.10.8)。
  ステートレス・セッションBeanでは、引数なしのcreate以外のcreateメソッドを定義しないでください(7.10.8)。

CMP 2.xエンティティBean

CMP 2.xエンティティBeanクラス

  エンティティBeanクラスはjavax.ejb.EntityBeanを実装する必要があります(10.6.2)。
  エンティティBeanクラスではjavax.jms.MessageListenerを実装しないでください(15.4.2)。
  エンティティBeanクラスはpublicである必要があります(10.6.2)。
 CMP 2.xエンティティBeanクラスはabstractである必要があります(10.6.2)。
  エンティティBeanクラスには引数なしのpublicコンストラクタが必要です(10.6.2)。
  エンティティBeanクラスではfinalize()を定義しないでください(10.6.2)。
  エンティティBeanではリモート・インタフェースを実装しないことをお薦めします(10.6.2)。[警告]
  エンティティBeanではローカル・インタフェースを実装しないことをお薦めします(10.6.2)。[警告]
  エンティティBeanクラスではリモート・インタフェース・メソッド<signature>を実装する必要があります(実装しないとリモート・インタフェースを実装できません)(10.6.2)。
  エンティティBeanクラスではローカル・インタフェース・メソッド<signature>を実装する必要があります(実装しないとローカル・インタフェースを実装できません)(10.6.2)。
  リモートcreateメソッド<signature>を実装する必要があります(10.6.10)。
  ローカルcreateメソッド<signature>を実装する必要があります(10.6.12)。
  ejbCreateメソッドはpublicである必要があります(10.6.4)。
  ejbCreateメソッドはfinalにしないでください(10.6.4)。
  ejbCreateメソッドはstaticにしないでください(10.6.4)。
  ejbCreateメソッドの戻り型は主キー・クラス<class-name>である必要があります(10.6.4)。
  ejbCreateメソッドではCreateExceptionをスローする必要があります(10.6.4)。
  ejbCreateメソッド<signature>はローカルまたはリモートのホーム・インタフェースのcreateメソッドに対応している必要があります(10.6.10、10.6.12)。
 CMP 2.x ejbCreateメソッドではRemoteExceptionをスローしないでください(10.6.4)。
  ejbPostCreateメソッド<signature>を実装する必要があります(10.6.5)。
  ejbPostCreateメソッドはpublicである必要があります(10.6.5)。
  ejbPostCreateメソッドはfinalにしないでください(10.6.5)。
  ejbPostCreateメソッドはstaticにしないでください(10.6.5)。
  ejbPostCreateメソッドの戻り型はvoidである必要があります(10.6.5)。
  ejbPostCreateメソッド<signature>はejbCreateメソッドに対応している必要があります(10.6.5)。
  ejbPostCreateメソッドはejbCreate(<signature>)メソッドに対して定義されている必要があります(10.6.5)。
 CMP 2.x ejbPostCreateメソッドではRemoteExceptionをスローしないでください(10.6.5)。
  ejbHomeメソッドではRemoteExceptionをスローしないでください(10.6.6)。
  ejbHomeメソッドはpublicである必要があります(10.6.6)。
  ejbHomeメソッドはstaticにしないでください(10.6.6-)。
  ejbHomeメソッド<signature>は、ローカルまたはリモートのホーム・インタフェースのビジネス・メソッドに対応している必要があります(10.6.10、10.6.12)。
  finderメソッド<signature>を実装しないでください(10.6.2)。
  ejbSelectメソッドではinderExceptionをスローする必要があります(10.6.7)。
  ejbSelectメソッドはpublicである必要があります(10.6.6)。
  ejbSelectメソッドはabstractである必要があります(10.6.7)。
  ejbSelectメソッド<signature>は、デプロイメント・ディスクリプタの問合せ要素に対応している必要があります(10.5.7)。
  リモート・ビジネス・メソッド<signature>を実装する必要があります(10.6.9)。
  ローカル・ビジネス・メソッド<signature>を実装する必要があります(10.6.11)。
  ビジネス・メソッド<signature>はpublicである必要があります(10.6.8)。
  ビジネス・メソッド<signature>はfinalにしないでください(10.6.8)。
  ビジネス・メソッド<signature>はstaticにしないでください(10.6.8)。
  ビジネス・メソッド<signature>の戻り型は<class-name>である必要があります(10.6.10、10.6.12)。
  ビジネス・メソッド<signature>は、ローカルまたはリモート・インタフェースのビジネス・メソッドに対応している必要があります(10.6.10、10.6.12)。
 CMP 2.xビジネス・メソッド<signature>ではRemoteExceptionをスローしないでください(10.6.8)。
  サポート・メソッド名<name>を「ejb」で始めないでください(10.6.8)。
  CMP 2.x CMPフィールド・アクセッサ<signature>はpublicである必要があります(10.3.1)。
  CMP 2.x CMPフィールド・アクセッサ<signature>はabstractである必要があります(10.3.1)。

 エンティティBeanではCMPフィールド<name>アクセッサ<signature>を定義する必要があります(cmp-field/field-name、10.3.1)。
  エンティティBeanではCMRフィールド<name>アクセッサ<signature>を定義する必要があります(cmr-field/field-name、10.3.1)。
  エンティティBeanでは、CMPフィールド<name>に対応したフィールド<name>を定義しないでください(cmp-field/field-name、10.3.1)。
  エンティティBeanでは、CMRフィールド<name>に対応したフィールド<name>を定義しないでください(10.3.1)。

CMP 2.xエンティティBeanクラスのメソッド本体

  メソッド<name>ではCMPフィールドにアクセスしないでください(10.5.2)。
  メソッド<name>ではCMRフィールドにアクセスしないでください(10.5.2)。
  メソッド<name>メソッドでは、EntityContextメソッド<name>を使用しないでください(10.5.5)。
  メソッド<name>メソッドでは、Enterprise Beanメソッド<name>を使用しないでください(10.5.5)。
  メソッド<name>メソッドでは、リソース・マネージャ・メソッド<name>を使用しないでください(10.5.5)。
  メソッドejbCreateではCMRフィールドを設定しないでください(ejbPostCreateを使用します)(10.5.2)。
  メソッド<name>では主キーCMPフィールドを設定しないでください(10.3.1)。

CMP 2.xエンティティ・リモート・インタフェース

  エンティティBeanリモート・インタフェースでは、javax.ejb.EJBObjectを拡張する必要があります(10.6.9)。
 メソッド名を「ejb」で始めないでください(10.6.8)。
  メソッド<signature>は、メソッドを実装することによってスローされる<class-name>をスローする必要があります(7.10.5)。
  ローカル・インタフェース<class-name>は公開しないでください(10.3.1)。
  ローカル・ホーム・インタフェース<class-name>は公開しないでください(10.3.1)。
  メソッド<signature>は、RemoteExceptionをスローする必要があります(10.6.9)。
  メソッド<signature>を、<class-name>および<class-name>の両方から導出することはできません(10.6.9)。
  定数<name>はプリミティブ型またはStringにする必要があります(10.6.9)。
  メソッド<signature>および<signature>は同じIDL名にマップされます(10.6.9)。
  <class-name>はシリアライズ可能またはRMI/IIOP互換とみなされます(10.6.9)。[警告]
  エンティティBeanリモート・インタフェースでは、CMPフィールド<name>に対してセッターを公開しないでください(10.3.1)。
  エンティティBeanリモート・インタフェースでは、CMRフィールド・アクセッサ<signature>を公開しないでください(10.3.1)。

CMP 2.xエンティティ・リモート・ホーム・インタフェース

  エンティティBeanリモート・ホーム・インタフェースでは、javax.ejb.EJBHomeを拡張する必要があります(10.6.10)。
  エンティティBeanリモート・ホーム・インタフェースでは、finderメソッドfindByPrimaryKeyを定義する必要があります(10.6.10)。
  エンティティBeanリモート・ホーム・インタフェースでは、必須のfinderメソッドfindByPrimaryKeyをオーバーロードしないでください(9.5.2)。
  finderメソッド<signature>は、デプロイメント・ディスクリプタの問合せ要素に対応している必要があります(10.6.14)。
  ローカル・インタフェース<class-name>は公開しないでください(10.6.10)。
  ローカル・ホーム・インタフェース<class-name>は公開しないでください(10.6.10)。
  createメソッド<signature>は、リモート・インタフェース<class-name>を返す必要があります(10.6.10)。
  createメソッド<signature>は、CreateExceptionをスローする必要があります(10.6.10)。
  createメソッド<signature>は、ejbCreateメソッドを実装することによってスローされる<class-name>をスローする必要があります(10.6.10)。
  createメソッド<signature>は、ejbPostCreateメソッドを実装することによってスローされる<class-name>をスローする必要があります(10.6.10)。
  finderメソッド<signature>は、リモート・インタフェース<class-name>またはそのコレクションを返す必要があります(10.6.10)。
  finderメソッド<signature>は、FinderExceptionをスローする必要があります(10.6.10)。
  homeメソッド名<name>を「remove」で始めないでください(10.6.10)。
  homeメソッド名<name>を「ejb」で始めないでください(10.6.8)。
  メソッド<signature>は、RemoteExceptionをスローする必要があります(10.6.10)。
  メソッド<signature>を、<class-name>および<class-name>の両方から導出することはできません(RMI/IIOPの規則)(10.6.10)。
  定数<name>はプリミティブ型またはStringにする必要があります(10.6.10)。
  メソッド<signature>および<signature>は同じIDL名にマップされます(10.6.10)。
  <class-name>はシリアライズ可能またはRMI/IIOP互換とみなされます(10.6.10)。[警告]

CMP 2.xエンティティ・ローカル・インタフェース

  エンティティBeanローカル・インタフェースでは、javax.ejb.EJBLocalObjectを拡張する必要があります(10.6.11)。
  メソッド名を「ejb」で始めないでください(10.6.8)。
  メソッド<signature>ではRemoteExceptionをスローしないでください(10.6.11)。
  メソッド<signature>は、メソッドを実装することによってスローされる<class-name>をスローする必要があります(10.6.11)。
  エンティティBeanローカル・インタフェースでは、CMPフィールド<name>に対してセッターを公開しないことをお薦めします(10.3.1)。[警告]

CMP 2.xエンティティ・ローカル・ホーム・インタフェース

  エンティティBeanローカル・インタフェースでは、javax.ejb.EJBLocalHomeを拡張する必要があります(10.6.12)。
  エンティティBeanローカル・インタフェースでは、finderメソッドfindByPrimaryKey(<class-name>)を定義する必要があります(10.6.12)。
  エンティティBeanローカル・インタフェースでは、finderメソッドfindByPrimaryKeyをオーバーロードしないでください(9.5.2)。
  finderメソッド<signature>は、デプロイメント・ディスクリプタの問合せ要素に対応している必要があります(10.6.14)。
  createメソッド<signature>は、ローカル・インタフェース<class-name>を返す必要があります(10.6.12)。
  createメソッド<signature>はCreateExceptionをスローする必要があります(10.6.12)。
  createメソッド<signature>は、ejbCreateメソッドを実装することによってスローされる<class-name>をスローする必要があります(10.6.12)。
  createメソッド<signature>は、ejbPostCreateメソッドを実装することによってスローされる<class-name>をスローする必要があります(10.6.12)。
  finderメソッド<signature>は、ローカル・インタフェース<class-name>またはそのコレクションを返す必要があります(10.6.12)。
  finderメソッド<signature>はFinderExceptionをスローする必要があります(10.6.12)。
  homeメソッド名<name>を「remove」で始めないでください(10.6.12)。
  homeメソッド名<name>を「ejb」で始めないでください(10.6.8)。
  メソッド<signature>ではRemoteExceptionをスローしないでください(10.6.12)。

CMP 2.xエンティティ依存値

  依存値クラス<class-name>はシリアライズ可能とみなされます(10.6.3)。
  依存値クラス<class-name>はpublicである必要があります(10.6.3)。
  依存値クラス<class-name>はabstractにしないでください(10.6.3)。

CMP 2.xエンティティの主キー・クラス

  主キー・クラスは有効なRMI/IIOP値タイプである必要があります(10.6.13)。
  複合主キー・クラスはpublicである必要があります(10.8.2)。
  複合主キー・クラスには引数なしのpublicコンストラクタが必要です(10.8.2)。
  複合主キー・フィールドはpublicである必要があります(10.8.2)。
  複合主キー・フィールドはstaticにしないでください(10.8.2)。
  複合主キー・フィールドはCMPフィールドに対応している必要があります(10.8.2)。
  主キー・クラスはhashCode()およびequals(Object)をオーバーライドする必要があります(10.6.13)。

BMPエンティティBeanおよびCMP 1.xエンティティBean

BMPエンティティBeanクラスおよびCMP 1.xエンティティBeanクラス

  エンティティBeanクラスではjavax.ejb.EntityBeanを実装する必要があります(12.2.2)。
  エンティティBeanクラスではjavax.jms.MessageListenerを実装しないでください(15.4.2)。
  エンティティBeanクラスはpublicである必要があります(12.2.2)。
  エンティティBeanクラスはfinalにしないでください(12.2.2)。
  エンティティBeanクラスには引数なしのpublicコンストラクタが必要です(12.2.2)。
  エンティティBeanクラスではfinalize()を定義しないでください(12.2.2)。
  エンティティBeanではリモート・インタフェースを実装しないことをお薦めします(12.2.2)。[警告]
  エンティティBeanクラスではリモート・インタフェース・メソッド<signature>を実装する必要があります(実装しないとリモート・インタフェースを実装できません)(12.2.2)。
  リモートcreateメソッド<signature>を実装する必要があります(12.2.9)。
  ejbCreateメソッドはpublicである必要があります(12.2.3)。
  ejbCreateメソッドはfinalにしないでください(12.2.3)。
  ejbCreateメソッドはstaticにしないでください(12.2.3)。
  ejbCreateメソッドの戻り型は、主キー・クラス<class-name>である必要があります(12.2.3)。
  ejbCreateメソッドではRemoteExceptionをスローしないことをお薦めします(12.2.3)。[警告]
  ejbPostCreateメソッド<signature>を実装する必要があります(12.2.4)。
  ejbPostCreateメソッドはpublicである必要があります(12.2.4)。
  ejbPostCreateメソッドはfinalにしないでください(12.2.4)。
  ejbPostCreateメソッドはstaticにしないでください(12.2.4)。
  ejbPostCreateメソッドの戻り型はvoidである必要があります(12.2.4)。
  ejbPostCreateメソッド<signature>は、ejbCreateメソッドに対応している必要があります(12.2.4)。
  ejbPostCreateメソッドではRemoteExceptionをスローしないことをお薦めします(12.2.4)。[警告]
  リモート・ビジネス・メソッド<signature>を実装する必要があります(12.2.9)。
  ビジネス・メソッド<signature>はpublicである必要があります(12.2.7)。
  ビジネス・メソッド<signature>はfinalにしないでください(12.2.7)。
  ビジネス・メソッド<signature>はstaticにしないでください(12.2.7)。
  ビジネス・メソッド<signature>の戻り型は<class-name>である必要があります(12.2.8、12.2.10)。
  ビジネス・メソッド<signature>ではRemoteExceptionをスローしないことをお薦めします(12.2.7)。[警告]
  サポート・メソッド名<name>を「ejb」で始めないでください(12.2.7)。

BMPエンティティBeanクラス

  BMPエンティティBeanクラスはabstractにしないでください(12.2.2)。
  トランザクション境界が曖昧なBMPエンティティBeanは、ejbLoadおよびejbStoreに依存しないことをお薦めします(12.1.6.1)。[警告]
  エンティティBeanではローカル・インタフェースを実装しないことをお薦めします(12.2.2)。[警告]
  エンティティBeanクラスではローカル・インタフェース・メソッド<signature>を実装する必要があります(実装しないとローカル・インタフェースを実装できません)(12.2.2)。
  ローカルcreateメソッド<signature>を実装する必要があります(12.2.11)。
  ejbCreateメソッド<signature>は、ローカルまたはリモートのホーム・インタフェースのcreateメソッドに対応している必要があります(12.2.9、12.2.11)。
  ejbSelectメソッドはBMPエンティティBeanには適用できません(12.2.7)。[警告]
  リモートfindメソッド<signature>を実装する必要があります(12.2.9)。
  ローカルfindメソッド<signature>を実装する必要があります(12.2.11)。
  ejbFindByPrimaryKeyメソッドを実装する必要があります(12.2.5)。
  ejbFindメソッドはpublicである必要があります(12.2.5)。
  ejbFindメソッドはfinalにしないでください(12.2.5)。
  ejbFindメソッドはstaticにしないでください(12.2.5)。
  ejbFindの戻り型は<class-name>である必要があります(12.2.5、12.1.7)。
  ejbFindメソッドではRemoteExceptionをスローしないことをお薦めします(12.2.5)。[警告]
  ejbFindメソッド<signature>は、ローカルまたはリモートのホーム・インタフェースのfinderメソッドに対応している必要があります(12.2.9、12.2.11)。
  リモートhomeメソッド<signature>を実装する必要があります(12.2.9)。
  ローカルhomeメソッド<signature>を実装する必要があります(12.2.11)。
  ejbHomeメソッド<signature>は、ローカルまたはリモートのホーム・インタフェースのビジネス・メソッドに対応している必要があります(12.2.9、12.2.11)。
  ejbHomeメソッドはpublicである必要があります(12.2.6)。
  ejbHomeメソッドはstaticにしないでください(12.2.6)。
  ejbHomeメソッドではRemoteExceptionをスローしないでください(12.2.6)。
  ビジネス・メソッド<signature>は、ローカルまたはリモートのインタフェースのビジネス・メソッドに対応している必要があります(12.2.8、12.2.10)。
  リモート・ビジネス・メソッド<signature>を実装する必要があります(12.2.9)。
  ローカル・ビジネス・メソッド<signature>を実装する必要があります(12.2.11)。

CMP 1.xエンティティBeanクラス

  CMP 1.xエンティティBeanクラスはabstractにしないでください(14.1、12.2.2)。
  CMP 1.xエンティティBeanフィールド<name>は、publicである必要があります(14.1.1)。
  CMP 1.xエンティティBeanフィールド<name>は、transientにしないでください(14.1.1)。
  CMP 1.xエンティティBeanフィールド<name>は、シリアライズ可能とみなされます(14.1.1)。
  ejbCreateメソッド<signature>は、リモート・ホーム・インタフェースのcreateメソッドに対応している必要があります(12.2.9、12.2.11)。
  ejbSelectメソッドはCMP 1.xエンティティBeanには適用できません(14.1、12.2.7)。[警告]
  ejbFindメソッドはCMP 1.xエンティティBeanには適用できません(14.1、12.2.7)。[警告]
  ejbHomeメソッドはCMP 1.xエンティティBeanには適用できません(14.1.7、12.2.7)。[警告]
  ビジネス・メソッド<signature>は、リモート・インタフェースのビジネス・メソッドに対応している必要があります(12.2.8、12.2.10)。

BMPエンティティBeanクラスおよびCMP 1.xエンティティBeanクラスのメソッド本体

  メソッド<name>では、EntityContextメソッド<name>を使用しないでください(10.5.5)。
  メソッド<name>では、Enterprise Beanメソッド<name>を使用しないでください(10.5.5)。
  メソッド<name>では、リソース・マネージャ・メソッド<name>を使用しないでください(10.5.5)。

BMPエンティティおよびCMP 1.xエンティティのリモート・インタフェース

  エンティティBeanリモート・インタフェースでは、javax.ejb.EJBObjectを拡張する必要があります(12.2.8)。
 メソッド名を「ejb」で始めないでください(12.2.7)。
  メソッド<signature>は、メソッドを実装することによってスローされる<class-name>をスローする必要があります(12.2.8)。
  ローカル・インタフェース<class-name>は公開しないでください(12.2.8)。
  ローカル・ホーム・インタフェース<class-name>は公開しないでください(12.2.8)。
  メソッド<signature>は、RemoteExceptionをスローする必要があります(12.2.8)。
  メソッド<signature>を、<class-name>および<class-name>の両方から導出することはできません(12.2.8)。
  定数<name>はプリミティブ型またはStringにする必要があります(12.2.8)。
  メソッド<signature>および<signature>は同じIDL名にマップされます(12.2.8)。
  <class-name>はシリアライズ可能またはRMI/IIOP互換とみなされます(12.2.8)。[警告]

BMPエンティティおよびCMP 1.xエンティティのリモート・ホーム・インタフェース

  エンティティBeanリモート・ホーム・インタフェースでは、javax.ejb.EJBHomeを拡張する必要があります(12.2.9)。
  createメソッド<signature>は、リモート・インタフェース<class-name>を返す必要があります(12.2.9)。
  createメソッド<signature>は、CreateExceptionをスローする必要があります(12.2.9)。
  createメソッド<signature>は、ejbCreateメソッドを実装することによってスローされる<class-name>をスローする必要があります(12.2.9)。
  createメソッド<signature>は、ejbPostCreateメソッドを実装することによってスローされる<class-name>をスローする必要があります(12.2.9)。
  finderメソッド<signature>は、リモート・インタフェース<class-name>またはそのコレクションを返す必要があります(12.2.9)。
  エンティティBeanのリモート・ホーム・インタフェースでは、finderメソッドfindByPrimaryKeyを定義する必要があります(12.2.9)。
  finderメソッド<signature>は、FinderExceptionをスローする必要があります(10.6.10)。
  finderメソッド<signature>は、ejbFindメソッドを実装することによってスローされる<class-name>をスローする必要があります(12.2.9)。
  メソッド<signature>は、RemoteExceptionをスローする必要があります(12.2.9)。
  メソッド<signature>を、<class-name>および<class-name>の両方から導出することはできません(12.2.9)。
  定数<name>はプリミティブ型またはStringにする必要があります(12.2.9)。
  メソッド<signature>および<signature>は同じIDL名にマップされます(12.2.9)。
  <class-name>はシリアライズ可能またはRMI/IIOP互換とみなされます(12.2.9)。[警告]

CMP 1.xエンティティ・リモート・ホーム・インタフェース

 CMP 1.xエンティティBeanのホーム・インタフェースでは、create以外のメソッドを定義しないでください(14.1.7)。
 CMP 1.xエンティティBeanのcreateメソッドには「create」という名前を付ける必要があります(14.1.8)。

BMPエンティティ・リモート・ホーム・インタフェース

 homeメソッド名<name>を「remove」で始めないでください(12.2.9)。
 homeメソッド名<name>を「ejb」で始めないでください(12.2.7)。

 ローカル・インタフェース<class-name>は公開しないでください(12.2.9)。
  ローカル・ホーム・インタフェース<class-name>は公開しないでください(12.2.9)。

CMP 1.xエンティティ・リモート・ホーム・インタフェース

  CMP 1.xのcreateメソッド<name>には、「create」という名前を付ける必要があります(14.1.8)。

BMPエンティティ・ローカル・インタフェース

  エンティティBeanローカル・インタフェースでは、javax.ejb.EJBLocalObjectを拡張する必要があります(12.2.10)。
  メソッド名を「ejb」で始めないでください(12.2.7)。
  メソッド<signature>ではRemoteExceptionをスローしないでください(12.2.10)。
  メソッド<signature>は、メソッドを実装することによってスローされる<class-name>をスローする必要があります(12.2.10)。

BMPエンティティ・ローカル・ホーム・インタフェース

  エンティティBeanローカル・ホーム・インタフェースでは、javax.ejb.EJBLocalHomeを拡張する必要があります(12.2.11)。
  createメソッド<signature>は、ローカル・インタフェース<class-name>を返す必要があります(12.2.11)。
  createメソッド<signature>は、CreateExceptionをスローする必要があります(12.2.11)。
  createメソッド<signature>は、ejbCreateメソッドを実装することによってスローされる<class-name>をスローする必要があります(12.2.11)。
  createメソッド<signature>は、ejbPostCreateメソッドを実装することによってスローされる<class-name>をスローする必要があります(12.2.11)。
  エンティティBeanローカル・インタフェースでは、finderメソッドfindByPrimaryKey(<class-name>)を定義する必要があります(12.2.10)。
  finderメソッド<signature>は、ローカル・インタフェース<class-name>またはそのコレクションを返す必要があります(12.2.11)。
  finderメソッド<signature>は、FinderExceptionをスローする必要があります(12.2.11)。
  finderメソッド<signature>は、ejbFindメソッドを実装することによってスローされる<class-name>をスローする必要があります(12.2.11)。
  homeメソッド名<name>を「ejb」で始めないでください(12.2.7)。
 homeメソッド名<name>を「remove」で始めないでください(12.2.11)。
  homeメソッド<signature>は、homeメソッドを実装することによってスローされる<class-name>をスローする必要があります(12.2.11)。
  メソッド<signature>ではRemoteExceptionをスローしないでください(12.2.11)。

BMPエンティティおよびCMP 1.xエンティティの主キー・クラス

  主キー・クラスは有効なRMI/IIOP値タイプである必要があります(12.2.12)。
  主キー・クラスは、hashCode()およびequals(Object)をオーバーライドする必要があります(12.2.12)。

CMP 1.xエンティティの主キー・クラス

  複合主キー・クラス<class-name>は、publicである必要があります(14.1.9)。
  複合主キー・クラス<class-name>には、引数なしのpublicコンストラクタが必要です(14.1.9)。
  複合主キー・フィールド<name>は、publicである必要があります(14.1.9)。
  複合主キー・フィールド<name>はstaticにしないでください(14.1.9)。
  複合主キー・フィールド<name>は、CMPフィールドに対応している必要があります(14.1.9)。

Message-Driven Bean

Message-Driven Beanクラス

  Message-Driven Beanクラスは、javax.ejb.MessageDrivenBeanを実装する必要があります(15.7.2)。
  Message-Driven Beanクラスは、javax.jms.MessageListenerを実装する必要があります(15.7.2)。
  Message-Driven Beanクラスはpublicである必要があります(15.7.2)。
  Message-Driven Beanクラスはabstractにしないでください(15.7.2)。
  Message-Driven Beanクラスはfinalにしないでください(15.7.2)。
  Message-Driven Beanクラスには引数なしのpublicコンストラクタが必要です(15.7.2)。
  Message-Driven Beanクラスではfinalizeを定義しないでください(15.7.2)。
  Message-Driven Beanでは引数なしのcreateメソッドを定義する必要があります(15.7.3)。
  Message-Driven Beanでは、引数なしのcreate以外のcreateメソッドを定義しないでください(15.7.3)。
  ejbCreateメソッドはpublicである必要があります(15.7.3)。
  ejbCreateメソッドはfinalにしないでください(15.7.3)。
  ejbCreateメソッドはstaticにしないでください(15.7.3)。
  ejbCreateメソッドの戻り型はvoidである必要があります(15.7.3)。
  ejbCreateメソッドでは<class-name>をスローしないでください(15.7.3)。
  Message-Driven BeanではonMessage(javax.jms.Message)メソッドを定義する必要があります(15.7.4)。
  onMessageメソッドはpublicである必要があります(15.7.4)。
  onMessageメソッドはfinalにしないでください(15.7.4)。
  onMessageメソッドはstaticにしないでください(15.7.4)。
  onMessage メソッドの戻り型はvoidである必要があります(15.7.4)。
  onMessageメソッドでは<class-name>をスローしないでください(15.7.4)。
  ejbRemoveメソッドはpublicである必要があります(15.7.5)。
  ejbRemoveメソッドはfinalにしないでください(15.7.5)。
  ejbRemoveメソッドはstaticにしないでください(15.7.5)。
  ejbRemoveメソッドの戻り型はvoidである必要があります(15.7.5)。
  ejbRemoveメソッドでは<class-name>をスローしないでください(15.7.5)。

Message-Driven Beanクラスのメソッド本体

  メソッド<name>では、MessageDrivenContextメソッド<name>を使用しないでください(15.4.3)。
  メソッド<name>では、UserTransactionメソッド<name>を使用しないでください(15.5.1)
  メソッド<name>では、Enterprise Beanメソッド<name>を使用しないでください(15.5.1)。
  メソッド<name>メソッドでは、リソース・マネージャ・メソッド<name>を使用しないでください(15.5.1)。

EJBクライアント

EJBクライアントのメソッド本体

  キャストする前に、PortableRemoteObject.narrow(Object)を使用してリモート・オブジェクトを縮小する必要があります(6.10、9.13)。
  equals(Object)はEJBオブジェクトの比較に使用しないでください。かわりにisIdentical(Object)を使用します(6.9.1、6.9.2)。