パッケージ org.opengion.fukurou.util

クラス HybsLoader

java.lang.Object
org.opengion.fukurou.util.HybsLoader

public class HybsLoader extends Object
AutoCompile機能、HotDeploy機能を実現するためのクラスローダーです。 AutoCompile機能は、クラスの動的コンパイルを行います。 AutoCompile機能を有効にするには、コンストラクタで与えられるHybsLoaderConfigオブジェクトで、 AutoCompileフラグをtrueにしておく必要があります。 HotDeploy機能は、クラスの動的ロードを行います。 HotDeploy機能を有効にするには、コンストラクタで与えられるHybsLoaderConfigオブジェクトで、 HotDeployフラグをtrueにしておく必要があります。 (1)クラスの動的コンパイル loadClass(String)メソッドが呼ばれた場合に、ソースディレクトより、対象となるソースファイルを 検索し、クラスのコンパイルを行います。 コンパイルが行われる条件は、「クラスファイルが存在しない」または「クラスファイルのタイムスタンプがソースファイルより古い」です。 コンパイルを行うには、JDKに含まれるtools.jarが存在している必要があります。 tools.jarが見つからない場合、エラーとなります。 また、コンパイルのタスクのクラス(オブジェクト)は、JVMのシステムクラスローダー上のクラスに存在しています。 このため、サーブレットコンテナで、通常読み込まれるWEB-INF/classes,WEB-INF/lib以下のクラスファイルも、 そのままでは参照することができません。 これらのクラスを参照する場合は、HybsLoaderConfigオブジェクトに対してクラスパスを設定しておく必要があります。 (2)クラスロード クラスの動的ロードは、クラスローダーの入れ替えによって実現しています。 HotDeploy機能を有効にした場合、読み込むクラス単位にURLClassLoaderを生成しています。 クラスロードを行う際に、URLClassLoaderを新しく生成することで、クラスの再ロードを行っています。 つまり、HotDeployにより読み込まれるそれぞれのクラスは、お互いに独立した(平行な位置に存在する)関係に なります。 このため、あるHotDeployによりロードされたクラスAから、同じくHotDeployによりロードされたクラスBを直接参照 することができません。 この場合は、クラスBのインターフェースを静的なクラスローダー(クラスAから参照できる位置)に配置することで、クラスB のオブジェクトにアクセスすることができます。
変更履歴:
5.1.1.0 (2009/12/01) 新規作成
機能分類
業務ロジック
導入されたバージョン:
JDK1.6,
  • コンストラクタの概要

    コンストラクタ
    コンストラクタ
    説明
    HybsLoaderOptionを使用してHybsLoaderオブジェクトを生成します。
  • メソッドの概要

    修飾子とタイプ
    メソッド
    説明
    load(String clsNm)
    指定されたクラス名のクラスをロードします。
    指定されたクラス名のクラスをロードし、デフォルトコンストラクターを使用して インスタンスを生成します。
    このオブジェクトの内部表現を、文字列にして返します。

    クラスから継承されたメソッド java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • コンストラクタの詳細

    • HybsLoader

      public HybsLoader(HybsLoaderConfig option)
      HybsLoaderOptionを使用してHybsLoaderオブジェクトを生成します。
      パラメータ:
      option - HybsLoaderを構築するための設定情報
  • メソッドの詳細

    • load

      public Class<?> load(String clsNm)
      指定されたクラス名のクラスをロードします。 クラス名については、クラス自身の名称のみを指定することができます。 (パッケージ名を含めた完全な形のクラス名を指定することもできます)
      パラメータ:
      clsNm - クラス名
      戻り値:
      クラス
      変更履歴:
      6.9.7.0 (2018/05/14) 中間変数を用意せず、直接返します。
    • newInstance

      public Object newInstance(String clsName)
      指定されたクラス名のクラスをロードし、デフォルトコンストラクターを使用して インスタンスを生成します。
      パラメータ:
      clsName - クラス名(Qualified Name)
      戻り値:
      インスタンス
      変更履歴:
      5.1.8.0 (2010/07/01) Exceptionのエラーメッセージの修正(状態の出力), 6.8.2.3 (2017/11/10) java9対応(cls.newInstance() → cls.getDeclaredConstructor().newInstance())
    • toString

      public String toString()
      このオブジェクトの内部表現を、文字列にして返します。
      オーバーライド:
      toString クラス内 Object
      戻り値:
      オブジェクトの内部表現
      変更履歴:
      6.1.0.0 (2014/12/26) refactoring
      このメソッドは、nullを返しません