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层次结构。
2924 0
|
7月前
|
Web App开发 安全 Java
WebLogic Server 远程代码执行漏洞(CVE-2021-2109)
WebLogic Server 远程代码执行漏洞,攻击者可通过使用恶意Payload对目标服务器实施攻击并接管服务器获取执行权限。
80 1
|
7月前
|
安全 Java 应用服务中间件
WebLogic Server 远程代码执行漏洞(CVE-2023-21839/CNVD-2023-04389)
WebLogic Server 存在远程代码执行漏洞,攻击者通过特定Payload对目标服务器进行恶意利用从而获取服务器控制权限,进一步操作。
146 1
|
7月前
|
XML 安全 Java
WebLogic EJBTaglibDescriptor XXE漏洞(CVE-2019-2888)
WebLogic EJBTaglibDescriptor 在反序列化的同时会进行XML解析,通过重写EJBTaglibDescriptor中的writeExternal函数生成恶意的序列化数据。
103 1
H8
|
8月前
|
安全 网络协议 Java
跨语言的艺术:Weblogic 序列化漏洞和 IIOP 协议
Weblogic序列化漏洞主要依赖于T3和IIOP协议,在通信交互方面存在诸多问题,如跨语言、网络传输等,给漏洞检测和利用带来诸多不便。在WhiteHat Labs的理念中,漏洞检测和利用是一项创造性的工作,应该以最简洁高效的方式实现,以保证漏洞的跨平台性和实用性。因此,我们实现了跨语言的IIOP协议通信方案来解决序列化漏洞问题。
H8
153 1
|
10月前
|
XML 安全 Oracle
Weblogic IIOP协议反序列化(CVE-2020-2551)漏洞复现
Weblogic IIOP协议反序列化(CVE-2020-2551)漏洞复现
692 0
|
10月前
|
XML 安全 Oracle
Weblogic XMLDecoder 远程代码执行漏洞 CVE-2017-10271 漏洞复现
Weblogic XMLDecoder 远程代码执行漏洞 CVE-2017-10271 漏洞复现
107 0
|
11月前
|
安全 NoSQL Shell
Weblogic ssrf漏洞复现---从0到1
利用Ubuntu16.04,安装docker,要以root身份执行
169 0
Weblogic ssrf漏洞复现---从0到1
|
11月前
|
XML 安全 Oracle
干货 | 最全最详细的Weblogic漏洞总结(建议收藏)
干货 | 最全最详细的Weblogic漏洞总结(建议收藏)
2293 0
|
11月前
|
安全 Oracle 前端开发
(CVE-2018-2894)Weblogic任意文件上传漏洞复现 文末附演示视频
(CVE-2018-2894)Weblogic任意文件上传漏洞复现 文末附演示视频
117 0