Websphere的类加载器以及策略的简单介绍
1.1 什么是ClassLoader
顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表示一 个Java 类。通过此实例的 newInstance()方法就可以创建出该类的一个对象。实际的情况可能更加复杂,比如 Java 字节代码可能是通过工具动态生成的,也可能是通过网络下载的。基本上所有的类加载器都是 java.lang.ClassLoader类的一个实例。下面详细介绍这个 Java 类。
1.2 ClassLoader 的职责
java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个 Java 类,即 java.lang.Class类的一个实例。除此之外,ClassLoader还负责加载 Java 应用所需的资源,如图像文件和配置文件等。不过本文只讨论其加载类的功能。1.3 什么是ClassLoader Delegation
细节请参见:http://blog.csdn.net/eric_sunah/article/details/7969077关于类加载器的层次结构,以下的几点说明可能更有助于进一步的理解类的查找和加载过程:
每个类加载器负责在自身定义的类路径上进行查找和加载类。
一个子类加载器能够委托它的父类加载器查找和加载类,一个加载类的请求会从子类加载器发送到父类加载器,但是从来不会从父类加载器发送到子类加载器。
一旦一个类被成功加载, JVM 会缓存这个类直至其生命周期结束,并把它和相应的类加载器关联在一起,这意味着不同的类加载器可以加载相同名字的类。
如果一个加载的类依赖于另一个或一些类,那么这些被依赖的类必须存在于这个类的类加载器查找路径上,或者父类加载器查找路径上。
如果一个类加载器以及它所有的父类加载器都无法找到所需的类,系统就会抛出 ClassNotFoundExecption 异常或者 NoClassDefFoundError 的错误
1.4 WAS的Class Loader
WebSphere 中类加载器的层次结构图1 所示:如上图所示,WebSphere 中类加载器被组织成一个自上而下的层次结构,最上层是系统的运行环境JVM ,最下层是具体的应用程序,上下层之间形成父子关系。
JVM Class loader :位于整个层次结构的最上层,它是整个类加载器层次结构的根,因此它没有父类加载器。这个类加载器负责加载 JVM 类, JVM 扩展类,以及定义在 classpath 环境变量上的所有的 Java 类。
WebSphere Extensions Class loader : WebSphere 扩展类加载器 , 它将加载 WebSphere 的一些 runtime 类,资源适配器类等。
WebSphere lib/app Class loader : WebSphere 服务器类加载器,它将加载 WebSphere 安装目录下 $(WAS_HOME)/lib/app 路径上的类。 在 WAS v4 版本中, WAS 使用这个路径在所有的应用程序之间共享 jar 包。从 WAS v5 开始, 共享库功能提供了一种更好的方式,因此,这个类加载器主要用于一些原有的系统的兼容。
WebSphere "server" Class loader : WebSphere 应用服务器类加载器。 它定义在这个服务器上的所有的应用程序之间共享的类。 WAS v5 中有了共享库的概念之后,可以为应用服务器定义多个与共享库相关联的类加载器,他们按照定义的先后顺序形成父子关系。
Application Module Class Loader :应用程序类加载器,位于层次结构的最后一层,用于加载 J2EE 应用程序。根据应用程序的类加载策略的不同,还可以为 Web 模块定义自己的类加载器。
1.5 WebSphere 中的类加载器策略
WebSphere 中对类加载器有一些相关的配置,称为类加载器策略(class loader policy )。类加载器策略指类加载器的独立策略(classloader isolation policy ), 通过类加载器策略设置,我们可以为WAS 和应用程序的类加载器进行独立定义。每个WAS 可以配置自己的应用程序类加载器策略,WAS 中的每个应用程序也可以配置自己的Web 模块类加载器策略,下面我们对这两种策略分别介绍。
1.5.1 应用服务器(WAS )配置:应用程序类加载器策略
应用服务器对应用程序类加载器策略有两种配置:Single :整个应用服务器上的所有应用程序(Jar,RAR,EJBJAR)使用同一个类加载器(Application classloader)。在这种配置下,每个应用程序不再有自己的类加载器,每个Application中jar文件可以互相访问。
部署模型如下:
Multiple(DEFAULT) :应用服务器上的每个应用程序使用自己的类加载器。
部署模型如下:
WAR如何被加载,由WAR单独的侧率来决定
1.5.2 应用程序配置:Web 模块类加载器策略
应用程序中对Web模块类加载器有两种配置:Application :整个应用程序内的所有的实用程序 jar 包和 Web 模块使用同一个类加载器。
Module(DEFAULT) :应用程序内的每个 Web 模块使用自己的类加载器。应用程序的类加载器仍然存在,负责加载应用程序中 Web 模块以外的其它类,包括所有的实用程序 jar 包。
1.5.3 ClassLoader模式的设置
该设置针对Application/WAR加载器都有效
Parent_First :在加载类的时候,在从类加载器自身的类路径上查找加载类之前,首先尝试在父类加载器的类路径上查找和加载类。Parent_Last :在加载类的时候,首先尝试从自己的类路径上查找加载类,在找不到的情况下,再尝试父类加载器类路径。
1.6 综合配置的小例子
>更多相关文章
- 07-30如何用u盘重装win10系统
- 07-30bios设置u盘启动
- 07-30技嘉主板bios如何设置u盘启动项
- 12-22开源视频平台:MediaCore(MediaDrop)
- 12-22JVMjavacore和heapdump文件生成选项
- 12-22使用飞信机器人发短信需要开放的端口
- 12-22TCP连接的三次握手--一次故障记录
- 12-22磁盘管理之一 逻辑卷管理
首页推荐
佛山市东联科技有限公司一直秉承“一切以用户价值为依归
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
- 12-05OpenAI拓展欧洲业务 将在苏黎世设立办公室
- 12-05微软质疑美国联邦贸易委员会泄露信息 督促其
- 12-05联交所取消宝宝树上市地位 宝宝树:不会对公
- 12-04企业微信致歉:文档打开异常已完成修复
相关文章
24小时热门资讯
24小时回复排行
热门推荐
最新资讯
操作系统
黑客防御