WebLogic ClassLoader

简介:

WebLogic ClassLoader

Weblogic中发布的一个应用一般目录结构如下

对应的各层级结构如下

Application ClassLoader用来加载EJB JARS、APP-INF/lib、APP-INF/classes、EJB JARS中ClassPath变量定制的路径下的类

Web Application ClassLoader用来加载WAR、WAR中ClassPath变量定制的路径下的类。

Weblogic下的ClassLoader用的也是委托模型。首先BootStrap先进行寻找,找不到再由ExtClassLoader寻找,然后在由AppClassLoader一级一级往下找。这样的分层结构有个好处,就是在Jsp,Servlet中可以直接访问EJB的接口。这种上层装载EJB,下层装载Servlet,最下层加载jsp文件的结构,使得经常变动的jsp,Servlet等可以被重新装载而不会被涉及到EJB层。
Weblogic可以通过修改配置文件weblogic.xml中的prefer-web-inf-classes元素,来修改这种加载顺序。默认情况下,该元素设置为 False。将该元素设置为 True 会颠反类加载器委托模型,以便优先加载 Web 应用程序中的类定义,其次才加载更高一级的类加载器中的类定义。这使得 Web 应用程序能够使用自己版本的第三方类,这些类也可能包含于 WebLogic Server 中。请参阅 weblogic.xml 部署描述符元素。

WebLogic Server 类加载以应用程序的概念为核心。应用程序通常打包为企业归档 (EAR) 文件,其中包含应用程序类。EAR 文件中的所有内容均被视为同一个应用程序的组成部分。

下面的内容可以作为EAR 的一部分,也可以作为独立应用程序进行加载:
Enterprise JavaBean (EJB) JAR 文件

Web 应用程序 WAR 文件

资源适配器 RAR 文件
如果分别部署EJB和Web应用程序,会将它们视为两个应用程序。如果将它们一起部署在EAR文件中,则它们是一个应用程序。可以将模块共同部署于一个EAR文件内,以便系统将它们视为同一个应用程序的各部分。
每个应用程序都接收其自己的类加载器层次结构;该层次结构的父级是系统类路径类加载器。这可以隔离应用程序,以使应用程序A无法查看应用程序B的类加载器或类。在层次结构类加载器中,不存在同级或同伴的概念。应用程序代码只能看到与该应用程序(或模块)关联的类加载器所加载的类,以及应用程序(或模块)类加载器的父类加载器所加载的类。这允许 WebLogic Server在同一个JVM中承载多个隔离的应用程序。
应用程序类加载器层次结构 
部署应用程序时,WebLogic Server自动创建类加载器的层次结构。该层次结构的根类加载器将加载应用程序中的所有EJB、JAR 文件。将针对每个Web应用程序WAR文件创建子类加载器。
由于 Web 应用程序通常会调用 EJB,所以 WebLogic Server 应用程序类加载器体系结构允许 JavaServer Page (JSP) 文件和 servlet 查看其父类加载器中的 EJB 接口。这种体系结构还允许在不重新部署 EJB 层的情况下重新部署 Web 应用程序。实际上,通常会更改 JSP 文件和 servlet,而不更改 EJB 层。
下图说明此 WebLogic Server 应用程序类加载的概念。

如果您的应用程序包含使用 EJB 的 servlet 和 JSP:
将 servlet 和 JSP打包在 WAR 文件中

将 Enterprise JavaBean打包在 EJB JAR 文件中 
将 WAR 和 JAR 文件打包在 EAR 文件中 
部署 EAR 文件
尽管可以分别部署 WAR 和 JAR 文件,但如果将它们共同部署于 EAR 文件内,则会生成允许 servlet 和 JSP 查找 EJB 类的类加载器安排。如果分别部署 WAR 和 JAR 文件,WebLogic Server 将为它们创建同级类加载器。这表明您必须在 WAR 文件中包含 EJB Home 接口和远程接口,且 WebLogic Server 必须针对 EJB 调用使用 RMI 存根和骨架类,如同 EJB 客户端和实现类位于不同 JVM 中一样。 

参考至:《叱咤风云:WebLogic企业级运维实战》戴冠平著
             http://hi.baidu.com/love200456/blog/item/9d4d70fbdc38c970024f564f.html
如有错误,欢迎指正
邮箱:czmcj@163.com

作者:czmmiao  文章出处:http://czmmiao.iteye.com/blog/1616219
相关文章
|
Java 测试技术 应用服务中间件
Weblogic classloader分析
最近工作特别忙,现在才稍有点时间,准备探测一下weblogic的classloader。classloader的原理google上铺天盖地,这里就不再提及了。 首先采用两个用例测试一下基本的web应与EJB应用的classloader层次结构。
2969 0
|
4月前
|
Java 应用服务中间件 Linux
centos7安装weblogic
centos7安装weblogic
113 1
|
负载均衡 Java 应用服务中间件
Weblogic的了解、安装及其使用(三)
Weblogic的了解、安装及其使用
1473 0
|
Oracle Java 关系型数据库
Weblogic的了解、安装及其使用(二)
Weblogic的了解、安装及其使用
1070 0
|
开发框架 Kubernetes 监控
Weblogic的了解、安装及其使用(一)
Weblogic的了解、安装及其使用
2758 0
|
安全 Oracle Java
Oracle Weblogic--CentOS Linux 8.5.2安装weblogic11G
Weblogic在centos上详细安装步骤及安装过程中可能遇到的问题
350 0
Oracle Weblogic--CentOS Linux 8.5.2安装weblogic11G
|
Oracle 关系型数据库 Java
EOS Platform 7.2下安装weblogic插件
在实际工作中,需要用到EOS Platform,这是一个基于Eclipse的开发工具,自带了Tomcat,可以满足大部分需要,但是有时候需要使用Weblogic,这就得手动安装Weblogic插件了。这个过程与Eclipse相同(Eclipse下安装weblogic插件),本文中在EOS Platform 7.2中安装Weblogic插件。
202 0
EOS Platform 7.2下安装weblogic插件
|
Oracle 关系型数据库 Java
Eclipse下安装weblogic插件
安装好weblogic dev版本(Windows下安装weblogic dev版本),可以在Eclipse中安装weblogic server tools插件,直接连接到weblogic server,发布、部署、调试都变得简单些。
706 0
Eclipse下安装weblogic插件
|
Oracle 关系型数据库 Java
Windows下安装weblogic dev版本
在开发过程中,有一种情况是比较尴尬的:需要用到某个软件,但是只需要用到这个软件中的一小部分功能,这样既浪费的磁盘空间,又浪费了CPU空间。比如Weblogic,完整版包括很多功能,但是开发过程中,只是需要创建数据源、部署项目,然后进行测试即可。所以开发过程中,需要一款简化的Weblogic(Weblogic开发版)是挺有必要的(如果电脑配置比较壕,也可以任性的使用完整版)。
336 0
Windows下安装weblogic dev版本
|
XML SQL 开发框架
Weblogic安装与配置详解
Weblogic安装与配置用Eclipse MyEclipse WebLogic8.1开发第一个Web程序1.安装jreEclipse虽然由java开发,但本身并不自带jre。所以你必须先自己安装,去http://java.sun.com/downloads下载最新J2SE1.4.2_03的jre安装文件j2re-1_4_2_03-windows-i586-p.exe。安装成功后,重启机器,并将jre的bin文件夹路径添加到系统环境变量PATH中,如:C:\Program Files\Java\j2re1.4.2_03\bin。
458 0