[原文] http://community.jboss.org/wiki/JBossAS7UserGuide
这是简要的指南,意在帮助那些期望体验JBoss AS7的用户,尽管JBoss AS7还在开发过程中。如果你有任何关于这篇文章内容的反馈,可以通过发表该文的评论或者访问"JBoss AS7 Development"论坛的wiki,或者发给jboss development邮件列表[email protected].
AS7 当前还处于"Beta"状态,所以用户不应该期望所有的功能像已经发布的AS5 AS6一样的稳定,同样应该了解从一个alpha版本升级到另外版本可能会有重大的改变。
AS7 可以从 jboss.org download page下载. 因为还只是预览版,安装过程只需要解压即可。
我们鼓励用户从 AS 7 的源码库取出源代码并且自行编译,这很快并且不会有任何麻烦,只要在你的操作系统上装有git(分布式的版本管理工具),设置git也非常简单。关于如何取出以及编译AS 7 源码可以参考Hacking On JBoss AS 7 wiki page。
一旦你下载了分发包并解压缩,你需要判断你要让AS 7工作在 "domain mode" 还是 "standalone mode",为了理解这两个选项的意义,可以参考下面的 "Domain Mode vs. Standalone Mode"章节。
如果你要工作在 domain mode, 打开字符终端并且 cd 到解压的 bin 目录,然后运行 "domain"启动脚本。
Linux/Unix:
$ cd bin
$ ./domain.sh
如果是Windows:
> cd bin
> domain.bat
这会在你的系统中启动5个进程:3个JBoss AS Server的实例;1个Domain Controller(Domain控制器)进程,这个进程用来集中控制所有属于这个"domain"的server;和一个轻量的Process Controller,负责管理其他的4个进程并监听它们的生命周期。
如果你想工作在 "standalone mode",打开字符终端并且 cd 到解压的 bin 目录,然后运行 "standalone"启动脚本。
Linux/Unix:
$ cd bin
$ ./standalone.sh
如果是Windows:
> cd bin
> standalone.bat
这会在你的系统中启动一个进程, 一个单个的 JBoss AS server 的实例。
一个正在运行的 standalone server 实例可以通过以下方法来停止:
$ cd bin
$ ./jboss-admin.sh --connect command=:shutdown
"--connect" 默认会连接 localhost 的 9999端口。如果你的server使用的不是默认端口或者没有绑定到localhost地址,你就需要为 --connect指定 host 和 port,像下面这样:
$ ./jboss-admin.sh --connect controller=<IP>:<port> command=:shutdown
<IP>是指这个Server绑定的IP地址,<port>是管理端口.(配置在 standalone.xml中)
如果你是取出了AS 7的源码,会有好几个demos,在源码的 demos 模块下,下面会详细讲到。
AS 7一个重要的特性是,能够从单个的控制点管理多个 AS 的实例。这样的一组Server作为一个 "domain"的成员,由Domain Controller进程统一管理。Domain可以跨越多个物理或虚拟主机,一台机器上的所有 AS 实例由 Host Controller 进程负责控制。Host Controller和 Domain Controller 进行交互来控制该机器上的 AS 进程,并且协助Domain Controller对它们进行管理。
当你将JBoss AS启动为 "domain mode"(通过domain.sh或者domain.bat),你实际上启动了一个 Domain Controller,一个 Host Controller以及通常至少一个 AS 实例。
关于如何运行'domian mode' 的更多的内容,可以访问以下的大约20分钟的在线视频(分成了两段):
http://www.youtube.com/watch?v=phV3QiKQf2E
http://www.youtube.com/watch?v=gCeQ2KIO0qc
许多用户案例中,并不需要domain mode下的集中化的管理能力,对于这些情况,AS能够运行在 "standalone mode",这种模式下,每一个 AS 实例运行在独立的进程,和AS 3,4,5 和 6一样。Standalone 的Server实例可以通过 standalone.sh 或者 standalone.bat 脚本来运行。
如果运行了不止一个 standalone 实例并且需要管理多台服务器,那么就需要用户自行来协调管理这多台服务器。
一个 server 实例不能在 domain mode 和 standalone mode之间进行转换,例如,你不能运行 domain.sh,停止domain,然后运行 standalone.sh,并且希望和运行domain mode 时有任何关联。两种 mode 的配置文件是分开的。在未来的发布中,我们也许会包含某个工具来简化将一个服务的配置文件从domain mode 转换成 standalone mode的工作。
什么用户案例适合使用Domain Model,而哪些又更适合Standalone Mode呢?Domain mode用于统一协调管理多个服务器,通过JBoss AS提供的中心控制点,能够管理多台服务器,并具有丰富的功能以维持所有服务器配置文件的一致性以及将对配置文件的修改(包括部署的应用)统一应用到所有的服务器中。
理解Domain Mode和 Standalone Mode只是与如何管理你的服务器有关这一点很重要,并不会影响响应最终用户请求的能力。这个差别会在高可用集群到来时特别重要。当前的AS 7 beta1版本并不支持 HA 功能,然而有必要理解一点HA 功能在今后的版本被添加之后,Domain Mode 和 Standalone Mode 就会有些功能的交叉。也就是说,可以从HA集群配置成一群以Standalone Mode运行的服务器。总之,Domain 和 Standalone Mode决定服务器如何被管理,而不是它们能提供的功能。
那么,我们给出结论:
AS 7发布文件中包含以下的目录:
bin -- 启动脚本的所在地
docs -- license文件, 文档, schemas, 范例, 等等. 这个目录下的内容会随着开发而不断增加。
modules -- AS 7基于模块classloading架构,Server使用的各种模块被放置在这里。一般而言,最终用户不应该对这里的内容做任何修改。
domain -- 放置与 Domain Mode相关的内容。配置文件,部署的内容,用户在运行Domain Mode时进程写一些文件的地方,更多的细节参考后面的章节。
standalone -- 放置与 Standalone Mode相关的内容。配置文件,部署的内容,用户在运行StandaloneMode时进程写一些文件的地方,更多的细节参考后面的章节。
以下是仅与domain mode相关的目录内容.
configuration -- Domain、Host Controller以及跑在这个安装上的所有Servers的配置文件。如果我们已经做得足够好,这些配置文件是最终用户唯一需要修改的配置文件(除了用户自己部署的应用的描述文件)。更多关于其中的文件的内容,下面会讲到。
content -- 一个给Host Controller的内部工作空间,用于存储部署的内容。这个目录不应该被最终用户操作。
log -- 用于Process Controller和Host Controller写日志文件的目录。
servers -- 每一个AS实例用于写的空间。每一个AS实例都有自己的子目录,在第一次启动的时候会创建该目录。在一个Server的子目录下,会包含以下子目录:
data -- Server用于写需要在重启是回复的数据。
log -- Server的日志文件
temp -- Server用于写临时文件的目录
仅与使用standalone mode 相关。
configuration -- 运行Standalone Server是的配置文件。如果我们已经做得足够好,这些配置文件是最终用户唯一需要修改的配置文件(除了用户自己部署的应用的描述文件)。更多关于其中的文件的内容,下面会讲到。
data -- Server存储的信息,为了重启在重启时恢复数据。
deployments --如果希望Server在运行时能自动检查和部署,可以把要部署的文件放在该目录下。Server management API暴露了其它的方法来将部署文件,使用API是更好的部署方法。然后我们意识到,在AS 7开发的早期阶段,围绕deployment API的工具还不完善,很多用户愿意使用deployment directory来部署文件。注意:"domain mode" 不支持基于文件系统扫描来部署文件。
log --Server的日志文件
tmp -- Server存储临时文件的地方
位于 domain/configuration 目录.
domain.xml -- domain的主要配置文件,包括各种给AS instance 的 "profile" 配置文件。一个 profile配置包括各种子系统(subsystem)的配置(比如: embedded JBoss Web instance 是一个子系统,JBoss TS transaction manager 是一个 subsystem, 等等)。包括 子系统要打开的socket group的定义,以及"server groups"的定义,对于一个profile,会映射一组socket定义以及0到多个deployment。每一个单独的Server会被映射(在 host.xml中,下面会讲到)到一个server group;Sever group的配置最大可能的定义了单个server的配置。
一个 domain.xml 文件必须位于安装目录的 domain/configuration 下,如果不运行 domain controller,不需要有这个文件;比如:仅仅配置了了 Host Controller用于连接 remote Domain Controller时,此时 domain.xml 会被忽略。
用户可以看一下 AS 7 configuration schema, 从 <domain> 元素开始,来学习更多关于 Domain Contoller的内容。
host.xml -- Host Controller的配置文件。每一个安装必须有host.xml文件,包含了 Host Controller的配置信息,主要有:
用户可以看一下 AS 7 configuration schema, 从 <host> 元素开始,来学习更多关于 Host Contoller的内容。
logging.properties -- 包含Host Controller和 Process Controller的日志配置。也定义每个AS instance初始启动的日志配置配置。一旦Server启动到这个配置生效,启动日志配置会被domain.xml中日志配置所覆盖。
位于 standalone/configuration 目录.
standalone.xml -- AS instance的主要配置文件。除此之外,包含了AS instance 运行的"profile"的配置。一个 profile配置包括各种子系统(subsystem)的配置(比如: embedded JBoss Web instance 是一个子系统,JBoss TS transaction manager 是一个 subsystem, 等等)。也包括subsystem可能打开的socket的定义。
用户可以看一下 AS 7 configuration schema, 从 <server> 元素开始,来学习更多关于 standalone AS instance的内容。
logging.properties -- 包含了启动时初始化的日志配置信息。在Server启动过程进行到standalone.xml中的日志配置信息可用时,启动日志配置会被standalone.xml文件中的日志配置覆盖。
有一些通用的配置概念对于 Domain Mode 和 Standalone Mode 均适用:
一个 extension 是一个扩展了Server核心功能的模块。AS core是非常简单和轻量的,大多数与用户相关的功能通过扩展来提供。一个扩展打包成一个模块放置在 modules 目录下。用户如果要激活一个特定的扩展,就在domain.xml或者standalone.xml文件中包含<extension/>标签并指定扩展名。
<extensions>
...
<extension module="org.jboss.as.transactions"/>
<extension module="org.jboss.as.web" />
<extension module="org.jboss.as.webservices" />
<extension module="org.jboss.as.weld" />
</extensions>
是指文件系统路径的一个逻辑名称。domain.xml,host.xml 和 standalone.xml 配置文件都有一个段落来申明路径。配置中的其它段落则可以通过逻辑名称来引用,而不必指定详细的全路径(在不同的机器上可能不一样)。比如:logging子系统配置中包含了对"jboss.server.log.dir"路径的引用,用来指向服务器的"log"目录。
<file relative-to="jboss.server.log.dir" path="server.log"/>
AS自动提供了一些标准的路径,用户不需要在配置文件中配置它们:
用户可以在配置文件中增加<path/>标签和定义自己的路径,并可以覆盖除上面前天个路径之外的所有路径。
<path name="example" path="example" relative-to="jboss.server.data.dir"/>
详细内容可以参考 XSD.
在domain.xml中,<path/>除了 name 属性之外不需要其它的属性,也就是不需要任何关于实际文件系统路径的信息:
<path name="x"/>
这个配置项的意思是,"有一个名称为'x'的路径,在domain.xml可以被引用,而'x'的指向的实际的文件系统的路径由每一个主机的 host.xml配置文件给出。" 如果使用这种方法,在每台主机的 host.xml中就必须有一个path标签来制定其真实的文件系统路径:
<path name="x" path="/var/x" />
是为 network interface/IP address/host name 定义逻辑名,用于绑定sockets。domain.xml,host.xml和 standalone.xml的配置都包含了一个段落来申明接口。其它的段落则可以使用逻辑名称来引用,而不用指定完整的全名称(不同的机器可能不一样)。
一个接口配置包含接口的逻辑名称以及用户解析物理地址的标准信息。标准是两种类型中的热和一个:一个element用于指定该接口需要被绑定到一个通配符地址,或者接口或地址需要匹配的一个包含了一个或多个特征的列表。
<interface name="global">
<!-- Use the wildcard address -->
<any-address/>
</interface>
<interface name="external">
<nic name="eth0"/>
</interface>
<interface name="default">
<!-- Match any interface/address on the right subnet if it's
up, supports multicast and isn't point-to-point -->
<subnet-match value="192.168.0.0/16"/>
<up/>
<multicast/>
<not>
<point-to-point/>
</not>
</interface>
<interface name="loopback">
<inet-address value="127.0.0.1"/>
</interface>
关于各种标准选项的详细信息,请查看 XSD。
domain.xml中的<interface/>标签不需要包含除name属性外的任何属性;也就是它不需要指定这个名称关联的具体IP地址信息:
<interface name="internal"/>
这个配置是说,"有一个名称为'internal'的接口,公domain.xml其它部分引用。'internal'实际对应的IP地址由每一台主机的host.xml配置文件来指定。" 如果使用该方法,在每台主机的host.xml中,必须要有一个interface元素来指定获取IP地址的标准:
<interface name="internal">
<nic name="eth1"/>
</interface>
socket binding用户给socket命名。
domain.xml和standalone.xml都包含了一个段落用于申明socket binding。其它的段落则可以通过逻辑名称来引用,而不是使用详细的全名(不同的主机可能不一样)。
一个 socket binding 包含了以下信息:
Socket 绑定配配置被放置在<socket-binding-group/>元素里。这个元素包括一个default-interface属性;如果没有指定interface,这个interface将会作为默认的interface使用。
domain.xml, host.xml and standalone.xml,中有很多地方可以设置系统属性。standalone.xml中的值在server启动过程中解析。domain.xml和host.xml中的值在在servers加载的时候解析。
domain.xml和standalone.xml中最有意义的配置部分是一个(standalone.xml中)或者多个(domain.xml)"profiles"。profile一组命名的subsystem配置。subsystem是使用extension添加到core server上的功能("Extensions"章节已经讲到)。比如:一个subsystem提供了servlet处理能力;一个subsystem提供EJB容器;一个subsystem提供了JTA,等等。一个profile是一个subsystem的列表,以及每一个subsystem的详细配置。一个包含了大量subsystem的profile意味着这个sever拥有更多的功能。一个只有少量subsystem的profile将拥有较少的功能,但同时也更轻量。
在domain.xml和standalone中,一个单独的profile配置的内容看起来大致上应该是一样的。唯一的不同是,standalone.xml中只会有一个profile元素(用于运行该server),而domain.xml可以有多个profile,每一个都可以映射到一个或者多个server组。domain.xml中的profile元素还支持<includes profile="another_profile"/>标签,允许通过重用简单的profile来构造复杂的profile。
除了上面描述的通用配置概念之外,下面的概念是特定于运行standalone mode的AS 实例。
standalone.xml中的 <server/> 根元素有一个 name 属性。如果设置了,这个值就是这个server的名称。如果没有设置,默认的值为java.net.InetAddress.getLocalHost().getHostName()。在运行环境中,建议用户为每一个server定义一个唯一的名字。server name 对于server中所有运行的service是可见的。
上面讲到,domain.xml支持非完整描述的patch(使用真实的文件系统路径)和接口(提供一个标准去检测ip 地址),在standalone.xml 中,这是不支持的。
standalone.xml中,只支持一个<socket-binding-group/>元素。
standalone.xml中,<socket-binding-group/>元素可以包含一个port-offset属性。这个属性的值会加上socket配置的port值。设置port-offset为一个非0的值,可以让多个AS instance使用同样socket binding和interface配置运行在一台机器上,而不会有端口的冲突。
domain.xml中的<socket-binding-group/>没有 port-offset属性;参考下面的 "Domain Mode Configuration Concepts"章节有关于相似配置的内容。
上面提到,在standalone.xml中只能有一个profile元素。
standalone.xml包含了一节用于列出在这个server上需要部署的内容(deployment content)。Deployment content 既可以通过AS's management APIs上传,也可以通过配置一个 deployment scanner service 并且放置内容到servcie扫描的目录中(比如:deployments/ 目录)。
每一个deployment元素包含了以下信息:
除了上面描述通用配置概念之外,下面的概念特定于domain mode下的 AS 实例。
Domain configuration被分成两部分:一组configuration元素,定义domain中所有host的配置(存储在作为Domain Controller的主机的domain.xml文件中),以及一组configuration元素配置每个host的不同部分(存储在每台主机的host.xml文件中)。大多数配置应该来自于domain.xml;host.xml仅仅为了定义在不同的host中必需不同的那部分(比如:IP地址,文件系统路径,以及最重要的server的名称)。
每一个主机的 Host Controller负责加载host.xml文件中配置信息。为了做到这点,Host Controller从Domain Controller中得到作用于整个domain的配置的副本,提取出对于这个Server的配置部分(比如:运行server的profile),并应用特定于该主机的信息(比如:用于命名interface的IP地址),然后创建一个特别于该server的配置。Host Controller 然后启动 server 进程并且提供给它配置信息。如果配置信息使用 xml 格式描述,看起来就会和 standalone.xml文件一样 -- Host Controller 本质上就是从相关的 domain.xml 和 host.xml 内容中,综合整理出一个 standalone.xml 。
上面提到,domain.xml 可以包含多个 profiles。domain不同的server可以运行不同profile。
上面讨论了,domain.xml 中的path 和 interface 元素可以不包含任何东西,而仅仅是它们的name,这种情况下,host.xml将负责提供path和interface的详细信息。
Domain Controller 维护了一个 deploy content 的库,在domain的server中可以使用它。
domain.xml文件包含了一节,用户列出domain中可用的deploy content。Deployment content 使用 AS 的 Management APIs 上传。
每一个deployment元素包含了下面的信息:
The Domain Controller maintains a repository of deployment content that is available for use in the servers in the domain.
The domain.xml file includes a section listing the deployment content available for use in the domain. Deployment content is made available for use by uploading it using the AS's management APIs.
Each deployment element includes the following information:
注意:在这个domain-level中列出的 deployment 并不意味着会实际部署到任何Server中。仅简单的说明domain已经知道这个内容,并是可用的。Deployment只有在映射到 Server groups 的时候才会部署到server中去(下面会讲到)。
包括上面"General Configuration Concepts"一节中描述通用配置概念,domain.xml中最重要的元素是Server Groups的定义。每一个AS instance都是一个 server group 的成员。(即使一个group只有一个server,这个server仍然是group的一员)。Domain management system 负责确保一个server group中的所有 server 使用相同的配置。它们被配置使用相同的profile并且有相同的 deployment content。
Domain可以有多个 server group。
下面是一个server group的定义范例:
<server-group name="main-server-group" profile="default">
<socket-binding-group ref="standard-sockets"/>
<deployments>
<deployment name="foo.war_v1" runtime-name="foo.war" hash="ABCDEFG1234567890ABC"/>
<deployment name="bar.ear" runtime-name="bar.ear" hash="1234567890ABCDEFG123"/>
</deployments>
</server-group>
一个 server-group 配置必须包含下面的属性:
另外,有以下可选的元素:
在 domain.xml 中申明但没有完整定义的 path 和 interface,需要在 host.xml 中完整指定。因为 filesystem paths and IP addresses 在不同 host 上不一样,所以需要的详细信息在每一个 host.xml 中都需要提供。
System property 可以在 host.xml 最上级元素中申明。这里申明的属性会在host上的server启动时被设置。
Host.xml可以包含一个或多个 JVM 配置。配置包括一些详细信息,不如:JVM二进制文件的所在路径, 内存大写,环境变量,等等。 单独的server 配置可以通过名字引用这些 JVM Configuration 中的某一个,Host Controller 会使用该 configuration 去启动 server。
注意:domain.xml 中的 server-group 元素以及单个的 server 元素(下面会讲到)也可以定义JVM configuration。如果在多个地方配置,这些元素会被合并,server 元素会优先于 server-group 元素,也优先于host-level 的 JVM 配置。
Host Controller 用于支持远程管理的connector 配置。 TODO
配置 Host Controller 如何查找及联系 Domain Controller:
<domain-controller>
<!-- Remote domain controller configuration with a host and port -->
<remote host="192.168.100.1" port="9999"/>
</domain-controller>
TODO details
如果这个 host 是 Domain Controller,则会是如下的定义:
<domain-controller>
<local/>
</domain-controller>
host.xml中最重要的配置项是列出 host 要启动的 server。每一个server有自己的元素来定义:
<servers>
<server name="server-one" group="main-server-group">
<!-- server-one inherits the default socket-group declared in the server-group --> <jvm name="default" /> </server> <server name="server-two" group="main-server-group" start="true"> <!-- server-two avoids port conflicts by incrementing the ports in the default socket-group declared in the server-group --> <socket-binding-group ref="standard-sockets" port-offset="150"/> <jvm name="default"> <heap size="64m" max-size="256m"/> </jvm> </server> <server name="server-three" group="other-server-group" start="false"> <!-- server-three avoids port conflicts by incrementing the ports in the default socket-group declared in the server-group -->
<socket-binding-group ref="standard-sockets" port-offset="250"/>
</server>
</servers>
每一个server元素必须包含下面的属性:
另外,server原书有以下可选的元素:
AS 7 仍在活跃的开发中,还没有实现在 AS 5 和 6 中所有的功能。下面简要AS7中可用的 subsystem,列出的项目也可能没有完全完成。
Checkout出来的源码包含一个 "demos" 模块,它包含了一些可以通过 maven 运行的演示程序。 从 /demos 目录下进行编译会打印如下的使用信息来解释如何运行 demos:
usage:
[echo] To run an example:
[echo] 1) In a separate console window,start either a standalone JBoss AS instance or a JBoss AS domain
[echo] 2) Run mvn package -Dexample=<example.name> where "exammple.name is the name of the example
[echo]
[echo] Valid example names to run against a standalone JBoss AS instance are
[echo] sar - deploys mbeans packaged in a sar
[echo] managedbean - deploys a managed bean
[echo] serviceloader - deploys a serviceloader style service
[echo] messaging - deploys HornetQ native sender and receiver
[echo] jms - deploys HornetQ JMS sender and receiver
[echo] jms.client - Uses HornetQ JMS API from the client
[echo] rar - deploys a resource adapter
[echo] ds - deploys a test bean for data sources
[echo] war - deploys a simple servlet and connects to it
[echo] client.messaging - creates a HornetQ core queue using the management API
[echo] client.jms - creates a JMS queue using the management API
[echo] web.connector - creates and removes a jboss web connector
[echo]
[echo] Valid example names to run against a JBoss AS domain are
[echo] domain.configs - reads the domain config and any available host controller configs
[echo] domain.ds - deploys deploys a test bean for data sources
[echo] domain.messaging - deploys HornetQ native sender and receiver
[echo] domain.rar - deploys deploys a resource adapter
[echo] domain.servers - shows domain, host controller and server configs, starts/stops servers
关于demos主要的知识点,可以通过阅读代码来了解如何通过使用 AS 的 Management API 部署内容 和/或 调整运行中的server的配置信息。要了解一个 example 程序如何工作,可以看一下对应的demos/src/main/java/org/jboss/as/demos/<example.name>/runner.ExampleRunner.java 文件。