问题很小,但是也很容易忽略。正如之前反反复复在websphere里设置应用的类加载顺序的时候,从来没去想这个调整真正改变了什么。
1. java的类加载器:
JAVA类加载器分为3层——引导加载器、扩展加载器、应用程序加载器,类加载遵循"父委托模式".
引导加载器(Bootstrap): 加载<JAVA_HOME>/jre/lib 下的vm.jar,core.jar等核心
扩展加载器(Extensions): 加载<JAVA_HOME>/jre/lib/ext 或者通过java.ext.dirs 这个系统属性指定的路径下的代码
应用程序加载器(Application): 加载java.class.path下的代码(就是我们程序及程序依赖的第三方类)
2. websphere类加载模型
JVM ClassLoader层(包含上述的JAVA 3个层次的类加载器)——>WebSphere Extensions Classloader——>WebSphere "server" Class loader——>Application Classloader(包含有Application Module Classloader和Web Module ClassLoader.这2个类加载器上可以设置类加载顺序)
3.默认类加载顺序(父类优先)
Websphere采用的是父类优先的类加载顺序。通过websphere控制台——故障诊断——类装入器查看器 我们可以看到一个应用在websphere上部署完成启动后真正形成的类加载层次:
如图,类加载层次是:
JDK扩展装入器(也就是java类加载器中的扩展加载器(Extensions))——应用程序装入器应用程序加载器(Application)——OSGI(was6.1新特性)装入、引导程序、类保护器——组合类装入器——组合类装入器
4.改变类加载顺序(应用程序优先)
这里是关键。我一直认为改变WAS中的类加载顺序,调整的是WAS扩展出来的那些类加载层次:也就是上面的“OSGI(was6.1新特性)装入、引导程序、类保护器——组合类装入器——组合类装入器”顺序的改变。
实际情况是:
可以看到,事实上的情况是,改变了类加载顺序之后,最低级的2个类加载器竟然排到了扩展加载器(Extensions)之上,仅在引导加载器(Bootstrap)之后,也就是说:
“应用程序优先”的类加载顺序的结果是:
引导加载器(Bootstrap)——原来最低级的web和module加载器——扩展加载器(Extensions)——应用程序加载器(Application)——was扩展classloader、WAS应用程序类加载器
5.额外的:
websphere能把类加载器提高到这么高的层次,不知道是否是因为websphere6.1使用的JDK是IBM自己实现的而不是使用sun的JDK呢?
- 大小: 18.7 KB
- 大小: 27.3 KB
- 大小: 63.1 KB
- 大小: 59.3 KB
分享到:
相关推荐
WebSphere应用服务器默认的类加载顺序是先从系统类加载器(System ClassLoader)开始,然后是扩展类加载器(Extension ClassLoader),最后是应用程序类加载器(Application ClassLoader)。这种机制可能导致应用中...
- 可以通过 WebSphere 控制台或配置文件来调整类加载策略。 #### 六、部署应用 - 应用的部署通常包括以下步骤: 1. **打包应用程序**:将应用代码及其依赖项打包成 WAR 或 EAR 文件。 2. **上传应用程序**:将...
WebSphere提供了丰富的配置选项来调整类装入器的行为,包括但不限于: - **应用服务器类装入器策略**:允许管理员选择不同的类装入器策略,如“父优先”或“子优先”,以控制类的加载顺序。 - **类加载/委托模式**...
- **调整WebSphere类加载顺序**:WebSphere的类加载策略可能会影响JSP处理器的初始化。可以尝试调整WebSphere的类加载顺序,例如设置`parentLast`模式,让应用类加载器优先于全局类加载器加载类。 - **应用特定...
可以通过WebSphere的管理控制台调整类加载顺序,例如设置“parent last”策略,让WebSphere优先使用应用的类。 2. **WebSphere部署描述符配置**:在`web.xml`中配置CXF的Servlet,指定服务处理端点。例如: ```xml...
在"类加载和更新检测"部分,你需要调整类加载的顺序和策略。具体操作如下: - 选择"类加载器顺序",并确保设置为"类已装入并且是先使用本地类加载器(父类最后)"。这意味着WebSphere会优先使用应用程序自身的类...
在某些情况下,为了确保最新的类优先被加载,需要对类加载器的策略进行调整。本文将详细介绍如何在Rational Application Developer (RAD)环境中设置类加载器策略,以及在WAS服务器端进行相应的配置。 #### 二、类...
5. **设置类加载顺序**:为了确保应用的类优先于服务器的类加载,可能需要调整服务的类加载方式。这通常可以在服务的“类装入器”设置中完成,确保“父最后”策略被启用,这意味着应用的类加载器将在服务器类加载器...
通过调整类加载顺序为“类已载入并且先使用本地类装入器(父类最后)”,可以确保应用优先使用自身WAR包中的JAR包,从而避免版本冲突问题。 #### 扩展阅读 - **类加载机制**:深入了解Java的类加载机制对于理解和...
手册可能还会讲解如何处理依赖库、类加载器顺序,以及如何配置数据源和JMS资源。 此外,手册可能包含了应用程序的更新和扩展内容。当需要升级应用或添加新功能时,如何在不影响现有服务的情况下进行热部署,以及...
确认应用的类加载顺序是否正确,避免类加载冲突。 9. **社区支持和官方文档**: 如果问题仍然存在,可以查阅Apache Struts和IBM WebSphere的官方文档,以及相关的开发者论坛寻求帮助,那里可能会有类似问题的解决...
- **类装入器顺序**:确认Websphere的类装入顺序符合预期,以避免版本冲突和类加载问题。 - **共享库引用**:确保应用服务器配置正确引用了共享库。 - **类路径一致性**:虽然我们使用了共享库,但为了兼容性,还...
部署时,需要注意类加载器顺序、安全性和资源访问权限。 六、WebSphere与Java EE WebSphere完全支持Java EE规范,包括JDBC、JPA、JSF、JMS等。开发者可以利用这些标准API构建分布式、事务处理的业务应用程序。 七...
确保应用程序设置正确,包括类加载器顺序、安全性、资源引用等。 七、配置负载均衡和故障转移 在集群配置中,设置负载均衡策略,如轮询、基于权重的分配等。启用故障转移功能,确保当集群内的某个服务器出现故障时...
**调整启动权重**:启动权重决定应用在服务器启动时的加载顺序。设置较高的权重(如15000),可以使关键的应用优先启动,确保核心服务的及时可用。 以上步骤涵盖了WebSphere项目部署的基本流程,但实际部署可能还...
这些类装载器设计用于解决Java EE应用中常见的类冲突问题,提供灵活的配置选项,使开发者可以根据应用的具体需求来调整类的装载顺序和来源。 **WebSphere扩展类装载器** WebSphere扩展类装载器是一种特殊的类装载器...
解决方法是确保所有依赖库版本一致,并且正确配置了类加载顺序。 #### 总结 Apache CXF提供了强大的支持以实现在多种应用服务器上的部署,包括WebSphere Application Server、WebLogic Server和JBoss Application ...
- **调整类加载顺序:**根据应用的需求调整类加载顺序。 - **重启服务:** - 停止服务:`./stopServer server1` - 启动服务:`./startServer server1` 至此,应用已经在WAS中成功配置并启动。为了方便监控和...