下面翻译自wikipedia
一种企业的存档-EAR,是一种文件模式,它用于 Java EE 来打包一个或者多个模块到一个档案文件,从而使发布到一个应用程序上的众多模块工作的更加协调和同步.EAR文件包含了称作部署描述符的一些 xml 文件,这些文件用来描述如何发布各个模块. Maven 和 Ant 都可以用来构建 EAR 文件.
文件结构
EAR 文件是一种标准的 JAR 文件,也就是 ZIP 文件,只是有了一个 .ear 的后缀.它包含了一个或者多个此条来代表应用程序的模块,还有一个称为 META-INF 的元数据目录来包含一个或者多个的部署描述符.
模块
服务器部署的不同模块都可以被嵌入到一个 EAR 文件:
- web 模块.(后缀为 .war) 这是一个可部署的单元,包含了一个或者多个部件,其他的资源文件,以及一个网络应用程序的部署描述符. web 模块包含在一个体系之中,这个体系包含了多个目录和文件,并使用标准的网络应用程序格式.
- POJO Java类可以部署在Jar文件里.(POJO: Plain Ordinary Java Object,不包含业务逻辑的简单Java对象)
- EJB模块以 .jar为扩展名.它包含自己的 META-INF 目录描述,来描述持久化类的部署.部署之后,实体bean对于其他的组件可见,如果是远程输出,也对远程客户端可见.消息bean和会话bean对于远程的介入是可用的.
- 资源适配器模块以 .rar 为扩展名.
类隔离
大部分的应用程序服务器都是从一个部署的 ERA 文件以一种Java类加载器组成孤立数的形式加载类,这样和别的应用程序来加以隔离,而不是对发布模块之间的共享类直接进行隔离.比如,一个部署的WAR 文件会创建这样一个类,它定义了一个包含在 EAR 文件中的 JAR 文件,但这些在其他的 EAR 文件中的 JAR 文件并不是必要的.这种行为的一个重要原因就是为了允许使用静态单例(比如 Log4j)的应用程序之间的完全隔离,否则的话就会混淆单独的应用程序之间的配置.这也使得应用程序和库的不同版本可以并行的发布.
对JBoss应用服务器值得关注的是它并不隔离部署的容器.通过一个 EAR 文件发布的网络应用程序可以得到别的EAR 或者 WAR 文件中的类.这是一个有点争议的策略.统一类加载器用来在类数据可以通过引用和拷贝共享的情况下,减少运行中应用程序之间的开销.这也同样避免了让开发人员必须去理解类加载器树的创建.但是,它也阻止了在独立应用程序上已经部署的独立库的不同版本.JBoss 4.0.2 切换到了分级的类加载器,但是到了 4..0.3 ,因为一些向后兼容的原因又回复到了统一的类加载器.现在有了一个配置选项来改变这种行为.
META-INF 目录
META-INF 目录至少要包含一个称为 Java EE 部署描述符的部署描述符 application.xml.它包含了如下的 xml 实体:
- 图标,指明了代表应用程序图片的位置.一个分支有大图标和小图标组成.
- 显示名称,用来定义应用程序.
- 描述
- 档案中每个模块的一个模块元素.
- 0个或者多个安全角色元素,用于应用程序中的全局安全角色.
每个模块元素都包含了一个 ejb, web 或者 java 元素来描述在应用程序中自己的模块.web 模块还提供了了一个上下文根来通过他的 url 来标识web模块.
紧接着 Java EE 部署描述符可以有一个或者多个运行时部署描述符,用来配置特定的Java EE参数实施.