`

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

分享到:
评论

相关推荐

    ClassLoader运行机制 自己写的

    WebLogic采用"parent first"策略,即父ClassLoader先于子ClassLoader尝试加载类。这样的设计是为了确保全局库(如JDBC驱动)优先从系统路径加载,保证了库的一致性。然而,对于Web应用程序,WebLogic创建了一个独立...

    weblogic下开发web项目时修改java文件不用重启的绿色方法,不用修改weblogic的配置文件、不用jar

    对于Java类文件的更改,WebLogic可以通过Classloader机制来检测变化并自动重新加载。但默认情况下,WebLogic可能不会自动检测到源代码的修改。 2. **Eclipse集成开发环境的设置**: 使用Eclipse这样的IDE时,可以...

    weblogic部署项目jar冲突解决

    4. **设置耳聋类加载器(Deaf ClassLoader)**:对于某些特定的JAR包,可以设置为“耳聋”模式,使其不响应父类加载器的请求,从而避免冲突。 5. **使用模块化(OSGi)**:如果应用是基于OSGi的,可以通过模块化...

    Oracle-WebLogic-Server-12c-各版本功能特性速查表

    此外,文档中提到的Oracle WebLogic Server 12c支持Maven运行平台,这是为了方便开发人员在持续集成和持续部署(CI/CD)流程中使用,其包含了Classloader分析工具来检测与解决Java类冲突,提供了一种新型的迭代开发...

    有关WebLogic编程的常见问题

    ### WebLogic编程常见问题解析 #### 一、获取JSP页面的物理路径 在Web开发中,有时我们需要获取一个JSP页面的物理路径。在WebLogic Server中,可以通过`getRealPath()`方法来实现这一点。 **1.1 概念解释** - **...

    Jar classLoader

    本classloader可以从ftp或本地系统中动态的加载jar,zip资源,当资源实时变动时classlader会自动重新加载,不需要应用重新启动。样例: 加载ftp上某个目录下的所有jar,zip资源。 SingleClassLoader loader = new ...

    ClassLoader实例

    动态加载类通常应用于热更新、插件系统等场景,例如Tomcat和WebLogic服务器就是通过自定义类加载器实现类的动态加载和替换。 以下是一个简单的自定义类加载器示例,用于动态加载D盘下的A.class文件: ```java ...

    如何解决java.lang.StackOverflowError

    在Java编程中,`java.lang.StackOverflowError` 是一个常见的运行时异常,它通常发生在程序执行过程中,当Java虚拟机(JVM)的调用栈溢出时。调用栈是每个线程用来存储方法调用信息的数据结构,当递归调用过深或者...

    关于java热部署知识.doc

    在J2EE环境中,如WebLogic等应用服务器提供了部分热部署支持,例如可以配置Servlet的热部署。但对于EJB组件,可能需要自定义ClassLoder才能实现热部署。 除了手动编写自定义ClassLoader,还有一些开源工具可以帮助...

    中间件内存马注入&冰蝎连接(附更改部分代码)1

    本文主要探讨了如何在冰蝎(Icesword)源码基础上增加对JSP的内存马注入支持,并分析了相关原理,同时涉及了Tomcat和Weblogic中间件的内存马注入技术。 首先,冰蝎JSP Webshell的工作原理基于动态二进制加密,创建...

    OSGi理论与实战

    Equinox提供了丰富的API和工具,支持模块的动态管理和服务注册与发现,是许多Java应用服务器(如Weblogic、Glassfish)选择的底层框架。 ### Equinox高级实战 深入理解Equinox不仅包括基本的模块管理和类加载机制...

    Java对象的生命周期[参照].pdf

    在大型应用程序中,如WebLogic服务器,不直接杀死进程而是通过特定命令退出,这是因为这样可以让JVM有机会清理资源,确保正在执行的线程得以优雅地结束。 JVM的终止还可以涉及到JVM的异常退出和自然退出,这涉及到...

    ClassLoaderTest

    在Java编程语言中,类加载器(ClassLoader)是核心组件之一,它负责将类的字节码从不同的源(如JAR文件、网络或文件系统)加载到Java虚拟机(JVM)中,使得程序能够运行。在大型企业级应用,如WebLogic服务器中,类...

    apache-tomcat-6.0.20

    首先,Tomcat是Java EE(Enterprise Edition)的一部分,但仅实现了Servlet和JSP规范,因此它被归类为轻量级应用服务器,与全功能的应用服务器如JBoss或WebLogic相比,它的内存占用和系统资源需求更低,适合小型到...

    阿里面试题目总结.pdf

    5. **ClassLoader**:双亲委派模型是类加载机制的核心,防止不同ClassLoader加载相同的类造成混乱。 6. **设计模式**:通常需要了解单例、工厂、观察者、装饰器、适配器、代理等常见的23种设计模式,以及六大设计...

    JAVA中如何得到文件路径.pdf

    - **绝对路径**:如果文件位于Weblogic的安装目录下(如`c:\yourconfig\yourconf.properties`),可以直接使用`new FileInputStream("yourconfig/yourconf.properties")`。 - **相对路径**:如果文件位于Web应用的...

    java面试题

    - **JVM** 通过 `ClassLoader` 来加载类,主要包括 `Bootstrap ClassLoader`、`Extension ClassLoader` 和 `Application ClassLoader`。 ### 24. 线程模型与线程安全 - **线程模型** 有两种:通过继承 `Thread` 类...

    Java学习思路.pdf

    Java的类加载器(ClassLoader)会按照双亲委派模型来加载类,它包括启动类加载器、扩展类加载器和应用类加载器。在学习中也需要掌握Java反射机制,它允许在运行时分析和操作类和对象。 Java SE 6.0、Java SE 7.0、...

Global site tag (gtag.js) - Google Analytics