Javaクラスローダー
Jakarta EE (旧・Java EE) のアプリケーションサーバーは、通例サーバーに配置されたWARやEARアーカイブを階層的に配置されたクラスローダーでロードして、アプリケーション同士を隔離している。 いわゆる"サーブレットコンテナ"は、通例複数のクラスローダーを用いて実装されている。
既定では、ユーザーのクラスは全てシステムクラスローダーからロードされるが、ユーザーが定義した ClassLoader に置き換えたり、さらにクラスローダーの連結構造をユーザー定義したり、といったこともできる。
これにより、たとえば以下のようなことが可能になる:
クラスのロード・アンロードを実行時に行う。たとえば、実行時にHTTPリソースからライブラリを動的にロードするなど。これは以下の用途において重要な機能である: スクリプト言語(動的プログラミング言語)の実装。たとえばJythonやGroovyなど。 JavaBeansビルダーの利用。 ユーザー定義の拡張性 (拡張機能) を可能にする。 複数の名前空間の間でのやりとりを可能にする。これは、CORBA / RMIの基礎となっている。
Javaバイトコードがロードされる方法を変える (たとえば、暗号化されたJavaクラスをロードする)。
ロード済みのバイトコードを改変する (たとえば、アスペクト指向プログラミングで用いれば、ロード時の織り込み)。