Weblogic默认情况下采用的是parent first的方式。但这个parent first,是有“讲究”(tricky)的。
1. 父类加载器和子类加载器之间的关系类似于Java中,父类和子类之间的对象关系。
2. Weblogic会将所有load到的class缓存到cache中。(子类classloader能看到父类classloader加载到cache中的class)。
默认情况下,当我们的应用程序(ear,war)运行时,会先去cache中查找class,如果找不到。就去System Classpath loader 里去找class。如果System Classpath loader里能找到你需要的类,那么不好意思,你在ear和war包里包含的class就没用了。如果System ClassPath Loader找不到,接下来去ear的class path里找,接着去EJB class path里找,最后到war的class path里找。一旦找到了该类,就会load起这个类,并将该类放入cache中。
总的来说,Weblogic的ClassLoader有如下几个层次,按照从高到低顺序排列:
1. JDK Classloader
2. JDK ext Class Loader
3. Weblogic System Class Loader
4. Domain Class Loader(Child of System Class Loader)
5. App Class Loader (负责装载应用中的所有的EJB JAR文件)
6. Web Class Loader (负责装载所有的Web application 中的WAR文件(所有得jsp文件除外)
7. JSP Class Loader (负责装载Web application 中的所有的jsp文件)
可以从Weblogic官方文档获取更多的关于Weblogic ClassLoader的信息:http://docs.oracle.com/cd/E23943_01/web.1111/e13706/classloading.htm#autoId32
若要修改它的加载顺序,可以通过在Weblogic.xml(版本为8)中加入以下代码:
<container-descriptor>
<prefer-web-inf-classes> true </prefer-web-inf-classes>
</container-descriptor>
最后,总结一下,在Weblogic服务启动的过程中,自动形成一个具有层次结构的类装载器,首先装载jdk及java扩展jar包或类;然后再加载Weblogic本身使用的各个jar包或类;然后再加载Web应用文件夹里面的classes下的类,然后再加载Web应用文件夹里面lib下的jar包或类。也就是说,每个层次的类装载器均对应不同的类路径,它们是一一对应的。 比如System装载器对应着jdk及扩展路径;Application装载器对应着Weblogic的相关类;而web 应用装载器对应着webapp应用下的classes和lib下的路径;而jsp装载器则对应着jsp文件。
当然,在加载过程中,若在高层次的加载器中已经加载了某类,那么再以后的加载中,再次遇到该类也不会加载,只是会忽略。加载完成之后,将类放入Cache中供系统应用调用。
在系统的运行过程中,若遇到使用该类的情况,则会遵循先通过其父类加载器进行加载的原则,比方说,我要加载一个WSWordManager类,则系统会首先在Cache中寻找,若找不到,则调用父装载器到与之对应的路径里面去寻找,一直向上,找着了则进行加载,若找不着则报出ClassNotFound的异常。
Tomcat与Weblogic有些地方是相反的:对于运行在 Java EE 容器中的 Web 应用来说,类加载器的实现方式与一般的 Java 应用有所不同。不同的 Web 容器的实现方式也会有所不同。以 Apache Tomcat 来说,每个 Web 应用都有一个对应的类加载器实例。该类加载器也使用代理模式,所不同的是它是首先尝试去加载某个类,如果找不到再代理给父类加载器。这与一般类加载器的顺序是相反的。这是 Java Servlet 规范中的推荐做法,其目的是使得 Web 应用自己的类的优先级高于 Web 容器提供的类。这种代理模式的一个例外是:Java 核心库的类是不在查找范围之内的。这也是为了保证 Java 核心库的类型安全。
相关推荐
在 Linux 下,Weblogic 启动时需要进行安全随机数生成,以确保安全性。但是,Linux 的随机数生成机制可能会导致 Weblogic 启动过程中出现延迟。这种延迟是由于 Linux 的随机数生成机制需要等待足够的熵(随机性)来...
加载类时,WebLogic会按照以下顺序进行: - 先检查已加载的类缓存,如果类已经存在则直接使用。 - 如果类尚未加载,WebLogic会按照类加载器的层次结构逐级向上请求加载。 - 如果在当前域的类路径中找不到,会...
weblogic启动优化脚本,可以解决weblogic控制台启动较慢问题,亲测有效
在解决 WebLogic 启动失败的问题时,我们使用了 `ps` 命令来查找和杀掉进程。`ps` 命令是 LINUX 下最常用的进程查看命令,能够显示当前系统中的所有进程。`grep` 命令是查找命令,能够使用正则表达式搜索文本,并把...
weblogic启动日志详细说明介绍,报错了所有的初始化信息模块的介绍!
Weblogic 作为一个流行的 Java 企业级应用服务器,通常需要在服务器启动时自动启动,以确保业务的连续性。然而,在 Windows 系统下,Weblogic 的自动启动却需要进行一些额外的配置。在这篇文章中,我们将详细介绍...
本文将深入探讨WebLogic的监控、调优、不同版本之间的区别以及启动和关闭脚本的使用。 一、WebLogic监控 WebLogic提供了强大的内置监控功能,包括性能监控、资源监控和健康检查等。通过WebLogic Administration ...
在Linux环境下,自动启动WebLogic Server是系统管理的重要一环,尤其对于持续运行的服务来说,确保WebLogic能够在系统启动时自动运行能节省大量的手动操作时间。以下是如何在Linux上配置WebLogic服务以便自动启动的...
7. **分析类加载顺序**:通过WebLogic的日志或工具,如`jarscan`,可以分析类加载顺序,找出冲突的根源。 8. **使用Maven或Gradle的依赖管理**:通过构建工具的依赖管理功能,可以更有效地控制应用的依赖关系,防止...
1. Bootstrap ClassLoader:这是JVM启动时的第一个ClassLoader,负责加载JDK核心类库(如rt.jar)。 2. Extension ClassLoader:加载JDK扩展目录(如$JAVA_HOME/jre/lib/ext)中的类。 3. System ClassLoader(也...
weblogic 启动log
自己工作中整理的;weblogic不如tomcat简单好用;动不动就容易启动失败; 文档中有常见启动失败的检查方法;
操作linux命令cd /prlife/weblogic/bea/user_projects/domains/prlwechat_domain/servers
这个启动脚本可以在系统启动时自动启动WebLogic,并将其置于后台运行,同时具备日志备份功能。下面我们将详细讨论如何实现这一目标,特别是针对Linux5(64位)环境下WebLogic的配置。 首先,你需要以root用户身份...
本文将详细介绍如何在Weblogic环境中设置启动时不需输入用户密码的具体步骤。 #### 一、理解`boot.properties`文件 `boot.properties`是Weblogic服务器用来存储管理员账户(默认为`weblogic`)和密码的文件,位于`...
java -cp E:/DevTools/BEA/wlserver_10.3/server/lib/weblogic.jar weblogic.security.utils.AdminAccount weblogic newpass ``` 3. **更新配置文件**: - 更新`boot.properties`文件中的用户名和密码字段。 - ...
【描述】: 本文深入探讨了如何构建WebLogic集群,并利用NodeManager实现WebLogic节点的远程启动和停止,旨在帮助管理员掌握集群部署与运维的关键技术。 【标签】: nodemanager, weblogic **一、环境规划** 在构建...
### WebLogic启动与部署配置详解 #### 一、启动WebLogic服务器 启动WebLogic服务器是进行Web应用部署的基础步骤之一。下面详细介绍启动WebLogic的具体操作流程: 1. **进入启动脚本目录**: - 使用`cd /opt/bea/...
当Weblogic启动遇到包冲突问题时,优先加载项目WEB-INF\lib目录下的包。 解决方案 解决该问题的方法是删除项目WEB-INF\lib目录下的wstx-asl-3.2.4.jar包,该包是Axis2使用的StAX API实现。删除该包后,Weblogic ...