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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

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

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

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

1.1???? 什么是ClassLoader

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

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

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

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

?

1.3???? 什么是ClassLoader Delegation

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

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

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

如果一個(gè)類加載器以及它所有的父類加載器都無(wú)法找到所需的類,系統(tǒng)就會(huì)拋出 ClassNotFoundExecption 異常或者 NoClassDefFoundError 的錯(cuò)誤

1.4???? WAS的Class Loader

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


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

  • JVM Class loader :位于整個(gè)層次結(jié)構(gòu)的最上層,它是整個(gè)類加載器層次結(jié)構(gòu)的根,因此它沒有父類加載器。這個(gè)類加載器負(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 使用這個(gè)路徑在所有的應(yīng)用程序之間共享 jar 包。從 WAS v5 開始, 共享庫(kù)功能提供了一種更好的方式,因此,這個(gè)類加載器主要用于一些原有的系統(tǒng)的兼容。
  • WebSphere "server" Class loader : WebSphere 應(yīng)用服務(wù)器類加載器。 它定義在這個(gè)服務(wù)器上的所有的應(yīng)用程序之間共享的類。 WAS v5 中有了共享庫(kù)的概念之后,可以為應(yīng)用服務(wù)器定義多個(gè)與共享庫(kù)相關(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 中對(duì)類加載器有一些相關(guān)的配置,稱為類加載器策略(class loader policy )。類加載器策略指類加載器的獨(dú)立策略(classloader isolation policy ), 通過(guò)類加載器策略設(shè)置,我們可以為WAS 和應(yīng)用程序的類加載器進(jìn)行獨(dú)立定義。

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

(官方配置手冊(cè):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ù)器對(duì)應(yīng)用程序類加載器策略有兩種配置:

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

部署模型如下:

?

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

部署模型如下:

?

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

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

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

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

?

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

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

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

?

總結(jié)

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

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