资源描述
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.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
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 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 宽通用公共许可证)使用授权。实现了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/value 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动态模块化系统的行业标准。采用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
安装、迁移、管理及普通开发者文档下载:
约定: 如未特别说明,下文中的官方文档 均指此网址下的文档。
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
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
用户名密码示例: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 Console, 应做以下修改:
修改standalone.xml
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
修改为如下:
<socket-binding name="management-http" interface="public" port="${jboss.management.http.port:9990}"/>
重新启动,即可远程监控管理JBoss EAP.
如果是本机默认部署,则web制控台如下访问:
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 OSGi 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 when 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.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 是jboss 可管理的域工作模式。
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 EE6 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作为一个 "domain"的成员,由Domain Controller进程统一管理、集中配置。
3.3. Domain模式和jboss集群区别
总的来讲,JBoss的群集的目的是提供:
* 负载平衡(Load Balance)
* 高可用(High Availablity)
而域的目的则是将多台服务器组成一个服务器组(Server Group),并为一个服务器组内的多台主机(Host)提供:
* 单点集中配置(通过一个域控制器,即Domain Controller,实现组内主机的统一配置)
* 单点统一部署,通过域控制器将项目一次部署至组内全部主机。
结论
域可以简化群集的管理, 可以理解域和群集的相互关系是"正交(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的模块化(非分层)类加载以及执行环境的实现,由若干类、若干资源和一个相关的类加载器构成,它实现了一个线程安全的,快速的,高并发的类加载器委派(delegating)模型,再加上一个可扩展的模块解析引擎,形成一个独特的,简单的,强大的应用程序执行系统。
4.1.2. 模块分类
1. 静态模块
存放在JBOSS_HOME/modules目录下,每个模块通过module.xml定义。在module.xml中,可以指定模块的名称、模块资源、模块依赖。以struts2模块举例如下:
module.xml 是模块描述文件,模述模块拥有的资源文件,依赖。可以通过
docs\schema\module-1_3.xsd 了解jboss EAP中module的定义,可使用的元素,属性,及规则。
以下是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 对于WAR包应放置在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 )命名规则:
deployment.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自动加载,比如实现了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文档、采用如下方法添加:
<subsystem xmlns="urn:jboss:domain:ee:1.0" >
<global-modules>
<module name="org.javassist" slot="main" />
</global-modules>
</subsystem>
4.1.5. 用户程序访问Jboss模块
请参考官方文档。
4.1.6. 相关文档
1) Class Loading in AS7
https://docs.jboss.org/author/display/AS7/Class+Loading+in+AS7
2) About module.xml in JBoss AS 7
https://community.jboss.org/people/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:<app-name>/<module-name>/<distinct-name>/<bean-name>!<remote-interface>
举例:
java:global/admin_ejb/OperationLogEjb!com.mipt.admin.ifc.OperationLogIfc
2. java:module
此前缀开头的JNDI, 对此模块内所有组件可见。
3. java:app
此前缀开头的JNDI, 在一个WAR包、EAR中可见。
4. java:jboss (jboss专有)
举例,一个IFC Local接口,对应的JNDI就有下面这些形式:
java:global/ottdevice/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:global/ottdevice/ottdevice_ejb/DevUserAuthorityServiceEjb
java:app/ottdevice_ejb/DevUserAuthorityServiceEjb
java:module/DevUserAuthorityServiceEjb
4.2.2. 绑定JNDI
相当于给JNDI建了一个快捷方式。通过配置<lookup/>元素,属情name是JNDI的简称,lookup元素是真正的jndi,然后通过JNDI的简称可以返回对应的ejb。
<subsystem xmlns="urn:jboss:domain:naming:1.1">
<bindings>
<lookup
name="java:global/AdminEjb/local"
lookup="ejb:/admin_ejb/AdminEjb!com.mipt.admin.ifc.AdminIfc"/>
</bindings>
</subsystem>
在jboss eap 6.2中,JNDI简称的前缀,必不可少。
4.3. Datasource
数据源类型
datasources
Non-XA datasources 是支持事务的单数据源、或不支持事务的数据源。
.
XA datasources
支持分布式事务。
配置方法
创建数据源方法:
1. 建立数据源模块目录:
$JBOSS_HOME/modules/com/mysql/main
2. 放入数据源JAR包
3. 放入module.xml
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-5.1.18-bin.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module nam e="javax.transaction.api"/>
</dependencies>
</module>
4. 修改standalone.xml增加数据库驱动和数据源
1) 搜索drivers结点, 在此结点下追加子结点:
<driver name="mysql" module="com.mysql">
<xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class>
</driver>
2) 搜索datasources结点,在此结点下添加(可选):
<datasource jndi-name="java:/MySQLDS-store" pool-name="StoreDS"
enabled="true" jta="true" use-java-context="true" use-ccm="true">
<connection-url>
jdbc:mysql://192.158.52.13/store?useUnicode=true&characterEncoding=utf-8
</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver>mysql</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED
</transaction-isolation>
<pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>100</max-pool-size>
<prefill>true</prefill>
<use-strict-min>false</use-strict-min>
</pool>
<security>
<user-name>devuser</user-name>
<password>123456</password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<statement>
<prepared-statement-cache-size>100</prepared-statement-cache-size>
<share-prepared-statements />
</statement>
</datasource>
5. Datasource可以在standalone.xml中添加,如上所述。也可以把数据源以xxx-ds.xml文件的方式,放到META-INF下。
4.4. 资源文件
1. Conf文件可以放入:
standalone\configuration
代码实例:
String CONFIG_DIR_PROPERTY = "jboss.server.config.dir";
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.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 迁移分析工具
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的系统模块耦合到一块。
举例com.mipt模块内容如下图:
module.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.mipt">
<resources>
<resource-root path="mipt_utils.jar"/>
<resource-root path="ucenter_ifc.jar"/>
<resource-root path="ottdevice_ifc.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.servlet.api" />
<module name="javax.servlet.jsp.api"/>
<module name="javax.mail.api"/>
<module name="org.apache.log4j.api"/>
<module name="mons"/>
<module name="org.dom4j"/>
<module name="mon"/>
</dependencies>
</module>
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和相相关的资源文件一起打到一个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.jar, javax.mail.api, org.apache.struts2, org.apache.log4j.api
6.4.4. Ant 生成依赖
采用ant脚本可以生成以上jar或war包的MANIFEST.MF文件及内容,生成脚本如下:
<jar destfile="${dist.deploy}/admin_ejb.jar">
<fileset dir="${build}"
includes = "**/ifc/**,**/auth/**,**/util/**,**/dao/**,**/ejb/**"/>
<metainf dir="${src}/META-INF" includes="**"/>
<manifest>
<attribute name="Dependencies"
value="javax.mail.api, org.apache.log4j.api, org.apache.struts2" />
</manifest>
</jar>
<!-- build admin.war -->
<war warfile="${dist.deploy}/admin.war"
webxml="${src}/WEB-INF/web.xml">
<classes dir="${build}" excludes = "**/dao/**,**/ejb/**,**/ifc/**"/>
<webinf dir="${src}/WEB-INF" includes="**"/>
<zipfileset dir="${src}/view"/>
<manifest>
<attribute name="Dependencies"
value="deployment.admin_ejb.jar, javax.mail.api, org.apache.struts2, org.apache.log4j.api" />
</manifest>
</war>
6.4.5. Maven生成依赖
Maven插件生成依赖,和ant有一些类似之处,插件如下:
maven-jar-plugin,
maven-ejb-plugin, maven-war-plugin
6.4.6. 迁移ucenter项目
Jar、war的依赖配置、数据源配置,此处不于详述。
6.4.7. 方法
IFC
WEB
EJB
Web 依赖着IFC, EJB也依赖着IFC, IFC也可以让别的模块来调来。
所以IFC 作为JBossEAP的静态模块配置,WEB、EJB分别打成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包方法
<ear destfile="${dist.deploy}/ucenter.ear"
appxml="${src}/META-INF/application.xml">
<fileset dir="${dist.deploy}">
<include name="ucenter_ejb.jar"/>
<include name="ucenter.war"/>
</fileset>
<zipfileset file="${src}/lib/jbossweb*.jar" prefix="lib"/>
</ear>
其中application.xml用于描述
展开阅读全文