jp.sourceforge.deployer
クラス DeployerClassLoader

java.lang.Object
  上位を拡張 java.lang.ClassLoader
      上位を拡張 jp.sourceforge.deployer.DeployerClassLoader

public final class DeployerClassLoader
extends ClassLoader

アーカイブ・ファイル配置後のクラスやリソースを読み込むクラスローダーです。

アーカイブ・ファイルにはクラス・ファイル、リソース、jarファイルを含めることが出来、コンストラクタでディレクトリを指定することでクラスローダーの管理下に置くことができます。例えば、classes/からクラス・ファイル、lib/からjarファイルを検索するように初期化することが出来ます。ディレクトリは複数指定することが出来ます。

内部的にはURLClassLoaderクラスを使用しています。コンストラクタで指定された検索対象ディレクトリ、及びjarディレクトリに含まれるjarファイルは、URLClassLoaderクラスにURLで渡されます。dispose()メソッドが呼び出されると、URLClassLoaderインスタンスは破棄され、強制的にガベージコレクタを動かすことで完全に破棄します(破棄しようとします。クラスローダーが読み込んだクラス内でリソースリークが発生している場合、破棄は失敗し、ブロックしてしまいます)。

ホット・デプロイを前提としているので、クラスローダーが読み込んだリソースなどを破棄するdispose()メソッドが用意されています。例えばDeployerクラスと連携する場合、DeployerListener.undeployEnd(Deployer, File)メソッドの呼び出しでこのクラスローダーを破棄することが出来ます。

バージョン:
$Rev: 20 $ $Date: 2007-05-31 06:02:01 +0900 (木, 31 5 2007) $
作成者:
$Author: uguu $

コンストラクタの概要
DeployerClassLoader(File[] fileDirectories, File[] jarDirectories)
           DeployerClassLoaderインスタンスを初期化します。
DeployerClassLoader(File[] fileDirectories, File[] jarDirectories, ClassLoader parent)
           DeployerClassLoaderインスタンスを初期化します。
 
メソッドの概要
protected  Package definePackage(String name, String specTitle, String specVersion, String specVendor, String implTitle, String implVersion, String implVendor, URL sealBase)
          
 void dispose()
           クラスローダーを破棄します。
 void dispose(int timeout)
           クラスローダーを破棄します。
protected  Class<?> findClass(String name)
          
protected  String findLibrary(String libname)
          
protected  URL findResource(String name)
          
protected  Enumeration<URL> findResources(String name)
          
protected  Package getPackage(String name)
          
protected  Package[] getPackages()
          
protected  Class<?> loadClass(String name, boolean resolve)
          
 
クラス java.lang.ClassLoader から継承されたメソッド
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, findLoadedClass, findSystemClass, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

DeployerClassLoader

public DeployerClassLoader(File[] fileDirectories,
                           File[] jarDirectories,
                           ClassLoader parent)
                    throws MalformedURLException

DeployerClassLoaderインスタンスを初期化します。

パラメータ:
fileDirectories - クラス・ファイル、リソースなどを検索するディレクトリ。複数指定することが出来ます(例えば、classes/、conf/のように)。
nullの場合は無視します。配列中のnullも無視します。
jarDirectories - jarファイルを検索するディレクトリ。このディレクトリ以下に存在するjarファイルを読み込みます。
nullの場合は無視します。配列中のnullも無視します。
parent - 親クラスローダー。
例外:
MalformedURLException - 指定されたディレクトリの形式が不正である場合。

DeployerClassLoader

public DeployerClassLoader(File[] fileDirectories,
                           File[] jarDirectories)
                    throws MalformedURLException

DeployerClassLoaderインスタンスを初期化します。

パラメータ:
fileDirectories - クラス・ファイル、リソースなどを検索するディレクトリ。複数指定することが出来ます(例えば、classes/、conf/のように)。
nullの場合は無視します。配列中のnullも無視します。
jarDirectories - jarファイルを検索するディレクトリ。このディレクトリ以下に存在するjarファイルを読み込みます。
nullの場合は無視します。配列中のnullも無視します。
例外:
MalformedURLException - 指定されたディレクトリの形式が不正である場合。
メソッドの詳細

dispose

public void dispose()

クラスローダーを破棄します。これにより、クラスローダーは使用不可状態になり、クラスローダーに属していたクラスは解放されます。

このメソッド呼び出しはタイムアウトしません。すなわち、以下のコードと等価です。

 cl.dispose(0);
 


dispose

public void dispose(int timeout)

クラスローダーを破棄します。これにより、クラスローダーは使用不可状態になり、クラスローダーに属していたクラスは解放されます。

メソッド呼び出しの結果、クラスローダーはすぐに使用不可状態になりますが、属しているクラスの解放はすぐには行われない可能性があります。これは、クラスローダーのリソースの解放を強制ガベージコレクタに頼っているためです。このため、タイムアウト時間を指定することが出来ます。タイムアウト時間は破棄を試みますが、それでも破棄出来ない場合はClassLoaderUnloadFailException例外をスローします。この場合、クラスローダーは使用不可状態になっていますが、クラスは破棄されていません。完全に破棄するために、このメソッド呼び出しを何度も試みることが出来ます。

パラメータ:
timeout - 破棄を試みるタイムアウト時間。0以下の場合、タイムアウトしない。

definePackage

protected Package definePackage(String name,
                                String specTitle,
                                String specVersion,
                                String specVendor,
                                String implTitle,
                                String implVersion,
                                String implVendor,
                                URL sealBase)

オーバーライド:
クラス ClassLoader 内の definePackage

findClass

protected Class<?> findClass(String name)
                      throws ClassNotFoundException

オーバーライド:
クラス ClassLoader 内の findClass
例外:
ClassNotFoundException

findLibrary

protected String findLibrary(String libname)

オーバーライド:
クラス ClassLoader 内の findLibrary

findResource

protected URL findResource(String name)

オーバーライド:
クラス ClassLoader 内の findResource

findResources

protected Enumeration<URL> findResources(String name)
                                  throws IOException

オーバーライド:
クラス ClassLoader 内の findResources
例外:
IOException

getPackage

protected Package getPackage(String name)

オーバーライド:
クラス ClassLoader 内の getPackage

getPackages

protected Package[] getPackages()

オーバーライド:
クラス ClassLoader 内の getPackages

loadClass

protected Class<?> loadClass(String name,
                             boolean resolve)
                      throws ClassNotFoundException

オーバーライド:
クラス ClassLoader 内の loadClass
例外:
ClassNotFoundException


Copyright © 2007 uguu. All Rights Reserved.