日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Websphere的类加载器以及策略的简单介绍

發(fā)布時間:2024/4/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Websphere的类加载器以及策略的简单介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自: https://blog.csdn.net/eric_sunah/article/details/17289985

1.1???? 什么是ClassLoader

顧名思義,類加載器(class loader)用來加載 Java 類到 Java 虛擬機(jī)中。一般來說,Java 虛擬機(jī)使用 Java 類的方式如下:Java 源程序(.java 文件)在經(jīng)過 Java 編譯器編譯之后就被轉(zhuǎn)換成 Java 字節(jié)代碼(.class 文件)。類加載器負(fù)責(zé)讀取 Java 字節(jié)代碼,并轉(zhuǎn)換成 java.lang.Class類的一個實例。每個這樣的實例用來表示一?? 個Java 類。通過此實例的 newInstance()方法就可以創(chuàng)建出該類的一個對象。實際的情況可能更加復(fù)雜,比如 Java 字節(jié)代碼可能是通過工具動態(tài)生成的,也可能是通過網(wǎng)絡(luò)下載的。

基本上所有的類加載器都是 java.lang.ClassLoader類的一個實例。下面詳細(xì)介紹這個 Java 類。

1.2???? ClassLoader? 的職責(zé)

java.lang.ClassLoader類的基本職責(zé)就是根據(jù)一個指定的類的名稱,找到或者生成其對應(yīng)的字節(jié)代碼,然后從這些字節(jié)代碼中定義出一個 Java 類,即 java.lang.Class類的一個實例。除此之外,ClassLoader還負(fù)責(zé)加載 Java 應(yīng)用所需的資源,如圖像文件和配置文件等。不過本文只討論其加載類的功能。

?

1.3???? 什么是ClassLoader Delegation

細(xì)節(jié)請參見:http://blog.csdn.net/eric_sunah/article/details/7969077

關(guān)于類加載器的層次結(jié)構(gòu),以下的幾點說明可能更有助于進(jìn)一步的理解類的查找和加載過程:

  • 每個類加載器負(fù)責(zé)在自身定義的類路徑上進(jìn)行查找和加載類。
  • 一個子類加載器能夠委托它的父類加載器查找和加載類,一個加載類的請求會從子類加載器發(fā)送到父類加載器,但是從來不會從父類加載器發(fā)送到子類加載器。
  • 一旦一個類被成功加載, JVM 會緩存這個類直至其生命周期結(jié)束,并把它和相應(yīng)的類加載器關(guān)聯(lián)在一起,這意味著不同的類加載器可以加載相同名字的類。
  • 如果一個加載的類依賴于另一個或一些類,那么這些被依賴的類必須存在于這個類的類加載器查找路徑上,或者父類加載器查找路徑上。

如果一個類加載器以及它所有的父類加載器都無法找到所需的類,系統(tǒng)就會拋出 ClassNotFoundExecption 異?;蛘?/span> NoClassDefFoundError 的錯誤

1.4???? WAS的Class Loader

WebSphere 中類加載器的層次結(jié)構(gòu)圖1 所示:


如上圖所示,WebSphere 中類加載器被組織成一個自上而下的層次結(jié)構(gòu),最上層是系統(tǒng)的運行環(huán)境JVM ,最下層是具體的應(yīng)用程序,上下層之間形成父子關(guān)系。

  • JVM Class loader :位于整個層次結(jié)構(gòu)的最上層,它是整個類加載器層次結(jié)構(gòu)的根,因此它沒有父類加載器。這個類加載器負(fù)責(zé)加載 JVM 類, JVM 擴(kuò)展類,以及定義在 classpath 環(huán)境變量上的所有的 Java 類。
  • WebSphere Extensions Class loader : WebSphere 擴(kuò)展類加載器 , 它將加載 WebSphere 的一些 runtime 類,資源適配器類等。
  • WebSphere lib/app Class loader : WebSphere 服務(wù)器類加載器,它將加載 WebSphere 安裝目錄下 $(WAS_HOME)/lib/app 路徑上的類。 在 WAS v4 版本中, WAS 使用這個路徑在所有的應(yīng)用程序之間共享 jar 包。從 WAS v5 開始, 共享庫功能提供了一種更好的方式,因此,這個類加載器主要用于一些原有的系統(tǒng)的兼容。
  • WebSphere "server" Class loader : WebSphere 應(yīng)用服務(wù)器類加載器。 它定義在這個服務(wù)器上的所有的應(yīng)用程序之間共享的類。 WAS v5 中有了共享庫的概念之后,可以為應(yīng)用服務(wù)器定義多個與共享庫相關(guān)聯(lián)的類加載器,他們按照定義的先后順序形成父子關(guān)系。
  • Application Module Class Loader :應(yīng)用程序類加載器,位于層次結(jié)構(gòu)的最后一層,用于加載 J2EE 應(yīng)用程序。根據(jù)應(yīng)用程序的類加載策略的不同,還可以為 Web 模塊定義自己的類加載器。

1.5???? WebSphere 中的類加載器策略

WebSphere 中對類加載器有一些相關(guān)的配置,稱為類加載器策略(class loader policy )。類加載器策略指類加載器的獨立策略(classloader isolation policy ), 通過類加載器策略設(shè)置,我們可以為WAS 和應(yīng)用程序的類加載器進(jìn)行獨立定義。

每個WAS 可以配置自己的應(yīng)用程序類加載器策略,WAS 中的每個應(yīng)用程序也可以配置自己的Web 模塊類加載器策略,下面我們對這兩種策略分別介紹。

(官方配置手冊:http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Frzatz%2F51%2Fprogram%2Fclsadmcns.htm)

1.5.1???應(yīng)用服務(wù)器(WAS )配置:應(yīng)用程序類加載器策略

應(yīng)用服務(wù)器對應(yīng)用程序類加載器策略有兩種配置:

  • Single :整個應(yīng)用服務(wù)器上的所有應(yīng)用程序(Jar,RAR,EJBJAR)使用同一個類加載器(Application classloader)。在這種配置下,每個應(yīng)用程序不再有自己的類加載器,每個Application中jar文件可以互相訪問。

部署模型如下:

?

  • Multiple(DEFAULT) :應(yīng)用服務(wù)器上的每個應(yīng)用程序使用自己的類加載器。

部署模型如下:

?

  • WAR如何被加載,由WAR單獨的側(cè)率來決定

1.5.2??? 應(yīng)用程序配置:Web 模塊類加載器策略

應(yīng)用程序中對Web模塊類加載器有兩種配置:

  • Application :整個應(yīng)用程序內(nèi)的所有的實用程序 jar 包和 Web 模塊使用同一個類加載器。
  • Module(DEFAULT) :應(yīng)用程序內(nèi)的每個 Web 模塊使用自己的類加載器。應(yīng)用程序的類加載器仍然存在,負(fù)責(zé)加載應(yīng)用程序中 Web 模塊以外的其它類,包括所有的實用程序 jar 包。

?

1.5.3?ClassLoader模式的設(shè)置
該設(shè)置針對Application/WAR加載器都有效

  • Parent_First :在加載類的時候,在從類加載器自身的類路徑上查找加載類之前,首先嘗試在父類加載器的類路徑上查找和加載類。
  • Parent_Last :在加載類的時候,首先嘗試從自己的類路徑上查找加載類,在找不到的情況下,再嘗試父類加載器類路徑。

1.6???? 綜合配置的小例子

?

總結(jié)

以上是生活随笔為你收集整理的Websphere的类加载器以及策略的简单介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。