JavaEE7-2 打包
see: JavaEE 模块打包
5.1 JavaEE 打包部署应用
一个Java EE 应用被分发在一个Java Archive(jar), 一个 Web Archive(WAR),或者一个Enterprise Archive(EAR) 文件中。WAR或者EAR文件是标准的JAR文件但是 后缀为.war 或者.ear。 使用jar,war,以及ear文件还有模块化使得使用某些相同的组件来构建一些列不同的应用成为可能。没有额外的代码;仅仅需要弄清楚需要将哪些javaee模块打包进jar war ear 文件中。
一个ear 文件包含Javaee模块,可选的 一个部署描述文件,部署描述文件是一个xml文件以.xml结尾,其中描述了一个应用模块或者组件的部署设置。因为部署描述文件信息是声明性质的,他可以不需要修改源代码而被改变。在运行时,javaee服务器读取部署描述文件并将信息应用到应用 模块或者组件上。
部署信息最常见的是直接在源代码中使用annotaions。部署描述文件 如果存在的话,将覆盖源代码中的设置。
有两种类型的部署描述文件一种是JavaEE描述文件 这种文件的规范由JavaEE规范定义 ,另外一种是 是运行时描述文件用来配置JavaEE实现 的参数。例如 GlassFish 运行时部署描述包含了 web app 的 context root 以及另外一个glassfish平台特有的参数,例如caching directives 等,GlassFish JavaEE服务器 的运行时部署文件被命名为 glassfish-moduleType.xml, 比如 在ear 的根目录下的META-INF 中就是 glassfish-application.xml与之对应的JavaEE描述文件 就是 application.xml 两者处在同一目录下.
一个Java EE 模块 由同一个类型的容器中的一个或者更多的JavaEE组件组成,可选的 ,一个改容器类型的组件描述文件。 一个EJB模块部署描述文件,例如 ,为一个EJB定义了事物属性以及安全授权。一个JavaEE模块可以被作为单独的模块部署。
JavaEE模块包含下列类型:
- EJB模块,包含EJB class 文件以及可选的 EJB部署描述文件。EJB模块被打包进jar扩展文件。
- Web模块, 包含有 servlet class文件,web file,用于支持的class文件,gif,html文件等等 可选的 ,一个web application 部署描述文件,web 模块 被打包为war扩展文件。
- Applcation client 模块, 包含class 文件 可选的 一个app client 部署描述文件。application 客户端模块被打包为 jar 扩展文件。
- Resource adapter modules, 包含所有的Java interfce,class ,native libraries,以及可选的 resource adapter 部署描述文件。他们一起实现了 Connector 架构 为一个特别的EIS。该模块被打包进 .rar文件扩展
5.2.1 打包 Enterprise Beans
这节将讨论如何打包 EJB进jar 或者war 文件
一个 EJB jar 文件是可移植并且可以被多个不同的应用使用的。 为了装配一个JavaEE application, 打包一个或者更多模块,例如打包一个EJB jar 文件,进入一个EAR文件,这个包集合包含了这个应用。当部署包含EJB jar 的EAR文件时,你同时也将ejb部署进入了javaee服务器中。你可以不讲ejb jar包含在ear文件中直接部署到服务器里
通常ejb jar 文件 的结构如下 根目录包含了两部分 一个META-INF 目录 以及 ejb模块内包含的所有.class文件 META-INF目录下则包含 一个 ejb-jar.xml 部署描述文件 以及一个运行时服务器相关的比如 glassfish-ejb-jar.xml 文件 接着一个MANIFEST.MF文件
5.2.2 打包 Enterprise Beans 到 war 模块中
ejb 通常提供了web application业务逻辑.在这样的例子中,将ejb打包进war模块中将简单化部署以及应用的组织。ejb可以当作Java 语言的class文件被打包进war模块里或者直接 包含在一个jar文件中然后 被直接放入war模块里
为了包含ejb class文件进入 war 模块,所有的相关class文件必须被放置在WEB-INF/classes 目录下。
为了集成一个包含ejb的jar文件进入war模块,将这个jar文件添加到war模块的WEB-INF/lib目录下
包含有ejb 的war模块并部要求一个ejb-jar.xml 部署文件。如果应用使用了改文件,那么它必须位于 war模块的 WEB-INF目录下
在war中集成一个包含ejb的jar文件 不会被认为是一个EJB jar 文件,甚至被集成绑定的jar文件遵守了ejb jar文件的格式。包含ejb的jar文件 在语义上等价于ejb 的class文件都房子在WEB-INF/classes下 ,并且所有的ejb的环境命名空间 都限定在war模块。
例如: 假设 一个web app 由 一个 shopping cart ejb,一个 credit card-processing ejb,和一个java servlet front end 构成。 shopping cart ejb 暴露为一个本地的,无接口视图 并且他的定义如下:
package com.example.cart;
@Stateless
public class CartBean(...)
credit card-processing bean 被打包进自己的jar 文件中,cc.jar,暴露为一个本地的,没有接口视图的 并且定义如下:
package com.example.cc;
@Stateless
public class CreditCardBean (...)
servlet, com.example.web.StoreServlet,处理web前端并且使用了CardBean以及 CreditCardBean. 最后产生的war模块的 目录结构如下
WEB-INF/classes/com/example/card/CartBean.class
WEB-INF/classes/com/example/web/StoreServlet
WEB-INF/lib/cc.jar
WEB-INF/ejb-jar.xml
WEB-INF/web.xml
5.3 打包 war (Web Archives)
在JavaEE 体系结构中,一个web 模块 是最小的可部署以及可用的web资源单元。一个web模块包含了web 组件以及静态web内容文件,例如image,这些被称为web resources。一个JavaEE web模块对应于一个web app需要跟Java Servlet 规范中定义一样。
除了web 组件以及web resources,一个web模块可以包含其他的文件:
- 服务器端 工具类,例如shopping carts 等等
- 客户端 classes,例如 一些工具class
一个web 模块 有一个特殊的结构。web模块的顶级目录是 web 应用的 document root。而 document root 是 xhtml 页面,客户端classess 以及 archives,还有静态web resources,例如image 等 存储的地方。
document root 包含一个子目录 WEB-INF, 改字幕的它可以包含下列文件和目录:
- classes ,一个目录 包含 服务端 classes:servlets ejb ,utility classes,以及 JavaBeans components
- lib ,一个目录包含了 jar 文件该文件 包含 ejb 以及 被服务端class调用的 jar
- deployment descriptors, 例如web.xml(web 应用部署文件) 以及ejb-jar.xml
一个web模块如果使用了JSF 技术 那么就需要一个web.xml文件,如果必须明确确定的安全信息,或者你想要覆盖由web组件annotation 声明的配置信息 就需要web.xml
你可以创建应用特殊的子目录(也就是,包 目录) 在 document root 或者 WEB-INF/classes/ 目录下
一个web 模块可以作为一个未被解包的文件结构或者 可以包打包进一个war文件中被部署。因为 war的内容与使用是不同于jar文件的,web 模块仅仅被描述是可移植的;你可以部署到任何遵守Java Servlet specification 的web容器。
你可以提供一个运行时 部署描述文件当你部署war到glassfish中,但是 大多数情况下不是必须的,运行时 部署文件是一个xml文件 它包含了诸如 web app的 context root,一个app的资源的可移植名字到服务器资源的映射,app的安全角色到用户,组以及 在服务器里定力的重要 映射。 Glassfish 服务器运行时 部署描述文件,一旦使用 被命名为glasshfish-web.xml 并且位于 WEB-INF 目录下,
#5.4 打包 Resource Adapter Archives Resource Adapter Archive(RAR)文件存储了xml 文件,Java classes,以及 为JavaEE Connector architecure(JCA)app 准备的对象 文件. RAR 可以被部署到任何Java EE 服务器中,非常类似一个Java EE app。 RAR 文件可以包含在一个EAR文件中,或者以一个分离的方式存在。
RAR文件包含了
- 一个Jar 文件 其中包含了 resource adapter 的实现 classes
- 一个可选的 META-INF/ 目录,可以存储一个ra.xml 文件或者 一个app 服务器 特定的 部署文件用以 配置的目录。
一个RAR文件可以被部署到应用服务器 作为一个单独的组件,或者作为一个大型应用的一部分,这两个方式中,所有的adapter 对于所有的app 都是可用的 通过使用查找程序。