!--a11y-->
Web Dynpro クラスファイル Minimizer 
Web Dynpro for Java によって、さまざまな一般構造 (コンテキストやモデルなど) へのアクセスを簡素化し、データまたはWeb Dynpro 構造へのタイプセーフなアクセスを実現するJava コードが自動的に数多く生成されます。このことの利点は、コンパイル時の高度な安全性を確保し、入力ミスによるエラーを減らすことができることです。一方欠点は、一部でしか使用されないクラスが数多く生成される場合があることです (コンテキストノードのあらゆる属性がアプリケーションコードによってアクセスされるわけではありません)。ただし、すべてのクラスがアプリケーションによって内部的に参照されるため、実行時にはどのクラスも Java 仮想マシン (JVM) にロードする必要があります。このことが原因で、JVM によってはメモリ消費量が不必要に高くなることがあります。特にクラス用のメモリが制限されている場合 (SUN JVM の Perm Space など) にはその傾向が顕著です。
この問題を改善するため、生成されたコードを自動的に分析しコード量を削減するいわゆるクラスファイルMinimizer によって、Web Dynpro アプリケーションの構築機能が拡張されています。

クラスファイル Minimizer は、開発コンポーネント構築 (DC 構築) でのみ使用することができます。これは、クラスファイル Minimizer が、DC 構築時にのみ利用可能になるパブリック部に関する情報を必要とするためです。したがって、クラスファイル Minimizer は開発コンポーネントプロジェクトとなる Web Dynpro プロジェクトでのみ使用することができます。
クラスファイル Minimizer について特に重要な点は、プロジェクトの一部ではなく常にプロジェクト全体を分析するということです。Web Dynpro プロジェクトに含まれているすべてのクラスファイルを分析し、未使用のメソッドまたは項目を検出します。
クラスパスは概念上 2 つの部分に分かれています。1 つは、分析および削減の対象となるクラスが含まれているプロジェクト部分です。もう 1 つは、プロジェクトクラスから参照されるクラスがすべて含まれている外部部分です (JDK、インポートしたライブラリ、使用中 DC のパブリック部など)。
削減された後もコードが引き続き機能するように、以下のコードが常に呼び出されます。
● 外部クラスパス内のコード
● 外部インタフェースの実装 (外部コードによってインタフェースが呼び出されることがあるため)
● 外部基本クラスのメソッドをオーバーライドするメソッド (上記と同じ)
● DC パブリック部の一部となるクラス
● Web Dynpro からリフレクションによって呼び出されるコンストラクタ/メソッド (主にコントローラのコンストラクタ)
クラスファイル Minimizer によって、すべてのプロジェクトクラスが繰り返し処理され、上記の定義にもとづいて各クラスのエントリポイントが決定され、到達範囲のメソッドまたは項目に対して再帰的にアクセスが行われます (循環は回避されます)。到達範囲のすべてのクラス、項目、およびメソッドに関する情報が収集されます。
繰返しが最終的に停止した場合、上記の定義では到達不可能なメソッドや項目が存在することになります。そのようなメソッドや項目は削除しても安全です。
Class File Minimizer を使用する場合は、以下の手順に従ってください。
1. Web Dynpro エクスプローラで、Web Dynpro DC を展開します。
2. コンテキストメニューのプロパティを選択します。
3. 左側の一覧項目 Web Dynpro 生成を選択します。
4. バイトコード最小化ドロップダウンリストから、自動を選択します。
現時点では、無しと自動の 2 つの設定のみがあります。無しの場合はクラスファイル Minimizer が実行されず、自動の場合はクラスファイル Minimizer によって自動的に実行モードが判断されます。
依存 DC の構築時または実行時に問題が発生した場合は、いつでもプロジェクトに対してクラスファイルMinimizer を無効にすることができます。この場合、開発コンポーネントの定義 (.dcdef ファイル) を変更する必要があり、このこと自体を未処理 DTR アクティビティの一部にする必要があります。
コンセプトセクションで説明したように、クラスファイル Minimizer には、フレームワークからどのようなコードが (リフレクションによって) 常に到達可能であるかに関する情報があらかじめ ”組み込まれて“ います。このような制約が特定のプロジェクトで満たされない場合は (そのプロジェクトで採用されているフレームワークが所定のリフレクション方策とは異なるものを使用しているため、またはそのプロジェクトでそのような異なるリフレクション自体を使用しているため)、到達可能なコードが正しく特定されなくなります。誤って削減されたクラスは、実行時に失敗する可能が非常に高くなります (典型的な例として、クラスロード時に NoSuchFieldError または NoSuchMethodError が発生することを挙げることができます)。また、コンパイル時に失敗することもあります。