ダウンロード サンプルファイル (173.5 KB)
特定のクラスバージョンのロード
さて、コンテナと制限付きクラスローダを使って、バージョン付きのクラスを格納しているコンポーネントを特定のアーカイブからロードできるようになりました。
リスト2に、コンポーネントコンテナのテストクラスのコードを示します。このコードでは、コンポーネントコンテナのインスタンスを2つ作成し、それぞれを2つの異なるバージョンのHelloWorldコンポーネントに使う別々の設定ファイルの名前で初期化しています。その後、ComponentContainerクラスのcreateComponentメソッドによって各バージョンのコンポーネントがロードされ、インスタンス化されます。
package com.jeffhanson.components; import junit.framework.*; import java.net.URL; public class ComponentContainerTest extends TestCase { // ============================================== // static methods // ============================================== public static junit.framework.Test suite() { return new TestSuite( ComponentContainerTest.class); } // ============================================== // constructors // =============================================== public ComponentContainerTest(String name) { super(name); } // ============================================== // non-public methods // ============================================== private String doLoadComponentTest( ComponentContainer container, String componentName) throws ComponentNotFoundException { Object componentObj = container.createComponent(componentName); return componentObj.toString(); } // ============================================== // public methods // ============================================== public void setUp() throws Exception { super.setUp(); } public void tearDown() throws Exception { super.tearDown(); } public void testLoadComponent1() throws Exception { String componentName = "com.jeffhanson.components.HelloWorld"; ComponentContainer container = new ComponentContainer( "HelloWorldV1-CDI.xml"); String componentStr = doLoadComponentTest(container, componentName); assertNotNull(componentStr); assertTrue(componentStr.equals( "Hello world V1!")); container = new ComponentContainer( "HelloWorldV2-CDI.xml"); componentStr = doLoadComponentTest( container, componentName); assertNotNull(componentStr); assertTrue(componentStr.equals( "Hello world V2!")); } }
それぞれのコンポーネントオブジェクトのインスタンスを呼び出すと、適切なバージョンのコンポーネントによって処理されます。
図3のシーケンス図は、フレームワークがコンポーネントをロードおよび作成する際の手順を示しています。
RectrictedURLClassLoaderクラスへの呼び出しが、既定のクラスローダのインスタンスに到達せずに終了していることに注目してください。これにより、RestrictedURLClassLoaderインスタンスに与えられたURLでのみクラス検索が行われます。
これで、クラスローディングを行うコンポーネントコンテナフレームワークの作成方法の説明は終わりです。このフレームワークによって、Javaコンポーネントの定義、バージョン管理、作成を行うための自己完結的なコンテキストを簡単に実現できるようになります。Javaのクラスローディング機能をこのような形で利用すると、クラスローディングを特定の場所に限定できるので、異なるバージョンのクラスを同時にロードできるようになります(これらのクラスはどちらも同じJVM上で作成、使用されます)。
この記事は参考になりましたか?
既に会員の方はを行ってください。
- japan.internet.com翻訳記事連載記事一覧
- この記事の著者
-
japan.internet.com(ジャパンインターネットコム)
japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
Jeff Hanson(Jeff Hanson)
ソフトウェア業界で18年以上の経験を持つ。これまでにWindows OpenDocポートの上級エンジニア、NovellのRoute 66フレームワークの主席設計者を務める。現在は、J2EEベースの再保険システム用のフレームワークとプラットフォームの提供を専門とするeReinsureの主任設計者。著書、執筆記事多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

