J2EE ベスト・プラクティス・コード・レビュー

J2EE ベスト・プラクティス・コード・レビューは、1 つのカテゴリーのみから構成され、J2EE ベスト・プラクティスとも呼ばれます。

目的

J2EE ベスト・プラクティス・コード・レビューは、 従来の方法では検出が困難なコードにあるアンチパターンを検出するルールを 適用します。アンチパターン とは、コードに現れるがベスト・プラクティスに従わない 既知の問題を指します。設計パターンは従うべきよいモデルですが、アンチパターンは避けるべき悪いモデルです。これらのアンチパターンにより、重大な性能低下またはシステム障害が発生する可能性があります。このコード・レビューは サーブレットでのみ実行します。サーブレットは、以下のいずれかのスタブをターゲットとする動的 Web プロジェクトになければなりません。
  • WebSphere® Application Server 5.0
  • WebSphere Application Server 5.1
  • WebSphere Application Server 6.0
JSP、struts、および EJB はサポートされません。

コード・レビューの一部のルールでは、 検出のためにデータ・フロー分析を行う必要があります。データ・フロー分析 では、 検出結果へのパスをトレースします。結果として、これらのルールを適用すると、 コード・レビューの完了までに時間がかかります。

ルール・カテゴリー

以下の表では、J2EE ベスト・プラクティス・コード・レビューの すべてのカテゴリーおよびサブカテゴリーを示し、それらに含まれるルールについて説明します。左の列において、カテゴリーは太字で、 サブカテゴリーはプレーン・テキストで示します。

カテゴリーまたはサブカテゴリー 説明
J2EE ベスト・プラクティス J2EE 開発のベスト・プラクティスに基づくルールを含み、WebSphere サーバーを ターゲットとする Web プロジェクトをサポートします
正確さ 誤ったメソッド呼び出しを検出するルールを含みます
データ競合 J2EE アプリケーション内でデータの競合状態を起こす可能性のあるメソッド呼び出しを検出するルールを含みます
ガーベッジ・コレクション ガーベッジ・コレクションを遅らせる可能性のあるメソッド呼び出しを検出するルールを含みます
保守容易性 J2EE アプリケーションで保守しにくいコードを検出するルールを含みます
パフォーマンスとスケーラビリティー J2EE アプリケーションのパフォーマンスを損なったりスケーラビリティーを制限したりするメソッド呼び出しを検出するルールを含みます
リソース管理 J2EE アプリケーションでリソースを使用するための J2EE ベスト・プラクティス・ルールを含みます

ルール・タイプ

J2EE ベスト・プラクティス・コード・レビューは、 即時ルールと詳細ルールの 2 種類のルールを適用します。これらのルール・タイプは、 ルールを適用するためにかかる時間と、ルールによって検出結果に示される情報の 種類が異なります。

即時 J2EE ルール

即時 J2EE ルールは、J2EE ベスト・プラクティス・コード・レビューでの 適用にかかる時間が詳細ルールの場合より短くなります。即時ルールは、 他のコード・レビューのルールと同じ検出結果に関する情報を提供します。

詳細 J2EE ルール

詳細 J2EE ルールはデータ・フロー分析を必要とするため、 即時ルールよりも検出結果の生成に時間がかかります。詳細 J2EE ルールでは、検出結果が生成されるのみでなく、その検出結果を引き起こしたパスも表示されます。これらのルールはパスをトレースする手段としてデータ・フロー分析が必要であるため、即時ルールよりも 検出結果の生成に時間がかかります。詳細ルールは以下の追加情報を 提供します。

詳細 J2EE ルールのリスト

詳細 J2EE ルールは 36 個あります。以下の表の左側の列には、属するサブカテゴリーを リストします。右側の列には、詳細 J2EE ルールであるサブカテゴリー内のルールを リストします。

カテゴリーまたはサブカテゴリー 詳細 J2EE ルール
正確さ
javax.servlet.http.HttpSession で java.io.Serializable を実装しないオブジェクトを格納することを避ける
データ競合
共用ロックを使用しない javax.servlet.Service.service() から static フィールドへの割り当てを避ける
共用ロックを使用しない javax.servlet.Service.service() からサーブレットのインスタンス・フィールドへの代入を避ける
パフォーマンスとスケーラビリティー
javax.servlet.http.HttpServletRequest.getSession() の後に必ず javax.servlet.http.HttpSession.invalidate() を呼び出す
リソース管理 このサブカテゴリーにある 32 個のルールは、すべて詳細 J2EE ルールです。

サンプル・ルール

このセクションでは、J2EE ベスト・プラクティス・コード・レビューで 適用する各ルール・タイプのサンプルを示します。

サンプル 即時ルール

以下のルールは、「パフォーマンスとスケーラビリティー」サブカテゴリーにある サンプル即時ルールです。

サーブレットからの java.lang.Runtime の呼び出しを避ける

サンプル詳細ルール

以下のルールは、「リソース管理」サブカテゴリーにあるサンプル詳細ルールです。
新規の java.io.FileInputStream(java.io.File) の後に必ず java.io.FileInputStream.close() を呼び出す

既知の問題

このセクションでは、J2EE ベスト・プラクティス・コード・レビューの 既知の問題について説明します。

誤検出: 入力ストリームが 閉じていない

要約: J2EE ベスト・プラクティス・コード・レビューが、 入力ストリームが閉じていないという検出結果を生成します。実際には、 閉じる入力ストリームは他にありません。

説明: 以下の場合、コード・レビューは、 すべての入力ストリームが閉じたことを認識しません。
  • bis が null の場合、閉じる入力ストリームはありません
  • 1 つの入力ストリーム FileInputStream を使用して 2 番目の 入力ストリーム BufferedInputStream を作成します。2 番目の入力ストリームを閉じると 最初の入力ストリームも閉じます。
例: 以下のコード例で強調表示した行に、 両方の状態を示します。
public static int readFirstByte(String fileName) {
 int firstByte = -1;
 FileInputStream fis=null;
 BufferedInputStream bis = null;
 try {
  fis = new FileInputStream(fileName);
  bis = new BufferedInputStream(fis);  firstByte = bis.read();
 } catch (FileNotFoundException fnfe) {
  LogUtility.log(fnfe);
      } catch (IOException ioe) {
  LogUtility.log(ioe);
 } finally {
  if (bis!=null){   try {
    bis.close();   } catch (IOException ioe){
    LogUtility.log(ioe);
   }
  }
 }
 return firstByte;
} 

予備手段: 誤検出された検出結果を右マウス・ボタンでクリックし、「無視」をクリックします。

不十分な情報: .classpath ファイルに対して検出結果が報告される

要約: J2EE ベスト・プラクティス・コード・レビューが、ワークベンチのリソースではなく、.classpath ファイルに対する検出結果を 生成します。

説明: コード・レビューがバイナリー・タイプの問題を検出しましたが、そのタイプが外部 JAR に含まれているため、ワークベンチに対応する リソースがありません。

参照: RFE RATLC00038795

予備手段:

  1. 「コード・レビューの詳細」ビューで「パス」タブをクリックし、ワークベンチに対応するリソースを持たないタイプを調べます。
  2. パス情報を展開し、その検出結果に関連するタイプ (場合によっては メソッドとフィールド) の名前を調べます。

リソース・フィルター: 詳細ルールが機能しない

要約: 「リソース・フィルター」ページでは、 コード・レビュー時に選択した詳細ルールを適用しないファイルを 指定します。しかし、フィルターが機能せず、指定したファイルにも ルールが引き続き適用されます。

説明: コード・レビュー時にルールを適用しないファイルを指定する場合は、 詳細 J2EE ルールの動作は異なります。詳細ルールは「リソース・フィルター」ページで 指定したファイルを認識しませんが、「除外」ページのファイルは認識します。「除外」ページには、デフォルトで JAR ファイルがリストされています。これらのルールは、 除外するファイル・タイプとして完全修飾サーブレットと JAR ファイルの 2 種類を認識し、 他はすべて無視します。

予備手段:
  1. 「ウィンドウ」>「設定」をクリックして「設定」ウィンドウを開きます。
  2. 左側のペインで、「Java」™ および「コード・レビュー」を展開し、「除外」を選択します。
  3. 「除外」ページで、「リソース」ページにリストされたファイルを調べ、 以下を行います。
    • 詳細 J2EE ルールでのレビュー対象から除外するファイルがリストされている場合は、 「OK」をクリックします。これ以上のアクションは不要です。
    • 詳細 J2EE ルールでのレビュー対象からサーブレットを除外するには、 サーブレットの .java または .class ファイルを選択してから「OK」をクリックします。
    • 詳細 J2EE ルールでのレビュー対象から JAR ファイルを除外するには、 その JAR ファイルを選択してから「OK」をクリックします。
コード・レビューから除外しないファイルがリストされている場合は、 そのファイルを選択して「除去」をクリックします。
ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2004, 2005. All Rights Reserved. (C) Copyright IBM Japan 2005