文档章节

简述 Java EE 容器的类加载,以及 JBoss AS 7 的特殊之处

编走编想
 编走编想
发布于 2013/08/06 10:50
字数 643
阅读 484
收藏 10

既然是简述,就说的简单一点了,因为 Java 的类加载是一个很大的话题。很多技术,例如 Java EE 容器、OSGi 容器、JVM 上面的动态语言,都有自己在类加载上的特殊之处。

JVM 的类加载

<br/> 先回顾一下 JVM 类加载的基本知识点:

  • 代理模式<br/> 类加载的代理模式

从上面的这个图我们可以看到,类加载器在加载某个类的时候会先将加载请求提交给它的父加载器,逐级上交。如果出于最根部的 Bootstrap Classloader 不能加载此类,类的加载请求会逐级向下传递,直到那个能加载到这个类的类加载器。

这么做的原因在于,我想,没有人会希望下面这个情况的发生。像 JDK 中的那些公用的类,同一个类会因为被不同的类加载器加载,而被认为是不同的类。同时,公用的类被多次加载也是对资源的浪费。

  • 类的可见性<br/> 这一点简单来说就是父类加载到的类对子类是可简单,反之不成立。

Java EE 容器的类加载

<br/> Java EE 应用常以 EAR 格式来部署,这种格式也相较于 WAR 复杂,所以就只以 EAR 为例介绍了。

EAR 包中可以存在一个或多个 EJB-JAR 包和同样可以一个或多个的 WAR 包。EAR 包在 Java EE 容器中会有自己的类加载器,同时 EJB-JAR 和 WAR 也有自己的类加载器。EAR 包的类加载器会是 其 EJB-JAR 包和 WAR 包类加载器的父加载器。如果 WAR 包依赖某个 EJB-JAR 包,那这两者的类加载器会成父子关系。

J2EE 类加载器

JBoss AS 7 的类加载的小特殊

<br/> JBoss AS 7 在默认的配置下,其类加载机制和上述 Java EE 容器的类加载有所不同。默认情况下,JBoss AS 中一个 EAR 包的 WAR 和 EJB-JAR 的类加载器对互相的类都是可见的。这个配置可以通过修改 standalone.xml 来实现,加入如下配置:

<!-- lang: xml -->
<subsystem xmlns="urn:jboss:domain:ee:1.0" >            
    <ear-subdeployments-isolated>false</ear-subdeployments-isolated>
</subsystem>

最后

<br/> Java EE 容器的类加载并没有严格规范,具体实现是交由容器自己来做的,所以不同的容器在实现细节上会有不同。希望各位看客可以提供补充。

参考

  1. 深入探讨 Java 类加载器
  2. Classloaders and J2EE
  3. Class Loading in JBoss AS7

© 著作权归作者所有

共有 人打赏支持
编走编想
粉丝 150
博文 128
码字总数 111395
作品 0
海淀
程序员
私信 提问
从 JBoss v4.x 迁移到 IBM WAS CE 2.x

将 WebSphere® Application Server 和 Apache Geronimo 的支持和架构作为 JBoss® Application Server 的最佳替代选择。本文帮助您将运行在 JBoss 上的应用程序迁移到 WebSphere Applicatio...

红薯
2009/12/10
656
0
WildFly 10 CR1 发布,Java 应用服务器

WildFly 10 CR1 发布,关于Java EE 7 与 Java 8+ 的更新内容: Java EE 7 As with WildFly 8 and WildFly 9, WildFly 10 implements the Java EE 7 Full and Web Profile standards. Java 8+......

oschina
2015/09/18
1K
3
JBoss EAP 7.0 Alpha 发布,支持 Java EE 7

Red Hat JBoss Enterprise Application Platform 7 (JBoss EAP 7) 是个中间件平台,基于开放标准构建,和 Java EE 7 规范编译。JBoss EAP 集成了 WildFly Application Server 10,包含其高可...

oschina
2015/11/16
1K
5
Java 应用服务器 WildFly 14.0.1 发布

Java 应用服务器 WildFly 14.0.1 发布了。暂未发现该版本的更新说明,更多关于 WildFly 的更新请点此查看。 WildFly,原名 JBoss AS 或者 JBoss,是一套应用程序服务器,属于开源的企业级 Ja...

淡漠悠然
2018/09/12
982
0
JBoss 系列八十五: JBoss Modules 简单介绍

概述 从JBoss AS7开始,Classloader这块开始使用全新的JBoss Modules。本文简单介绍说明JBoss Modules的设计思路,以及给出一个例子说明这一设计思路。 JBoss Modules 介绍 我们都知道,Jav...

无鸯
2014/02/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

记录replugin使用的一个坑

反复编译插件放入宿主中,一直出现如下错误: android.content.res.Resources$NotFoundException: Resource ID #0x7f050000 type #0x5 is not valid 回滚代码,重启AS还是出错。最终发现将宿...

Gemini-Lin
今天
1
0
Vert.x系列(二)--EventBusImpl源码分析

前言:Vert.x 实现了2种完成不同的eventBus: EventBusImpl(A local event bus implementation)和 它的子类 ClusteredEventBus(An event bus implementation that clusters with other Ve......

冷基
今天
1
0
Perl - 获取文件项目

参考:http://www.runoob.com/perl/perl-directories.html 下面返回JSON格式的文件列表 #!/usr/bin/perluse strict;use warnings;use utf8;use feature ':5.26';require Fi......

wffger
昨天
2
0
vue组件系列3、查询下载

直接源码,虽然样式样式不好看,逻辑也不是最优,但是可以留作纪念。毕竟以后类似的功能只需要优化就可以了,不用每次都重头开始。。。 <template> <div class="pre_upload"> <div ...

轻轻的往前走
昨天
2
0
java浅复制和深复制

之前写了数组的复制,所以这里继续总结一下浅复制和深复制。 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝。 深拷贝:对基本数据类型进行值传递,对引用数据类型,...

woshixin
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部