1、JBoss EAP Use Document JBoss EAP使用文档 Author –slieer Revision No – 0.1 Issue Date - 2014-03-05 PRODUCT: Appstore RELEASE: FEATURE: SUBSYSTEM: DISTRIBUTE TO: Revision History Revision # Author Reviewed By Description Of Change Issued by / Date 0
2、1 slieer 初始版本 2014/03/5 XXXX Proprietary Not for use or disclosure outside XXXX CO, LTD. or any of its subsidiaries Except under prior written agreement. Table of Contents Jboss EAP使用 4 1. 概述 4 1.1. 述语解释 4 1.2. Jboss 发展版本概述 5 2. 安装 5
3、2.1. 使用环境 5 2.2. 安装方式 5 2.3. 简单使用 6 2.4. 顶层目录结构说明 6 3. 工作模式 7 3.1. standalone模式 7 3.2. domain模式 8 4. 基本功能使用 8 4.1. Jboss 模块 8 4.2. JNDI 12 4.3. Datasource 13 4.4. 资源文件 14 4.5. 日志系统 14 4.6. 项目打包模式 14 5. 性能和基准测试 15 6. 迁移 15 6.1 迁移官方文档 15 6.2 迁移分析工具 15 6.3 迁移通用包 15 6.3. 迁移basic/utils
4、 16 6.4. 迁移admin项目 16 Jboss EAP使用 1. 概述 1.1. 述语解释 l Jboss相关述语 Jboss AS(JBoss Application server)JBoss开源社区版本,发布比较频繁。最新版为: JBoss AS 7.3.0.Final。 Jboss EAP(JBoss Enterprise Application Platform) JBoss AS的企业版本, 最新版为:JBoss EAP 6.2.1(等同于AS 7.3.0.Final-redhat-14)。采用LGPL(Lesser GPL 宽通用公共许可证)使用授权。实
5、现了Java EE 6规范的所有功能。 Wildfly 是 JBoss AS项目的新名称,同时也是JBoss AS的后续版本。版本也继承了JBoss AS ,从8.0开始,针对Java EE 7 功能已经全部实现,并已经通过Java EE7认证。 最新本为:8.0.0.Final。 Jboss 常见子项目 1. MSC (Modular Service Container ) / jboss-modules Jboss 自己制订的动态模块化统系。和OSGi相似,但是比OSGi简单、功能也少一些。 2. Infinispan Transactional in-memory key/va
6、lue NoSQL datastore & Data Grid。是JBoss Cache缓存框架的后续项目 3. HornetQ 一个多协议、可嵌入、高性能、可集群的异步的消息系统。 中文用户手册: http://www.jboss.org/hornetq/chinesedocs.html 4. JBoss Web Services http://www.jboss.org/jbossws 实现了JAX-WS标准,完整支持apache CXF。 5. Arquillian 一个集成测试、功能测试平台,可用于Java中间件的测试。 l OSGi是Java动态模块化系统的行业
7、标准。采用OSGi做为架构的知名项目: eclipse、glassfish等。OSGi标准的开源实现有:Apache Felix、eclipse equinox等。在大型项目中应用较广。 l Maven 概念请参考官方网站或baidu百科。由于jboss EAP官方文档中一些章节和maven有关,所以应该对maven有一定的了解。 注:本文档以Jboss EAP 6.2.0 GA为使用环境。软件包和文档网址如下: 软件下载: http://www.jboss.org/products/eap 安装、迁移、管理及普通开发者文档下载: 约定: 如未特别说明,下文中的官方文档
8、 均指此网址下的文档。 1.2. Jboss 发展版本概述 JBoss AS 7.0.0.Alpha1 2010-11-01 版本7系列的第一个版本 EAP 6.2.0 GA (built from AS 7.3) 2013-12-4 已经是Jboss 7系例中非常稳定的版本。 源码地址(含JBoss-as、Wildfly): 下载源码,TortoiseGit à Revision Graphs 可查看版本变迁发展蓝图。 2. 安装 2.1. 使用环境 OS Linux X86_64 Java Java 1.7.0_51 / Java 1.6.x
9、 App Server JBoss EAP 6.2.0 standalone模式 2.2. 安装方式 1. Zip Installation 2. JAR Installer 3. RPM Installation 在正式环境,最好建议采用RPM方式安装,便于升级,便于管理。但是需要购买redhat的服务,不然他的yum repo,是无法访问的,就只能采用zip方式了。 2.3. 简单使用 l 启动方式:/usr/local/jboss7/bin/standalone.sh -b 0.0.0.0 & l 添加后台管理用户命令: bin/add-user.sh 用户名密码示
10、例:admin/admin.123 JBoss EAP 7.2 提高了默认的安全性,只有添加管理用户,并设置有一定全安级别的密码,才能进行后台管理。 l 管理客户端: jboss-cli.sh 使用文档: https://docs.jboss.org/author/display/AS72/Management+Clients 常用命令: connect 连接到本地EAP shutdown 停止 exit 退出 l Web Admin Console 先添加后台账号, 才能打开Web Admin Console。 如果要远程访问Web Admin Consol
11、e, 应做以下修改:
修改standalone.xml
12、 http://127.0.0.1:9990/console/App.html#server-overview 2.4. 顶层目录结构说明 Name Purpose appclient/ Contains configuration details for the application client container. bin/ Contains start-up scripts for JBoss EAP 6 on Red Hat Enterprise Linux and Microsoft Windows. bundles/ Contains OS
13、Gi bundles which pertain to JBoss EAP 6 internal functionality. docs/ License files, schemas, and examples. domain/ Configuration files, deployment content, and writable areas used when JBoss EAP 6 runs as a managed domain. modules/ Modules which are dynamically loaded by JBoss EAP 6 whe
14、n services request them. standalone/ Configuration files, deployment content, and writable areas used when JBoss EAP 6 runs as a standalone server. welcome-content/ Contains content used by the Welcome web application which is available on port 8080 of a default installation. jboss-modules.
15、jar The bootstrapping mechanism which loads modules. 需要了解的几个目录和文件: 1. jboss-modules.jar 此jar包实现了jboss 模块化加载的服务功能。 2. modules dir 是静态模块的放置目录。 3. standalone dir 是jboss单例工作模式下配置文件、用户部署项目放置目录。这是默认的工作模式。 4. docs\schema dir 存放着众多jboss xml配置的校验文件(dtd文件、xsd 文件),在配置Jboss时,可以参考。 5. domain dir 是jbos
16、s 可管理的域工作模式。 6. bundles dir 是提供OSGi功能的服务类。 3. 工作模式 3.1. standalone模式 可细分为以下模式: Profile Name Standalone File Name Description Clustered default standalone.xml (default) Java EE6 Web Profile + JCA + JAX-RS + JAX-WS + Javamail + Remote Connectivity N ha standalone-ha.xml Java E
17、E6 Web Profile + JCA + JAX-RS + JAX-WS + Javamail + Remote Connectivity Y full standalone-full.xml Java EE6 Full Profile N full-ha standalone-full-ha.xml Java EE6 Full Profile Y Clustered 表示是否支持在Managed domain下运动。 3.2. domain模式 domain模式是JBoss7.x的重要的特性,能够从单个的控制点管理多个 AS 的实例。这样的一组Server
18、作为一个 "domain"的成员,由Domain Controller进程统一管理、集中配置。 3.3. Domain模式和jboss集群区别 总的来讲,JBoss的群集的目的是提供: * 负载平衡(Load Balance) * 高可用(High Availablity) 而域的目的则是将多台服务器组成一个服务器组(Server Group),并为一个服务器组内的多台主机(Host)提供: * 单点集中配置(通过一个域控制器,即Domain Controller,实现组内主机的统一配置) * 单点统一部署,通过域控制器将项目一次部署至组内全部主机。 结论 域可以
19、简化群集的管理, 可以理解域和群集的相互关系是"正交(orthogonal)"的:通过一横一竖这两条轴,JBoss AS为我们在运维方面提供了强大的可扩展能力。 4. 基本功能使用 1. 2. 1. 2. 3. 4. 4.1. Jboss 模块 4.1.1. 模块概念 传统的加载方式是层次化,有比较复杂的继承关系,极易陷入“JAR Hell”处境。关于此述语,如果不知道,请google, 或baidu. 而JBoss Modules正是为解决此类问题而出现的。JBoss Modules是一个适用于Java的模块化(非分层)类加载以及执行环境的实现,由若干类、若干资源和一个相
20、关的类加载器构成,它实现了一个线程安全的,快速的,高并发的类加载器委派(delegating)模型,再加上一个可扩展的模块解析引擎,形成一个独特的,简单的,强大的应用程序执行系统。 4.1.2. 模块分类 1. 静态模块 存放在JBOSS_HOME/modules目录下,每个模块通过module.xml定义。在module.xml中,可以指定模块的名称、模块资源、模块依赖。以struts2模块举例如下: module.xml 是模块描述文件,模述模块拥有的资源文件,依赖。可以通过 docs\schema\module-1_3.xsd 了解jboss EAP中module的定义,可
21、使用的元素,属性,及规则。 以下是struts2模块的module.xml文件内容: 2. 动态模块 1) 定义 一般存放在JBOSS_HOME/deployment目录下,此目录下的一个jar或war就是一个模块,EAR包中的jar, war 或lib分别作为单独的模块。 动态模块通过MANIFEST .MF或者jboss-deployment-structure.xml描述模块的构成、属性等。 2) 动态模块元数据放置位置 MANIFEST .MF 可放在JAR、WAR、EAR包的MET A-INF。 jboss-deployment-structure.xml 对于W
22、AR包应放置在WEB-INF下,对于JAR、EAR应放置在MET A-INF目录下。 3) 动态模块名称规则 注意: 动态模块的命名,一般不需要关心。当需要配置模块间的依赖关系时,才会使用到。 WAR and JAR 采用如下命名规则: deployment.DEPLOYMENT_NAM。举例: 在deployment目录下部署了以下文件: inventory.war store.jar 它们的名称分别为: deployment.inventory.war deployment.store.jar EAR中每一个子部署(Sub deployment )命名规则: deploy
23、ment.EAR_NAME.SUBDEPLOYMENT_NAME The lib/ directory of the EAR is a single module called the parent module. 举例说明: 在deployment目录下部署了以下文件:accounts.ear,这个ear包含一个reports.war。 那么reports.war 这个war的名称是: deployment.accounts.ear.reports.war 4.1.3. 模块依赖类型 1. 隐式依赖(Implicit Dependencies) Jboss自动加载,比如实
24、现了JavaEE 6的jboss EAP相关的模块。
具体有那些是隐式依赖,请参考文档:
JBoss_Enterprise_Application_Platform-6.2-Development_Guide-en-US.pdf
3.8.1. Implicit Module Dependencies
2. 显式依赖需要自己配置。
可以配置成静态模块或动态模块。
4.1.4. 全局模块
找到standalone.xml文档、采用如下方法添加:
25、les>
26、/ozizka/blog/2012/11/12/about-modulexml-in-jboss-as-7
3) Support wildcards in module.xml resource-root elements
https://issues.jboss.org/browse/MODULES-99
4.2. JNDI
4.2.1. JNDI Namespace
从EJB 3.1开始对JNDI的命名空间(Namespace)进行了标准化。JNDI作用域前缀,分以下三类:
1. java:global 格式:
namespace-prefix: 27、ule-name>/ 28、tdevice/ottdevice_ejb/DevUserAuthorityServiceEjb!com.mipt.ottdevmgr.ifc.DevUserAuthorityServiceIfc
java:app/ottdevice_ejb/DevUserAuthorityServiceEjb!com.mipt.ottdevmgr.ifc.DevUserAuthorityServiceIfc
java:module/DevUserAuthorityServiceEjb!com.mipt.ottdevmgr.ifc.DevUserAuthorityServiceIfc
java:glob 29、al/ottdevice/ottdevice_ejb/DevUserAuthorityServiceEjb
java:app/ottdevice_ejb/DevUserAuthorityServiceEjb
java:module/DevUserAuthorityServiceEjb
4.2.2. 绑定JNDI
相当于给JNDI建了一个快捷方式。通过配置 30、 31、datasources
支持分布式事务。
配置方法
创建数据源方法:
1. 建立数据源模块目录:
$JBOSS_HOME/modules/com/mysql/main
2. 放入数据源JAR包
3. 放入module.xml
32、
33、class>
34、url>
35、use-strict-min>
36、>100 37、
String PROPERTIES_FILE = "application-xxx.properties";
Properties PROPERTIES = new Properties();
String path = System.getProperty(CONFIG_DIR_PROPERTY) + File.separator + PROPERTIES_FILE;
File f = new File(path);
2.
3.
4.
4.1.
4.2.
4.3.
4.4.
4.5. 日志系统
4. 38、6. 项目打包模式
1. 普通jar方式
2. War (ejb, web, ifc, 其它资源打入一个war包)
3. Ear
请根据实际情况,选择不同的模式。应当尽量采用maven骨架(Archetype)来创建项目(jar包项目、 war包、ear包)。
5. 性能和基准测试
http://www.spec.org/jAppServer2004/
http://www.spec.org/jbb2005/
Siege
6. 迁移
1
2
3
4
5
6
6.1 迁移官方文档
迁移数据源
迁移第三方jar包为静态全局模块
6.2 迁移分析工 39、具
Tattletale
IronJacamar Migration Tool
6.3 迁移通用包
将公司所依赖的第三方包,组织成以下Jboss EAP静态模块:
com.google.gdata
mon
com.mipt
com.mysql
mons
org.apache.http
org.apache.log4j.api
org.apache.mahout
org.apache.poi
org.apache.struts
org.apache.xmlbeans
others
放到modules目录下。为了简单,采取的策略是:尽量不要和EAP的系统模块耦合到 40、一块。
举例com.mipt模块内容如下图:
module.xml内容如下:
41、 42、
6.1.
6.2.
6.3. 迁移basic/utils
见迁移通用包
6.4. 迁移admin项目
Web依赖IFC,IFC和EJB之间相互依赖,如下图:
IFC
WEB
EJB
1.
2.
3.
4.
5.
6.
6.1.
6.2.
6.3.
6.4.
6.4.1. 方法
IFC和EJB存在着相互的引用,一般情况下,不应该这么做,尽量采用垂直正交的软件架构。所以采用的方法是:
把ifc和ejb打在一块jar包里,也不会影响其它模块对admin ifc的依赖。命名采用原ejb包的命名。
把action 43、和相相关的资源文件一起打到一个web包里。
数据源的迁移见上文。
6.4.2. JAR包依赖
要显式的配置Jar的依赖:
建立或修改META-INF/MANIFEST.MF 追加以下内容:
Dependencies: javax.mail.api, org.apache.struts2, org.apache.log4j.api, org.slf4j, mons.logging
注意:上面文件中的空格不能删除。
6.4.3. WAR包依赖
修改META-INF/MANIFEST.MF文件,添加依赖:
Dependencies: deployment.admin_ejb 44、jar, javax.mail.api, org.apache.struts2, org.apache.log4j.api
6.4.4. Ant 生成依赖
采用ant脚本可以生成以上jar或war包的MANIFEST.MF文件及内容,生成脚本如下:
46、 dir="${build}" excludes = "**/dao/**,**/ejb/**,**/ifc/**"/>
48、JB分别打成war包,jar包, 再将War包、jar包一起打到EAR包里去即可,这样比较简洁。EAR包结构如下图:
META-INF下放着两个文件:application.xml、MANIFEST.MF
lib下放着一个jar包: jbossweb-service-4.2.3.ga.jar
(在web.xml中使用: org.jboss.web.tomcat.filters.ReplyHeaderFilter) ,这个jar属于jboss 4.x,在jboss高版本中已无从查找,所以将此jar放在此lib中。
6.4.8. ant打EAR包方法






