管理和配置指南
适用于红帽 JBoss 企业版应用程序平台 6
Red Hat Customer Content Services
摘要
第 1 章 介绍
1.1. 关于 Red Hat JBoss 企业版应用程序平台 6
1.2. JBoss EAP 6 的功能
表 1.1. 6.3.0 版本的功能
功能 | 描述 |
---|---|
Java 认证 | 认证了 Java EE 6 的 Full 和 Web 配置集。 |
受管域 |
|
管理控制台和管理 CLI | 新的域或独立服务器管理界面。您不再需要编辑 XML 配置文件了。管理 CLI 也包括可以用脚本完成和管理任务自动化的批模式。 |
简化的目录格式 | modules 目录现在包括了所有的应用服务器模块。公用的和服务器专有的 lib 目录已被抛弃。domain 和 standalone 目录包含了域和独立部署的 artifact 和配置文件。 |
模块化的类加载机制 | 模块将根据需要来加载和卸载。这将提高性能和增强安全性、以及更快的启动和重启速度。 |
流线型的数据源管理 | 数据库驱动可以像其他服务一样部署。此外,数据源可以在管理控制台和管理 CLI 里直接创建和管理。 |
资源使用更少的且效率更高。 | JBoss EAP 6 使用了更少的系统资源并比以前的版本更高效率地利用资源。JBoss EAP 6 的启动与停止也比 JBoss EAP 5 快。 |
1.3. 关于 JBoss EAP 6 操作模式
1.4. 关于独立服务器
1.5. 关于受管域
domain.sh
或 domain.bat
脚本的物理或虚拟主机。我们配置主机控制器将域管理任务委托给域控制器。

图 1.1. 受管域的图形表示形式
1.6. 关于域控制器
- 维护域的集中管理策略。
- 确保所有的主机控制器都意识到其当前的内容。
- 协助主机控制器以确保所有运行的 JBoss EAP 6 实例都按照这个策略进行配置。
domain/configuration/domain.xml
文件里,它位于域控制器的主机文件系统上解压的 JBoss EAP 6 安装目录里。
domain.xml
必须位于作为域控制器运行的主机控制器的 domain/configuration/
目录里。这个文件对于不是作为域控制器的主机控制器上的安装来说并不是强制的,虽然 domain.xml
文件的出现也没有害处。
domain.xml
文件包含不同配置集的配置,它们可都用于运行在域里的服务器实例。配置集的配置包含组成配置集的不同子系统的详细配置。域配置也包含对套接字组和服务器组的定义。
1.7. 关于域控制器发现和失效切换
<domain-controller> <remote security-realm="ManagementRealm"> <discovery-options> <static-discovery name="primary" host="172.16.81.100" port="9999"/> <static-discovery name="backup" host="172.16.81.101" port="9999"/> </discovery-options> </remote> </domain-controller>
- 名称
- 这个域控制器发现选项的名称
- 主机
- 远程域控制器的主机名称。
- 重点
- 远程域控制器的端口。
--backup
选项启动的主机控制器将被提升为域控制器。
注意
--backup
选项启动主机控制器将导致控制器维护域配置的一个本地拷贝。如果主机控制器被重设为域控制器,这个配置将被使用。
过程 1.1. 将主机控制器提升为域控制器
- 确保原来的域控制器已停止。
- 使用管理 CLI 连接至将成为新域控制器的主机控制器。
- 执行下列命令来将主机控制器配置为新的域控制器。
/host=HOST_NAME:write-local-domain-controller
- 执行下列命令来重新加载主机控制器。
reload --host=HOST_NAME
1.8. 关于主机控制器
domain.sh
或 domain.bat
脚本在主机上运行时启动主机控制器。
domain/configuration/host.xml
文件读取配置。host.xml
包含下列特定主机专有的配置信息:
- 要从这个安装位置运行的 JBoss EAP 6 实例名称
- 任何下列的配置:
- 主机控制器如何联系域控制器来注册自身并访问域配置。
- 如何找到并联系远程的域控制器。
- 主机控制器将充当域控制器
- 这些条目是本地物理安装专有的配置。例如,
domain.xml
里声明的命名接口定义可以映射到domain.xml
里实际的主机专有的 IP 地址。domain.xml
里的绝对路径名可以映射到 host.xml 里实际的文件系统路径。
1.9. 关于服务器组
<server-group name="main-server-group" profile="default"> <socket-binding-group ref="standard-sockets"/> <deployments> <deployment name="foo.war_v1" runtime-name="foo.war"/> <deployment name="bar.ear" runtime-name="bar.ear"/> </deployments> </server-group>
- name:服务器组的名称
- profile:服务器组的配置集的名称
- socket-binding-group:用于组里服务器的默认套接字绑定组的名称。在
host.xml
里可以对每个服务器覆盖这个名称。然而,对于每个服务器组这都是一个强制性的元素,如果缺失,域将无法启动。
- deployments:部署在组里服务器上的部署内容
- system-properties:组里服务器上设置的系统属性
- jvm:组里所有服务器的默认 JVM。主机控制器将这些设置和
host.xml
里的其他配置进行合并以生成启动服务器的 JVM 的设置。
1.10. 关于 JBoss EAP 6 配置集
第 2 章 应用服务器管理
2.1. 启动和停止 JBoss EAP 6
2.1.1. 启动 JBoss EAP 6
2.1.2. 将 JBoss EAP 6 作为独立服务器启动
本节涵盖将 JBoss EAP 6 作为独立服务器启动的步骤
过程 2.1. 将平台服务作为独立服务器启动
对于红帽企业版 Linux。
运行命令:EAP_HOME/bin/standalone.sh
对于 Microsoft Windows 服务器。
运行命令:EAP_HOME\bin\standalone.bat
可选:指定其他的参数。
要查看传入启动脚本的其他参数,请使用-h
参数。
JBoss EAP 6 服务器实例已启动。
2.1.3. 将 JBoss EAP 6 作为受管域启动
域控制器必须在域里任何服务器组里的任何从服务器之前启动。先在域控制器上,然后在每个关联的主机控制器和其他主机上使用这个过程。
过程 2.2. 将平台服务作为受管域启动
对于红帽企业版 Linux。
运行命令:EAP_HOME/bin/domain.sh
对于 Microsoft Windows 服务器。
运行:EAP_HOME\bin\domain.bat
可选:传递其他参数到启动脚本里。
请使用-h
参数来获取传递到启动脚本里的参数列表。
JBoss EAP 6 受管域实例已启动。
2.1.4. 配置受管域里主机的名字
运行在受管域里的每个主机都必须有一个唯一的名称。为了简化管理并允许在多个主机上使用相同的主机配置文件,服务器将使用下列次序来确定主机名。
host.xml
配置文件里的host
元素的name
属性,如果指定了的话。jboss.host.name
系统属性的值。jboss.qualified.host.name
系统属性里最后一个句点(".")后的值,如果没有句点则是整个值。- 基于 POSIX 的操作系统的
HOSTNAME
环境变量或 Microsoft Windows 的COMPUTERNAME
环境变量里的句点(“.”)后的值,如果没有句点则是整个值。
过程 2.3. 使用系统属性配置主机名
- 打开主机配置文件,如
host.xml
。 - 找到
host
元素,例如:<host name="master" xmlns="urn:jboss:domain:1.6">
- 如果有这些内容,请删除
属性声明。name
="HOST_NAME"host
元素应该类似于下面的例子。<host xmlns="urn:jboss:domain:1.6">
- 用
-Djboss.host.name
参数启动服务器,例如:-Djboss.host.name=HOST_NAME
过程 2.4. 使用专有名称配置主机名
- 用下列语法启动 JBoss EAP 从主机:
例如:bin/domain.sh --host-config=HOST_FILE_NAME
bin/domain.sh --host-config=host-slave01.xml
- 启动管理 CLI。
- 使用下列语法来替代主机名:
例如:/host=EXISTING_HOST_NAME:write-attribute(name="name",value=UNIQUE_HOST_NAME)
你应该看到下面的结果。/host=master:write-attribute(name="name",value="host-slave01")
"outcome" => "success"
这修改了host-slave01.xml
文件里的host name
属性:<host name="host-slave01" xmlns="urn:jboss:domain:1.6">
- 您必须重新加载使用旧的主机名的服务器配置以完成这个过程。
例如:reload --host=EXISTING_HOST_NAME
reload --host=master
2.1.5. 在两台主机上创建受管域
注意
- IP1 = IP address of the domain controller (Machine 1)
- IP2 = IP address of the host (Machine 2)
过程 2.5. 在两台主机上创建受管域
在 Machine 1 上
- 使用 add-user.sh 脚本添加管理用户,例如
slave01
,让主机可以通过域控制器进行验证。请注意add-user
输出里的SECRET_VALUE
。 - 用
host-master.xml
配置文件启动域,它为指定的域控制器进行了预先配置。 - 用
-bmanagement=$IP1
使域控制器对于其他主机可见。[$JBOSS_HOME/bin]$ ./domain.sh --host-config=host-master.xml -bmanagement=$IP1
在 Machine 2 上
- 用用户凭证更新
$JBOSS_HOME/domain/configuration/host-slave.xml
文件。<?xml version='1.0' encoding='UTF-8'?> <host xmlns="urn:jboss:domain:1.6" name="slave01"> <!-- add user name here --> <management> <security-realms> <security-realm name="ManagementRealm"> <server-identities> <secret value="$SECRET_VALUE" /> <!-- use secret value from add-user.sh output--> </server-identities> ...
- 启动主机。
[$JBOSS_HOME/bin]$ ./domain.sh --host-config=host-slave.xml -Djboss.domain.master.address=$IP1 -b=$IP2
现在我们可以管理域了。
通过 CLI:[$JBOSS_HOME/bin]$ ./jboss-cli.sh -c --controller=$IP1
通过 Web 控制台:http://$IP1:9990
访问服务器的索引页:http://$IP2:8080/ http://$IP2:8230/
2.1.6. 用替代配置启动 JBoss EAP 6
必须具备的条件
- 在使用替代配置文件之前,请将 default 配置作为模版使用。对于受管域,配置文件必须位于
EAP_HOME/domain/configuration/
目录。对于独立服务器,配置文件必须位于EAP_HOME/standalone/configuration/
目录。
注意
EAP_HOME/docs/examples/configs/
目录里包含了几个配置示例。请用这些例子来启用额外的功能,如群集或 Transactions XTS API。
过程 2.6. 用其他配置启动实例
独立服务器
对于独立服务器,请将配置文件的名称作为--server-config
参数的选项。配置文件必须位于EAP_HOME/standalone/configuration/
目录里,而且您需要指定相对这个目录的路径。例 2.1. 在红帽企业版 Linux 里对独立服务器使用其他的配置文件
[user@host bin]$
./standalone.sh --server-config=
standalone-alternate.xml
这个例子使用了EAP_HOME/standalone/configuration/standalone-alternate.xml
配置文件。例 2.2. 在 Microsoft Windows 服务器里对独立服务器使用其他的配置文件
C:\EAP_HOME\bin>
standalone.bat --server-config=
standalone-alternate.xml
这个例子使用了EAP_HOME\standalone\configuration\standalone-alternative.xml
配置文件。受管域
对于受管域,请为--domain-config
参数提供配置文件的名称。这个文件必须位于EAP_HOME/domain/configuration/
目录,且您需要指定相对这个目录的路径。例 2.3. 在红帽企业版 Linux 里对受管域使用其他的配置文件
[user@host bin]$
./domain.sh --domain-config=
domain-alternate.xml
这个例子使用了EAP_HOME/domain/configuration/domain-alternate.xml
配置文件。例 2.4. 在 Microsoft Windows 服务器里对受管域使用其他的配置文件
C:\EAP_HOME\bin>
domain.bat --domain-config=
domain-alternate.xml
这个例子使用了EAP_HOME\domain\configuration\domain-alternate.xml
配置文件。
使用替代配置运行了 JBoss EAP 6。
2.1.7. 停止 JBoss EAP 6
注意
过程 2.7. 停止 JBoss EAP 6 的实例
停止从命令提示交互式启动的实例。
在 JBoss EAP 6 运行的终端窗口里按 Ctrl-C。
过程 2.8. 停止作为操作系统服务启动的实例。
根据操作系统使用下列步骤。Red Hat Enterprise Linux
对于红帽企业版 Linux,如果您已经编写了服务脚本,请使用它的stop
功能。这需要编写到脚本里。然后您可以使用service scriptname stop
,这里的 scriptname 是脚本名称。Microsoft Windows Server
在 Microsoft Windows 里,使用net service
命令,或者通过控制面板里的 Services 小程序来停止服务。
过程 2.9. 停止在后台运行的示例(红帽企业版 Linux)
- 获取进程的 ID(PID):
如果只有一个实例在运行(独立模式)
下面的命令都会返回单个 JBoss EAP 6 实例的 PID:pidof java
jps
(jps
命令将返回两个进程的 ID:jboss-modules.jar
及 jps 自身。请使用jboss-modules.jar
的 ID 来停止 EAP 实例)
如果有多个 EAP 实例在运行(域模式)
有多个 EAP 实例运行时要确定正确的进程需要使用更复杂的命令。jps
命令可以使用冗余模式来提供 java 进程的更多信息。下面是确定不同 EAP 进程的冗余jps
命令的摘要,包括 PID 和角色:$ jps -v 12155 jboss-modules.jar -D[Server:server-one] -XX:PermSize=256m -XX:MaxPermSize=256m -Xms1303m ... 12196 jboss-modules.jar -D[Server:server-two] -XX:PermSize=256m -XX:MaxPermSize=256m -Xms1303m ... 12096 jboss-modules.jar -D[Host Controller] -Xms64m -Xmx512m -XX:MaxPermSize=256m ... 11872 Main -Xms128m -Xmx750m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=96m -XX:+UseCodeCacheFlushing ... 11248 jboss-modules.jar -D[Standalone] -XX:+UseCompressedOops -verbose:gc ... 12892 Jps ... 12080 jboss-modules.jar -D[Process Controller] -Xms64m -Xmx512m -XX:MaxPermSize=256m ...
ps aux
命令也可以用来返回多个 EAP 实例的信息。下面是确定不同 EAP 进程的冗余ps aux
命令的摘要,包括 PID 和角色:$ ps aux | grep java username 12080 0.1 0.9 3606588 36772 pts/0 Sl+ 10:09 0:01 /path/to/java -D[Process Controller] -server -Xms128m -Xmx128m -XX:MaxPermSize=256m ... username 12096 1.0 4.1 3741304 158452 pts/0 Sl+ 10:09 0:13 /path/to/java -D[Host Controller] -Xms128m -Xmx128m -XX:MaxPermSize=256m ... username 12155 1.7 8.9 4741800 344224 pts/0 Sl+ 10:09 0:22 /path/to/java -D[Server:server-one] -XX:PermSize=256m -XX:MaxPermSize=256m -Xms1000m -Xmx1000m -server - ... username 12196 1.8 9.4 4739612 364436 pts/0 Sl+ 10:09 0:22 /path/to/java -D[Server:server-two] -XX:PermSize=256m -XX:MaxPermSize=256m -Xms1000m -Xmx1000m -server ...
在上面的例子里,Process Controller 进程是停止以停止整个域的进程。grep
工具可以和这些命令一起使用来确定 Process Controller:jps -v | grep "Process Controller"
ps aux | grep "Process Controller"
- 运行
kill PID
给进程发送TERM
信号,这里的 PID 是上面的命令确定的进程号。
每个方法都可以干净地关闭 JBoss EAP 6,所以不会丢失数据。
2.1.8. 服务器启动参数和开关参考
standalone.xml
、domain.xml
和 host.xml
配置文件里定义的其他配置启动。这可能包括用其他套接字绑定集或次级配置启动服务器。在启动时使用 help 开关可以参考这些可用的参数列表。
例 2.5.
-h
或 --help
开关。下表解释了 help 开关的结果。
[localhost bin]$ standalone.sh -h
[localhost bin]$ domain.sh -h
表 2.1. 运行时开关和参数表
参数或开关 | 模式 | 描述 |
---|---|---|
--admin-only | 独立服务器模式 | 设置服务器的运行类型为 ADMIN_ONLY 。这将导致它打开管理接口并接受管理请求,但不会启动其他运行时服务或接受最终用户请求。 |
--admin-only | 域模式 | 设置主机控制器的运行类型为 ADMIN_ONLY 。这将导致它打开管理接口并接受管理请求,但不会启动其他运行时服务;如果这个主机控制器不是域的主控制器,将接受来自从主机控制器的转入连接。 |
-b <value> , -b=<value> | 独立服务器模式,域模式 | 设置系统属性 jboss.bind.address 为给定的值。 |
-b<interface>=<value> | 独立服务器模式,域模式 | 设置系统属性 jboss.bind.address.<interface> 为给定的值。 |
--backup | 域模式 | 保持持久性域配置的备份,即使这个主机不是域控制器。 |
-c <config> , -c=<config> | 独立服务器模式 | 要使用的服务器配置文件的名称。默认是 standalone.xml 。 |
-c <config> , -c=<config> | 域模式 | 要使用的服务器配置文件的名称。默认是 domain.xml 。 |
--cached-dc | 域模式 | 如果主机不是域控制器且在引导时无法联系域控制器,它将使用域配置的本地缓存备份。 |
--debug [<port>] | 独立服务器模式 | 激活调试模式并用可选参数来指定端口。只有启动脚本支持才可以使用。 |
-D<name>[=<value>] | 独立服务器模式,域模式 | 设置系统属性。 |
--domain-config=<config> | 域模式 | 要使用的服务器配置文件的名称。默认是 domain.xml 。 |
-h , --help | 独立服务器模式,域模式 | 显示帮助信息并退出。 |
--host-config=<config> | 域模式 | 要使用的主机配置文件的名称。默认是 host.xml 。 |
--interprocess-hc-address=<address> | 域模式 | 主机控制器侦听的与进程控制器通讯的地址。 |
--interprocess-hc-port=<port> | 域模式 | 主机控制器侦听的与进程控制器通讯的端口。 |
--master-address=<address> | 域模式 | 设置系统属性 jboss.domain.master.address 为给定的值。在默认的从主机控制器配置里,它被用来配置和主主机控制器进行原生通讯的地址。 |
--master-port=<port> | 域模式 | 设置系统属性 jboss.domain.master.port 为给定的值。在默认的从主机控制器配置里,它被用来配置和主主机控制器进行原生通讯的端口。 |
--read-only-server-config=<config> | 独立服务器模式 | 要使用的服务器配置文件的名称。它和 --server-config 和 -c 不同,因为原始文件不会被覆盖。 |
--read-only-domain-config=<config> | 域模式 | 要使用的域配置文件的名称。这和 --domain-config 和 -c 参数不同,因为初始文件不会被覆盖。 |
--read-only-host-config=<config> | 域模式 | 要使用的主机配置文件的名称。这和 --host-config 参数不同,因为初始文件不会被覆盖。 |
-P <url> , -P=<url> , --properties=<url> | 独立服务器模式,域模式 | 从给定的 URL 加载系统属性。 |
--pc-address=<address> | 域模式 | 进程控制器与其控制的进程通讯时侦听的地址。 |
--pc-port=<port> | 域模式 | 进程控制器与其控制的进程通讯时侦听的端口。 |
-S<name>[=<value>] | 独立服务器模式 | 设置安全属性。 |
--server-config=<config> | 独立服务器模式 | 要使用的服务器配置文件的名称。默认是 standalone.xml 。 |
-u <value> , -u=<value> | 独立服务器模式,域模式 | 设置系统属性 jboss.default.multicast.address 为给定的值。 |
-v , -V , --version | 独立服务器模式,域模式 | 显示应用服务器的版本并退出。 |
2.2. 启动和停止服务器
2.2.1. 用管理 CLI 启动或停止服务器。
预备条件
独立服务器实例可以用命令行脚本启动,并用 shutdown
命令在管理 CLI 里关闭。如果你再次需要这个实例,请按照 第 2.1.2 节 “将 JBoss EAP 6 作为独立服务器启动” 里描述的过程再次启动。
例 2.6. 通过管理 CLI 停止独立服务器实例
[standalone@localhost:9999 /] shutdown
如果你在运行受管域,管理控制台会允许你选择启动或关闭域里的特定服务器。这包括整个域里的服务器组,以及主机上的特定服务器实例。
例 2.7. 通过管理 CLI 停止受管域里的服务器主机
shutdown
命令用于关闭声明的受管域主机。这个例子通过在调用关闭操作前声明实例名来关闭名为 master 的服务器主机。请用 tab 健来协助完成字符串并开放可见变量如可用的主机值。
[domain@localhost:9999 /] /host=master:shutdown
例 2.8. 通过管理 CLI 停止受管域里的服务器组
start
和 stop
操作前声明组启动了一个名为 main-server-group
的默认服务器组。请用 tab 健来协助完成字符串并开放可见变量如可用的主机组名的值。
[domain@localhost:9999 /] /server-group=main-server-group:start-servers
[domain@localhost:9999 /] /server-group=main-server-group:stop-servers
例 2.9. 通过管理 CLI 停止受管域里的服务器实例
start
和 stop
操作前声明主机启动和停止了 master
主机上的一个名为 server-one
的服务器实例。请用 tab 健来协助完成字符串并开放可见变量如可用的主机和服务器配置的值。
[domain@localhost:9999 /] /host=master/server-config=server-one:start
[domain@localhost:9999 /] /host=master/server-config=server-one:stop
2.2.2. 使用管理控制台启动服务器
过程 2.10. 启动受管域里的服务器
- 在控制器的顶部选择 Runtime 标签页。展开 Server 菜单并选择 Overview。
- 从 Server Instances 列表里,选择要启动的服务器。正在运行的服务器会用一个复选框标记表示。在这个列表的实例上悬停会在服务器细节下面以蓝色字体显示选项。
- 要启动这个实例,请在 Start Server 文本出现时点击它。然后会出现一个确认对话框,点击 Confirm 按钮启动服务器。
所选的服务器已启动并在运行中。
2.2.3. 使用管理控制台停止服务器
过程 2.11. 使用管理控制台停止受管域里的服务器
- 在控制器的顶部选择 Runtime 标签页。展开 Domain 菜单并选择 Overview。
- 可用的 Server Instances 列表将显示在 Hosts, groups and server instances 表里。正在运行的服务器用一个复选框标记表示。
- 将鼠标在所选的服务器上悬停。点击出现的 Stop Server 文本。然后将出现一个确认对话框。
- 点击 Confirm 按钮来停止服务器。
所选的服务器已停止。
2.3. 文件系统路径
2.3.1. 文件系统路径
domain.xml
、host.xml
和 standalone.xml
配置都包含一个可以声明路径的部分。然后配置的其他部分可以通过逻辑名称引用这些路径,避免了为每个实例声明绝对路径。这有利于配置和管理,因为它允许将专有的主机配置解析为同一的逻辑名称。
jboss.server.log.dir
路径的引用,它指向服务器的 log
目录。
例 2.10. 日志目录的相对路路径示例
<file relative-to="jboss.server.log.dir" path="server.log"/>
表 2.2. 标准路径
值 | 描述 |
---|---|
jboss.home.dir | JBoss EAP 6 的根目录。 |
user.home | 用户的主目录。 |
user.dir | 用户的当前工作目录。 |
java.home | Java 的安装路径 |
jboss.server.base.dir | 单独服务器实例的根目录。 |
jboss.server.data.dir | 服务器用于持久性数据文件存储的目录。 |
jboss.server.config.dir | 包含服务器配置的目录。 |
jboss.server.log.dir | 服务器用于日志文件存储的目录。 |
jboss.server.temp.dir | 服务器用于临时文件存储的目录。 |
jboss.controller.temp.dir | 主机控制器用于临时文件存储的目录。 |
如果您运行的是独立服务器,您可以以下面两种方式覆盖 jboss.server.base.dir
、jboss.server.log.dir
或 jboss.server.config.dir
路径。
- 您可以在启动服务器时传入命令行参数。例如:
bin/standalone.sh -Djboss.server.log.dir=/var/log
- 您可以修改服务器配置文件里的
JAVA_OPTS
变量。请打开EAP_HOME/bin/standalone.conf
文件并在结尾添加下列内容:JAVA_OPTS="$JAVA_OPTS Djboss.server.log.dir=/var/log"
您也可以创建自定义的路径。例如,您可以定义用于日志的相对路径:
my.relative.path=/var/log
然后您可以让日志处理程序使用 my.relative.path
。
2.4. 配置文件
2.4.1. 关于 JBoss EAP 6 配置文件
表 2.3. 配置文件的位置
服务器模式 | 位置 | 目的 |
---|---|---|
domain.xml | EAP_HOME/domain/configuration/domain.xml | 这是受管域的主配置文件。只有域主控制器可以读取这个文件。对于其他成员,它可以被删除。 |
host.xml | EAP_HOME/domain/configuration/host.xml | 这个文件包含了受管域里的物理主机专有的配置细节,如网络接口、套接字绑定、主机名称和其他主机专有的细节。host.xml 文件包含了 host-master.xml 和 host-slave.xml 的全部功能,正如下面所描述的。这个文件没有出现在独立服务器里。 |
host-master.xml | EAP_HOME/domain/configuration/host-master.xml | 这个文件包含了作为受管域里主服务器运行所需的配置细节。这个文件不会出现在独立服务器里。 |
host-slave.xml | EAP_HOME/domain/configuration/host-slave.xml | 这个文件包含了作为受管域里从服务器运行所需的配置细节。这个文件不会出现在独立服务器里。 |
standalone.xml | EAP_HOME/standalone/configuration/standalone.xml | 这是用于独立服务器的默认配置文件。它包含了独立服务器的所有信息,如子系统、网络、部署、套接字绑定和其他配置细节。当您启动独立服务器时会自动使用这个配置。 |
standalone-full.xml | EAP_HOME/standalone/configuration/standalone-full.xml | 这是用于独立服务器的配置示例。它包含对每种可能的子系统的支持,除了那些要求高可用性的子系统。要使用它,请停止您的服务器并用下列命令重启:EAP_HOME/bin/standalone.sh -c standalone-full.xml 。 |
standalone-ha.xml | EAP_HOME/standalone/configuration/standalone-ha.xml | 这个配置文件示例启用所有的默认子系统并为独立服务器添加了 mod_cluster 和 JGroups 子系统,所以它可以参与高可用性或负载平衡群集。这个文件不适用于受管域。要使用这个配置,请停止您的服务器并用下列命令重启:EAP_HOME/bin/standalone.sh -c standalone-ha.xml 。 |
standalone-full-ha.xml | EAP_HOME/standalone/configuration/standalone-full-ha.xml | 这是用于独立服务器的配置示例。它包含对每种可能的子系统的支持,包含那些要求高可用性的子系统。要使用它,请停止您的服务器并用下列命令重启:EAP_HOME/bin/standalone.sh -c standalone-full-ha.xml 。 |
2.4.2. 基于描述符的属性替换
standalone.xml
或 domain.xml
全局性地启用:
<subsystem xmlns="urn:jboss:domain:ee:1.1"> <spec-descriptor-property-replacement> true </spec-descriptor-property-replacement> <jboss-descriptor-property-replacement> true </jboss-descriptor-property-replacement> </subsystem>
ejb-jar.xml
和 persistence.xml
里的 Java EE 描述符可以被替换。这默认是禁用的。
jboss-ejb3.xml
jboss-app.xml
jboss-web.xml
*-jms.xml
*-ds.xml
@ActivationConfigProperty(propertyName = "connectionParameters", propertyValue = "host=192.168.1.1;port=5445")
connectionParameters
可以通过命令行来指定:
./standalone.sh -DconnectionParameters='host=10.10.64.1;port=5445'
<activation-config> <activation-config-property> <activation-config-property-name> connectionParameters </activation-config-property-name> <activation-config-property-value> ${jms.connection.parameters:'host=10.10.64.1;port=5445'} </activation-config-property-value> </activation-config-property> </activation-config>
${jms.connection.parameters:'host=10.10.64.1;port=5445'}
允许命令行提供的参数来覆盖连接参数,而且提供了默认值。
2.4.3. 启用/禁用基于描述符的属性替换
jboss-as-ee_1_1.xsd
引入了对描述符属性替换的有限控制。本节内容涵盖了配置基于描述符的属性替换所需的步骤。
- 如果设置为
true
,属性替换将被启用。 - 如果设置为
false
,属性替换将被禁用。
过程 2.12. jboss-descriptor-property-replacement
jboss-descriptor-property-replacement
用于在下列描述符里启用或禁用属性替换:
jboss-ejb3.xml
jboss-app.xml
jboss-web.xml
*-jms.xml
*-ds.xml
jboss-descriptor-property-replacement
的默认值是 true
。
- 在管理 CLI 里,运行下列命令来确定
jboss-descriptor-property-replacement
的值:/subsystem=ee:read-attribute(name="jboss-descriptor-property-replacement")
- 运行下列命令来配置其行为:
/subsystem=ee:write-attribute(name="jboss-descriptor-property-replacement",value=VALUE)
过程 2.13. spec-descriptor-property-replacement
spec-descriptor-property-replacement
用于在下列描述符里启用或禁用属性替换:
ejb-jar.xml
persistence.xml
spec-descriptor-property-replacement
的默认值是 false
。
- 在管理 CLI 里,运行下列命令来确认
spec-descriptor-property-replacement
的值:/subsystem=ee:read-attribute(name="spec-descriptor-property-replacement")
- 运行下列命令来配置其行为:
/subsystem=ee:write-attribute(name="spec-descriptor-property-replacement",value=VALUE)
成功地配置了基于描述符的属性替换标记。
2.4.4. 配置文件历史
standalone.xml
、domain.xml
和 host.xml
。虽然您可以直接编辑这些文件,我们推荐用可用的管理操作(如管理 CLI 或管理控制台)来配置应用服务器模型。
2.4.5. 用以前的配置启动服务器
standalone.xml
里的以前的配置启动应用服务器。相同的概念也适用于受管域的 domain.xml
和 host.xml
。
- 确定您要启动的备份版本。这个例子将回调成功引导后第一次修改前的服务器模型的实例。
EAP_HOME/standalone/configuration/standalone_xml_history/current/standalone.v1.xml
- 传入
jboss.server.config.dir
下的相对文件名,用备份模型的配置启动服务器。EAP_HOME/bin/standalone.sh --server-config=standalone_xml_history/current/standalone.v1.xml
应用服务器用所选的配置启动了。
注意
EAP_HOME/domain/configuration/domain_xml_history/current/domain.v1.xml
jboss.domain.config.dir
下的相对文件名,用备份模型的配置启动服务器。
EAP_HOME/bin/domain.sh --domain-config=domain_xml_history/current/domain.v1.xml
2.4.6. 使用管理 CLI 保存配置快照
配置快照是当前服务器配置的时间点拷贝。管理员可以保存和加载这些拷贝。
standalone.xml
配置文件,但相同的过程适用于 domain.xml
和 host.xml
配置文件。
必须具备的条件
过程 2.14. 创建配置快照并保存
保存快照
运行take-snapshot
操作来创建当前服务器配置的快照。[standalone@localhost:9999 /] :take-snapshot { "outcome" => "success", "result" => "/home/User/EAP_HOME/standalone/configuration/standalone_xml_history/snapshot/20110630-172258657standalone.xml"
保存了当前服务器配置的快照。
2.4.7. 使用管理 CLI 加载配置快照
standalone.xml
配置文件,但相同的过程适用于 domain.xml
和 host.xml
配置文件。
过程 2.15. 加载配置快照
- 确定要加载的快照。这个例子将从 snapshot 目录回调下列文件。下面是快照文件的默认路径。
EAP_HOME/standalone/configuration/standalone_xml_history/snapshot/20110812-191301472standalone.xml
快照是用相对路径表达的,上面的例子可以像下面这样编写。jboss.server.config.dir/standalone_xml_history/snapshot/20110812-191301472standalone.xml
- 通过传入文件名用所选的配置快照启动服务器。
EAP_HOME/bin/standalone.sh --server-config=standalone_xml_history/snapshot/20110913-164449522standalone.xml
服务器用加载快照里选择的配置进行了重启。
2.4.8. 使用管理 CLI 删除配置快照
必须具备的条件
standalone.xml
配置文件,但相同的过程适用于 domain.xml
和 host.xml
配置文件。
过程 2.16. 删除专有的快照
- 确定要删除的快照。这个例子将从 snapshot 目录删除下列文件。
EAP_HOME/standalone/configuration/standalone_xml_history/snapshot/20110630-165714239standalone.xml
- 如下例所示,指定快照的名称,运行
:delete-snapshot
命令来删除专有的快照。[standalone@localhost:9999 /]
:delete-snapshot(name="20110630-165714239standalone.xml")
{"outcome" => "success"}
快照已被删除。
过程 2.17. 删除所有快照
- 如下例所示,运行
:delete-snapshot(name="all")
命令删除所有的快照。[standalone@localhost:9999 /]
:delete-snapshot(name="all")
{"outcome" => "success"}
所有快照都已被删除。
2.4.9. 使用管理 CLI 列出所有的配置快照
必须具备的条件
standalone.xml
配置文件,但相同的过程适用于 domain.xml
和 host.xml
配置文件。
过程 2.18. 列出所有的配置快照
列出所有快照
用:list-snapshots
命令列出所有保存的快照。[standalone@localhost:9999 /]
:list-snapshots
{ "outcome" => "success", "result" => { "directory" => "/home/hostname/EAP_HOME/standalone/configuration/standalone_xml_history/snapshot", "names" => [ "20110818-133719699standalone.xml", "20110809-141225039standalone.xml", "20110802-152010683standalone.xml", "20110808-161118457standalone.xml", "20110912-151949212standalone.xml", "20110804-162951670standalone.xml" ] } }
快照被列出。
第 3 章 管理接口
3.1. 管理应用服务器
3.2. 管理应用程序编程接口(API)
JBoss EAP 6 提供了不同的方法来配置和管理服务器,您可以使用 web 界面、命令行客户或一系列的 XML 配置文件。我们推荐的方法是编辑配置文件,包括管理控制台和管理 CLI。对配置文件的编辑总会在不同视图里同步并最终持久化到 XML 文件里。请注意,在服务器实例运行时对 XML 配置文件的修改将被服务器模型所覆盖。
管理控制台是用 Google Web Toolkit (GWT) 构建的 Web 界面的例子。管理控制台和服务器通过 HTTP 管理接口进行通讯。HTTP API 端点是依赖于 HTTP 协议来集成管理层的管理客户的入口点。它使用 JSON 编码协议和 de-typed RPC 风格的 API 来描述和执行管理操作。 HTTP API 用于 Web 控制台,它也为许多其他客户提供了集成能力。
例 3.1. HTTP API 配置文件示例
<management-interfaces> [...] <http-interface security-realm="ManagementRealm"> <socket-binding http="management-http"/> </http-interface> </management-interfaces>
表 3.1. 访问管理控制台的 URL
URL | 描述 |
---|---|
http://localhost:9990/console | 访问本地主机的管理控制台,它控制受管域的配置。 |
http://hostname:9990/console | 远程访问管理控制台的主机命名和受管域配置。 |
http://hostname:9990/management | 和管理控制台运行在相同端口上的 HTTP 管理 API,它显示原始属性和开放给 API 的值。 |
管理 CLI 就是 Native API 工具的一个例子。这个管理工具可用于受管域及独立服务器,它允许用户连接到域控制器或独立服务器实例并执行 de-typed 管理模型里可用的管理操作。
例 3.2. Native API 配置文件示例
<management-interfaces> <native-interface security-realm="ManagementRealm"> <socket-binding native="management-native"/> </native-interface> [...] </management-interfaces>
3.3. 关于管理控制台和管理 CLI
3.4. 管理控制台
3.4.1. 管理控制台
3.4.2. 登录到管理控制台
预备条件
- 您必须创建一个管理型用户,请参考:第 4.1.1 节 “为管理接口添加用户”。JBoss EAP 6 服务器必须正在运行。
过程 3.1. 登录到管理控制台
进入管理控制台开始页面
通过 Web 浏览器进入管理控制台。默认的位置是 http://localhost:9990/console/App.html,其中的 9990 是预定义为管理控制台的套接绑定的。登录到管理控制台
输入您之前创建的帐号的用户名和密码来登录到管理控制台屏幕。图 3.1. 管理控制台的登录屏幕
登录后,下面的管理控制台登录页面将出现:http://localhost:9990/console/App.html#home
3.4.3. 修改管理控制台的语言
所支持的语言
- 德语 (de)
- 简体中文 (zh-Hans)
- 巴西葡萄牙语 (pt-BR)
- 法语 (fr)
- 西班牙语 (es)
- 日语 (ja)
过程 3.2. 修改基于 Web 的管理控制台的语言
登录到管理控制台。
登录到基于 Web 的管理控制台。打开 Setting 对话框。
屏幕的右下角是 Settings 标签。点击它打开管理控制台的设置对话框。选择语言。
在 Locale 选择框里选择语言。然点选择 Save。确认框通知您需要重载应用程序。点击 Confirm。刷新 Web 浏览器以使用新的区域设置。
3.4.4. EAP 控制台里的数据分析
Google Analytics 是一个提供网站的完整使用统计的免费 Web 分析服务。它提供网站的访问者的关键数据,如访问次数、页面查看、每次访问的页面数及平均逗留时间等。Google Analytics 也提供网站的知名度和使用情况。
JBoss EAP 6.3 为用户提供启用/禁用管理控制台里 Google Analytics 的选项。Google Analytics 可帮助 Red Hat EAP 团队理解用户如何使用控制台以及哪些部分是用户最在意的。这些信息反过来可帮助 EAP 团队调整控制台的设计、功能、内容以适应用户的需求。
3.4.5. 启用/禁用 EAP 控制台里的 Google Analytics
- 登录到管理控制台
- 点击控制台右下角的 Settings 按钮。
图 3.2. 管理控制台的登录屏幕
- 选择
Settings
窗口上的 Enable Usage Data Collection 复选框并点击 Save 按钮。重载应用程序以激活新的设置。图 3.3. 设置窗口(启用使用数据收集)
Settings
窗口上的 Disable Usage Data Collection 选项,然后点击 Save 。

图 3.4. 设置窗口(禁用使用数据收集)
注意
3.4.6. 使用管理控制台配置服务器
过程 3.3. 配置服务器
- 从控制台的顶部选择 Domain 标签页。可用的服务器将显示在表格里。
- 从 Available Server Configurations 表格里选择服务器实例。
- 在所选的服务器细节上方点击 Edit 按钮。
- 修改配置属性。
- 点击Save完成。
服务器配置被修改,且会在服务器重启时生效。
3.4.7. 在管理控制台里添加部署
前提条件
- 从控制台的顶部选择 Runtime 标签页。
- 对于独立服务器,展开 Server 菜单项并选择 Manage Deployments。对于受管域,展开 Domain 菜单项并选择 Manage Deployments。Manage Deployments 面板将显示。
- 点击 Content Repository 标签页上的 Add 按钮。Create Deployment 对话框将会出现。
- 在这个对话框里,点击 Browse 按钮。选择您要部署和上传的文件。然后点击 Next 按钮进行。
- 验证出现在 Create Deployments 对话框里的部署名和 runtime 名称。验证名称后请点击 Save 按钮上传文件。
所选的内容被上传至服务器且可以进行部署了。
3.4.8. 在管理控制台里创建新的服务器
过程 3.4. 创建新的服务器配置
进入管理控制台里的 Server Configurations 页面
从控制台的顶部选择 Domain 标签页。创建新的配置
- 点击 Available Server Configuration 表上方的 Add 按钮。
- 在 Create Server Configuration 对话框里输入基本服务器设置。
- 点击 保存 按钮保存新的服务器配置。
新服务器被创建且出现在 Server Configurations 列表里。
3.4.9. 用管理控制台修改默认的日志级别
过程 3.5. 编辑日志级别
进入管理控制台的 Logging 面板
- 对于受管域,选择控制台顶部的 Configuration 标签页,然后从控制台左侧的下拉菜单里选择相关的配置集。
- 对于受管域或独立服务器,展开控制台左侧菜单的 Core 菜单并点击 Logging 条目。
- 点击控制台顶部的 Log Categories 标签页。
编辑 logger 细节
编辑 Log Categories 表格里条目的细节。- 在 Log Categories 表格里选择条目,然后点击下面的 Details 部分里的 Edit 按钮。
- 通过 Log Level 下拉框选择类别的日志级别。完成后点击 Save 按钮。
相关类别的日志级别已被更新。
3.4.10. 在管理控制台里创建新的服务器组
必须具备的条件
过程 3.6. 配置和添加新的服务器组
进入 Server Groups 视图
从控制台的顶部选择 Domain 标签页。- 展开左侧菜单里的 Server 标签。选择 Server Groups。
添加服务器组
点击 Add 按钮来添加新的服务器组。配置服务器组
- 输入服务器组的名称。
- 选择服务器组的配置集。
- 选择服务器组的套接字绑定。
- 点击 Save 按钮来保存新的组。
新创建的服务器组出现在管理控制台里了。
3.5. 管理 CLI
3.5.1. 关于管理命令行接口(Command Line Interface,CLI)
3.5.2. 启动管理 CLI
过程 3.7. 在 Linux 或 Windows 里启动 CLI
在 Linux 里启动 CLI
运行EAP_HOME/bin/jboss-cli.sh
命令:$ EAP_HOME/bin/jboss-cli.sh
在 Windows 里启动 CLI
运行EAP_HOME\bin\jboss-cli.bat
命令:C:\>EAP_HOME\bin\jboss-cli.bat
3.5.3. 退出管理 CLI
前提条件
过程 3.8. 退出管理 CLI
运行
quit
命令在管理 CLI 里,输入quit
命令:[domain@localhost:9999 /]
quit
3.5.4. 用管理 CLI 连接受管服务器实例
前提条件
过程 3.9. 连接至受管服务器实例
运行
connect
命令在管理 CLI 里,输入connect
命令:[disconnected /]
connect
Connected to domain controller at localhost:9999- 或者,在 Linux 系统里启动管理 CLI 时使用
--connect
参数来连接至受管服务器:$
EAP_HOME/bin/jboss-cli.sh --connect
--connect
参数可以用来指定服务器的主机和端口。要连接至地址192.168.0.1
和端口9999
,请使用下列命令:$
EAP_HOME/bin/jboss-cli.sh --connect --controller=192.168.0.1:9999
3.5.5. 用管理 CLI 获取帮助
管理 CLI 有带有普通和上下文敏感选项的帮助对话框。对于独立服务器和域控制器,依赖于操作上下文的 help 命令都要求已建立的连接。除非连接已建立,否则这些命令不会出现在列表里。
必须具备的条件
过程 3.10. 普通和上下文敏感帮助
运行
help
命令在管理 CLI 里,输入help
命令:[standalone@localhost:9999 /]
help
获取上下文敏感帮助
在管理 CLI 里,输入help -commands
扩展命令:[standalone@localhost:9999 /]
help --commands
- 关于特定命令的更多详情,请运行
help
并以'--help'
为参数。[standalone@localhost:9999 /]
deploy --help
CLI 帮助信息被显示。
3.5.6. 以批模式使用管理 CLI
批处理允许大量的操作请求按序列进行分组,然后作为一个单元来执行。如果序列里的任何以一个操作请求执行失败,整个操作组都将回滚。
过程 3.11. 批处理模式命令和操作
启用批处理模式
用batch
命令启用批处理模式。[standalone@localhost:9999 /] batch [standalone@localhost:9999 / #]
提示里的井号(#
)指明了批处理模式添加操作请求到批处理命令里
在批处理模式下,照常输入操作请求。操作请求将按输入的顺序添加到批处理命令里。关于格式化操作请求的详情,请参考 第 3.5.8 节 “在管理 CLI 里使用操作和命令”。运行批处理命令
一旦输入了整个操作请求序列,请用run-batch
运行这个批处理命令。[standalone@localhost:9999 / #] run-batch The batch executed successfully.
关于可用于批处理的完整的命令列表,请参考 第 3.5.7 节 “CLI 批处理模式命令”。保存在外部文件里的批命令
频繁运行的批处理命令可以存储在外部文件里,通过将完整文件路径作为参数传入batch
或直接作为run-batch
命令的参数来执行。您可以用文本编辑器创建批处理命令文件。每个命令都必须单独一行且 CLI 应该可以访问它。下面的命令将加载myscript.txt
文件至批处理模式。这个文件里的所有命令都可以编辑或删除,您也可以插入新的命令。这个批处理会话里进行的修改不会持久化到myscript.txt
文件里。[standalone@localhost:9999 /] batch --file=myscript.txt
下面的命令将立即运行存储在文件myscript.txt
里的批命令[standalone@localhost:9999 /] run-batch --file=myscript.txt
输入的操作请求序列以批模式完成了。
3.5.7. CLI 批处理模式命令
表 3.2. CLI 批处理模式命令
命令名 | 描述 |
---|---|
list-batch | 当前批次里的命令和操作的列表。 |
edit-batch-line line-number edited-command | 通过行号和要编辑的命令来编辑当前批处理里的行。例如: edit-batch-line 2 data-source disable --name=ExampleDS 。 |
move-batch-line fromline toline | 指定您要移动的行号为第一个参数且新的位置为第二个参数来重新对批处理命令里的行进行排序。例如: move-batch-line 3 1 。 |
remove-batch-line linenumber | 删除指定行上的批处理命令。例如: remove-batch-line 3 。 |
holdback-batch [batchname] |
如果您突然想在 CLI 里执行批处理之外的命令,您可以使用这个命令推迟或存储当前的批处理命令。要返回已暂停批模式,只要在 CLI 命令行上再次输入
batch 就可以了。
如果在
holdback-batch 命令时您提供了 batchname,批命令将按照这个名称进行存储要返回命名的批次,请使用 batch batchname 。不使用 batchname 调用 batch 命令将启动新的(未命名)的批处理。系统里只能有一个未命名的暂停批命令。
要查看暂停批命令的列表,请使用
batch -l 命令。
|
discard-batch | 取消当前活动的批处理命令。 |
3.5.8. 在管理 CLI 里使用操作和命令
过程 3.12. 创建、配置和执行请求
构造操作请求
操作请求允许和管理模型的低层交互。它们提供一种可控的方式来编辑服务器配置。操作请求由三部分组成:- 地址,前缀为斜杠(
/
)。 - 操作名称,前缀为冒号(
:
)。 - 可选的参数,包含在括号(
()
)里。
确定地址
配置以有地址的资源层级树型出现。每个资源节点都提供了一系列不同的操作。地址指定哪些资源可以执行操作。地址使用下面的语法:/node-type=node-name
- node-type 是资源节点的类型。它映射配置 XML 文件里的元素名称。
- node-name 是资源节点的名称。它映射配置 XML 文件里的元素的
name
属性。 - 用斜杠(
/
)分隔资源树的每个级别。
要确定所需的地址,请参考 XML 配置文件。EAP_HOME/standalone/configuration/standalone.xml
文件保存独立服务器的配置信息,EAP_HOME/domain/configuration/domain.xml
和EAP_HOME/domain/configuration/host.xml
文件保存受管域的配置信息。例 3.3. 操作地址示例
要执行 Logging 子系统上的操作,请使用操作请求里的下列地址:/subsystem=logging
要执行 Java 数据源上的操作,请使用操作请求里的下列地址:/subsystem=datasources/data-source=java
确定操作
对于不同类型的资源节点,操作会有所不同。操作使用下面的语法::operation-name
- operation-name 是要请求的操作的名称。
在独立服务器上的任何资源地址上使用read-operation-names
操作来列出可用的操作。例 3.4. 可用的操作
要列出 Logging 子系统到所有可用的操作,在独立服务器里输入下列请求:[standalone@localhost:9999 /] /subsystem=logging:read-operation-names { "outcome" => "success", "result" => [ "add", "read-attribute", "read-children-names", "read-children-resources", "read-children-types", "read-operation-description", "read-operation-names", "read-resource", "read-resource-description", "remove", "undefine-attribute", "whoami", "write-attribute" ] }
确定任何参数
每个操作可能需要不同的参数。参数使用下面的语法:(parameter-name=parameter-value)
- parameter-name 是参数的名称。
- parameter-value 是参数的值。
- 多个参数用逗号隔开(
,
)。
要确定所需的参数,在资源节点上执行read-operation-description
命令,将操作名称作为参数传入。详情请参考 例 3.5 “确定操作的参数”。例 3.5. 确定操作的参数
要确定 logging 子系统上的read-children-types
操作的必需参数,请输入read-operation-description
命令:[standalone@localhost:9999 /] /subsystem=logging:read-operation-description(name=read-children-types) { "outcome" => "success", "result" => { "operation-name" => "read-children-types", "description" => "Gets the type names of all the children under the selected resource", "reply-properties" => { "type" => LIST, "description" => "The children types", "value-type" => STRING }, "read-only" => true } }
输入完整的操作请求
一旦确定了地址、操作和所有参数,请输入完整的操作请求。例 3.6. 操作请求示例
[standalone@localhost:9999 /]
/subsystem=web/connector=http:read-resource(recursive=true)
管理接口执行服务器配置里的操作请求。
3.5.9. 管理 CLI 配置选项
jboss-cli.xml
。它必须位于 $EAP_HOME/bin
或者系统属性 jboss.cli.config
指定的目录。
default-controller
- 如果不带参数执行
connect
命令时连接的控制器的配置。default-controller Parameters
host
- 控制器的主机名。默认值:
localhost
。 port
- 连接控制器的端口号码。默认值为 9999。
validate-operation-requests
- 指定在操作请求发往控制器执行前是否检验操作请求的参数列表。类型:Boolean;默认值:
true
。 history
- 这个元素包含命令和操作历史日志的配置。
history
参数enabled
- 指定是否启用
history
。类型:Boolean;默认值:true
。 - file-name
- 存储历史日志的文件的名称。默认值是:
.jboss-cli-history
。 - file-dir
- 存储历史日志的目录。默认值是:
$USER_HOME
。 - max-size
- 历史日志文件的最大大小。默认值为 500。
- resolve-parameter-values
- 是否在发送操作请求到控制器前解析指定为命令参数(或操作参数)的系统属性,或者让解析在服务器端进行。类型:Boolean;默认值:
false
。 - connection-timeout
- 用控制器建立连接所允许的时间。类型:Integer;默认值:5,000 秒。
- ssl
- 这个元素包含用于 SSL 的密钥和信任库的配置。
ssl
参数- vault
- 类型:
vaultType
- key-store
- 类型:String
- key-store-password
- 类型:String
- alias
- 类型:String
- key-password
- 类型:String
- trust-store
- 类型:String
- trust-store-password
- 类型:String
- modify-trust-store
- 如果设置为
false
,当接收到不承认的证书时 CLI 将提示用户并允许将它们存储在信任库。类型:Boolean;默认值:true
。
vaultType
如果既没有指定code
也没指定module
,默认的实现将被使用。如果指定了code
但没有指定module
,系统将在 Picketbox 模块里查找指定的类。如果module
和code
都指定了,系统将在 'module' 指定的模块里查找 'code' 指定的类。- code
- 类型:String
- module
- 类型:String
silent
- 指定信息和错误消息是否输出到终端。如果配置允许或者在命令行用 > 指定了输出目标,即使指定了
false
,消息仍会用 logger 进行记录。
3.5.10. 管理 CLI 命令参考
必须具备的条件
第 3.5.5 节 “用管理 CLI 获取帮助” 描述了如何访问管理 CLI 的帮助功能,包括有带有普通和上下文敏感选项的帮助对话框。对于独立服务器和域控制器,依赖于操作上下文的 help 命令都要求已建立的连接。除非连接已建立,否则这些命令不会出现在列表里。
表 3.3.
命令 | 描述 |
---|---|
batch | 通过创建新的批次、或者重新激活现有的暂停的批次来启动批模式。如果没有暂停的批命令,这个命令将启动新的批次。如果存在未命名的暂停的批命令,这个命令将重新激活它。如果存在有名称的暂停的批命令,将这个批次的名称作为参数来执行命令就可以激活。 |
cd | 根据参数修改当前的节点路径。当前的节点路径用于不包含地址部分的操作请求的地址。如某个操作请求包含了地址,所包含的地址将当作当前节点路径的相对地址。当前的节点路径可以以节点类型结尾。此时,执行指定节点名称的操作就足够了,例如 logging:read-resource。 |
clear | 清除屏幕。 |
command | 允许您添加、删除和列出现有的普通类型的命令。普通类型命令是分配专有节点类型的命令,它允许您执行该类型的实例的任何可用的操作。它也可以修改现有实例上类型开放的任何属性。 |
connect | 连接到指定主机和端口上的控制器。 |
connection-factory | 定义连接工厂。 |
data-source | 管理 datasource 子系统里的 JDBC 数据源配置。 |
deploy | 部署用文件路径指定的应用程序或启用资料库里现有的被禁用的应用程序。如果不带参数执行,这个命令将列出全部现有的部署。 |
help | 显示帮助信息。它可以用 --commands 参数为给定命令提供上下文敏感的内容。 |
history | 显示内存里的 CLI 命令历史以及启用/禁用历史扩展的状态。它可以按需要用参数来清除、禁用和启用历史扩展。 |
jms-queue | 在 messaging 子系统里定义一个 JMS 队列。 |
jms-topic | 在 messaging 子系统里定义一个 JMS 主题。 |
ls | 列出节点路径的内容。在默认情况下,终端窗口会用整屏以列显示结果。-l 参数将以每行一个名字显示结果。 |
pwd | 显示当前工作节点的完整节点路径。 |
quit | 终止命令行界面。 |
read-attribute | 根据参数显示受管资源属性的值和描述。 |
read-operation | 显示指定操作的描述,未指定则列出所有的操作。 |
undeploy | 以应用程序的名称为参数运行可以卸载应用程序。它也可以通过参数运行从资料库删除应用程序。如无参数运行则输出所有现有的部署。 |
version | 显示应用服务器版本和环境信息。 |
xa-data-source | 管理 datasource 子系统里的 JDBC XA 数据源配置。 |
3.5.11. 管理 CLI 操作参考
管理 CLI 里的操作可以用 第 3.6.5 节 “用管理 CLI 显示操作名称” 里描述的 read-operation-names
操作开放。这些操作描述可以用 第 3.6.4 节 “用管理 CLI 显示操作描述” 里描述的 read-operation-descriptions
操作来开放。
表 3.4. 管理 CLI 操作
操作名称 | 描述 |
---|---|
add-namespace | 在 namespaces 属性的表里添加命名空间前缀映射。 |
add-schema-location | 在 schema-locations 属性的表里添加模式位置 映射。 |
delete-snapshot | 从 snapshots 目录删除服务器配置的快照。 |
full-replace-deployment | 添加之前上传的部署内容到可用内容列表里,替换 runtime 里具有相同名称的现有内容,并从可用列表里删除替换的内容。进一步的信息请点击链接。 |
list-snapshots | 列出保存在 snapshots 目录里的服务器配置的快照。 |
read-attribute | 显示所选资源的属性的值。 |
read-children-names | 显示给定类型的资源下的所有子资源的名称。 |
read-children-resources | 显示给定类型的资源的所有子资源的信息。 |
read-children-types | 显示所选资源下的所有子资源的类型名称。 |
read-config-as-xml | 读取当前的配置并以 XML 格式显示。 |
read-operation-description | 显示给定资源上的操作的细节。 |
read-operation-names | 显示给定资源上的所有操作的名称。 |
read-resource | 显示模型资源的属性值以及任何子资源的基本或完整的信息。 |
read-resource-description | 显示资源属性的描述、子资源和操作的类型。 |
reload | 关闭所有服务并重启来重载服务器。 |
remove-namespace | 在 namespaces 属性的表里删除命名空间前缀映射。 |
remove-schema-location | 在 schema-locations 属性的表里删除模式位置 映射。 |
replace-deployment | 用新的内容替换 runtime 里的内容。新的内容必须已经上传到部署的内容资料库。 |
resolve-expression | 接受表达式或可以解析为表达式的字符串的操作,并根据本地系统属性和环境变量进行解析。 |
resolve-internet-address | 通过一系列接口解析标准找到本地主机上的 IP 地址,如果没有匹配的 IP 地址则运行失败。 |
server-set-restart-required | 让服务器进入需要重启的模式 |
shutdown | 通过调用 System.exit(0) 关闭服务器。 |
start-servers | 启动受管域里配置的且当前没有运行的所有服务器。 |
stop-servers | 停止当前运行在受管域里的所有服务器。 |
take-snapshot | 创建服务器配置的快照并保存在 snapshots 目录。 |
upload-deployment-bytes | 指定所包含的字节队列上的部署内容应该添加到部署内容资料库。请注意,这个操作没有指明内容应该部署至 runtime。 |
upload-deployment-stream | 指定所包含的输入流索引上可用的部署内容应该添加到部署内容资料库。请注意,这个操作没有指明内容应该部署到 runtime。 |
upload-deployment-url | 指定所包含的 URL 上可用的部署内容应该添加到部署内容资料库。请注意,这个操作没有指明内容应该部署至 runtime。 |
validate-address | 检验操作的地址。 |
write-attribute | 设置所选资源的属性的值。 |
3.6. 管理 CLI 操作
3.6.1. 用管理 CLI 显示资源属性
必须具备的条件
read-attribute
操作是一个用来读取选定属性的当前 runtime 值的全局操作。它可以用来只开放用户设置的值而忽略任何默认或未定义的值。请求属性包括下列参数。
请求属性
name
- 获取所选资源下的值的属性的名称。
include-defaults
- 布尔型参数,可以设置为
false
来限制操作结果,只显示用户设置的属性并忽略默认的值。
过程 3.13. 显示所选属性的当前 Runtime 值
运行
read-attribute
操作在管理 CLI 里,使用read-attribute
操作来显示资源属性的值。关于操作请求的更多细节,请参考 第 3.5.8 节 “在管理 CLI 里使用操作和命令”。[standalone@localhost:9999 /]
:read-attribute(name=name-of-attribute)
read-attribute
操作的优势是开放专有属性的当前 runtime 值的能力。用 read-resource
操作可获得类似的结果,但只能通过 include-runtime
请求属性,而且只作为该节点的所有可用资源的列表的一部分。read-attribute
操作用于细颗粒度的属性查询,如下例所示。
例 3.7. 运行 read-attribute
操作来开放公共的接口 IP。
read-attribute
来获取当前 runtime 里的确切的值。
[standalone@localhost:9999 /] /interface=public:read-attribute(name=resolved-address) { "outcome" => "success", "result" => "127.0.0.1" }
resolved-address
属性是一个 runtime 值,所以不会显示在标准的 read-resource
操作的结果里。
[standalone@localhost:9999 /] /interface=public:read-resource { "outcome" => "success", "result" => { "any" => undefined, "any-address" => undefined, "any-ipv4-address" => undefined, "any-ipv6-address" => undefined, "inet-address" => expression "${jboss.bind.address:127.0.0.1}", "link-local-address" => undefined, "loopback" => undefined, "loopback-address" => undefined, "multicast" => undefined, "name" => "public", "nic" => undefined, "nic-match" => undefined, "not" => undefined, "point-to-point" => undefined, "public-address" => undefined, "site-local-address" => undefined, "subnet-match" => undefined, "up" => undefined, "virtual" => undefined } }
resolved-address
和其他 runtime 值,您必须使用 include-runtime
请求属性。
[standalone@localhost:9999 /] /interface=public:read-resource(include-runtime=true) { "outcome" => "success", "result" => { "any" => undefined, "any-address" => undefined, "any-ipv4-address" => undefined, "any-ipv6-address" => undefined, "inet-address" => expression "${jboss.bind.address:127.0.0.1}", "link-local-address" => undefined, "loopback" => undefined, "loopback-address" => undefined, "multicast" => undefined, "name" => "public", "nic" => undefined, "nic-match" => undefined, "not" => undefined, "point-to-point" => undefined, "public-address" => undefined, "resolved-address" => "127.0.0.1", "site-local-address" => undefined, "subnet-match" => undefined, "up" => undefined, "virtual" => undefined } }
显示当前的 runtime 属性值。
3.6.2. 在管理 CLI 里显示活动用户
前提条件
whoami
操作是用于确定当前活动用户的全局操作。这个操作开放了用户名标识及它们分配的区。管理员可以用 whoami
操作来管理多个区上的多个用户帐号,或者跟踪具有多个终端会话和用户帐号的域实例上的活动用户。
过程 3.14. 在管理 CLI 里用 whoami
操作显示活动用户
运行
whoami
操作在管理 CLI 里,请用whoami
操作来显示活动的用户帐号。[standalone@localhost:9999 /]
:whoami
下面的例子使用了独立服务器实例里的whoami
操作来显示活动用户 username,以及它所分配的ManagementRealm
区。例 3.8. 在独立实例里使用
whoami
[standalone@localhost:9999 /]:whoami { "outcome" => "success", "result" => {"identity" => { "username" => "username", "realm" => "ManagementRealm" }} }
显示当前的活动用户帐号。
3.6.3. 在管理 CLI 里显示系统和服务器信息
前提条件
过程 3.15. 在管理 CLI 里显示系统和服务器信息
运行
version
命令在管理 CLI 里,输入version
命令:[domain@localhost:9999 /]
version
显示应用服务器版本和环境信息。
3.6.4. 用管理 CLI 显示操作描述
必须具备的条件
过程 3.16. 在管理 CLI 里执行命令
运行
read-operation-description
操作在管理 CLI 里,使用read-operation-description
来显示操作信息。这个操作要求键-值格式的其他参数以指定要显示的操作。关于操作请求的详情,请参考 第 3.5.8 节 “在管理 CLI 里使用操作和命令”。[standalone@localhost:9999 /]
:read-operation-description(name=name-of-operation)
例 3.9. 显示 list-snapshots 操作的描述
list-snapshots
操作的方法。
[standalone@localhost:9999 /] :read-operation-description(name=list-snapshots) { "outcome" => "success", "result" => { "operation-name" => "list-snapshots", "description" => "Lists the snapshots", "request-properties" => {}, "reply-properties" => { "type" => OBJECT, "value-type" => { "directory" => { "type" => STRING, "description" => "The directory where the snapshots are stored", "expressions-allowed" => false, "required" => true, "nillable" => false, "min-length" => 1L, "max-length" => 2147483647L }, "names" => { "type" => LIST, "description" => "The names of the snapshots within the snapshots directory", "expressions-allowed" => false, "required" => true, "nillable" => false, "value-type" => STRING } } }, "access-constraints" => {"sensitive" => {"snapshots" => {"type" => "core"}}}, "read-only" => false } }
显示所选操作的描述。
3.6.5. 用管理 CLI 显示操作名称
必须具备的条件
过程 3.17. 在管理 CLI 里执行命令
运行
read-operation-names
操作在管理 CLI 里,使用read-operation-names
来显示可用操作的名称。关于操作请求的详情,请参考 第 3.5.8 节 “在管理 CLI 里使用操作和命令”。[standalone@localhost:9999 /]
:read-operation-names
例 3.10. 用管理 CLI 显示操作名称
read-operation-names
操作的方法。
[standalone@localhost:9999 /]:read-operation-names
{
"outcome" => "success",
"result" => [
"add-namespace",
"add-schema-location",
"delete-snapshot",
"full-replace-deployment",
"list-snapshots",
"read-attribute",
"read-children-names",
"read-children-resources",
"read-children-types",
"read-config-as-xml",
"read-operation-description",
"read-operation-names",
"read-resource",
"read-resource-description",
"reload",
"remove-namespace",
"remove-schema-location",
"replace-deployment",
"resolve-expression",
"resolve-internet-address",
"server-set-restart-required",
"shutdown",
"take-snapshot",
"undefine-attribute",
"upload-deployment-bytes",
"upload-deployment-stream",
"upload-deployment-url",
"validate-address",
"validate-operation",
"whoami",
"write-attribute"
]
}
显示可用的操作名称。
3.6.6. 用管理 CLI 显示可用资源
必须具备的条件
read-resource
操作是用来读取资源值的全局操作。它可以用来开放当前节点或子节点额资源的基本或完整的信息,以及扩展或限制操作结果的作用域的请求属性。请求属性包含下列参数。
请求属性
recursive
- 是否递归地包含子资源的完整信息。
recursive-depth
- 应该包含子节点资源信息的深度。
proxies
- 是否在递归查询里包含远程资源。例如,包含域控制器查询里从主机控制器的主机级别资源。
include-runtime
- 是否在响应里包含 runtime 属性,如不是来自持久性配置的属性值。这个请求属性默认是 false。
include-defaults
- 这是一个 boolean 型的请求属性,它启用或禁用默认属性的读取。当设置为 false 时,只返回用户设置的属性,忽略了那些未定义的属性。
过程 3.18. 在管理 CLI 里执行命令
运行
read-resource
操作在管理 CLI 里,请用read-resource
操作来显示可用的资源。[standalone@localhost:9999 /]
:read-resource
下面的例子展示了在独立服务器里如何使用read-resource
操作来开放普通资源信息。结果类似于standalone.xml
配置文件,显示系统资源、扩展、接口和为服务器实例安装和配置的子系统。它们可以进一步进行直接查询。例 3.11. 在根级别使用
read-resource
操作[standalone@localhost:9999 /]:read-resource { "outcome" => "success", "result" => { "deployment" => undefined, "deployment-overlay" => undefined, "management-major-version" => 1, "management-micro-version" => 0, "management-minor-version" => 4, "name" => "longgrass", "namespaces" => [], "product-name" => "EAP", "product-version" => "6.3.0.GA", "release-codename" => "Janus", "release-version" => "7.2.0.Final-redhat-3", "schema-locations" => [], "system-property" => undefined, "core-service" => { "management" => undefined, "service-container" => undefined, "server-environment" => undefined, "platform-mbean" => undefined }, "extension" => { "org.jboss.as.clustering.infinispan" => undefined, "org.jboss.as.connector" => undefined, "org.jboss.as.deployment-scanner" => undefined, "org.jboss.as.ee" => undefined, "org.jboss.as.ejb3" => undefined, "org.jboss.as.jaxrs" => undefined, "org.jboss.as.jdr" => undefined, "org.jboss.as.jmx" => undefined, "org.jboss.as.jpa" => undefined, "org.jboss.as.jsf" => undefined, "org.jboss.as.logging" => undefined, "org.jboss.as.mail" => undefined, "org.jboss.as.naming" => undefined, "org.jboss.as.pojo" => undefined, "org.jboss.as.remoting" => undefined, "org.jboss.as.sar" => undefined, "org.jboss.as.security" => undefined, "org.jboss.as.threads" => undefined, "org.jboss.as.transactions" => undefined, "org.jboss.as.web" => undefined, "org.jboss.as.webservices" => undefined, "org.jboss.as.weld" => undefined }, "interface" => { "management" => undefined, "public" => undefined, "unsecure" => undefined }, "path" => { "jboss.server.temp.dir" => undefined, "user.home" => undefined, "jboss.server.base.dir" => undefined, "java.home" => undefined, "user.dir" => undefined, "jboss.server.data.dir" => undefined, "jboss.home.dir" => undefined, "jboss.server.log.dir" => undefined, "jboss.server.config.dir" => undefined, "jboss.controller.temp.dir" => undefined }, "socket-binding-group" => {"standard-sockets" => undefined}, "subsystem" => { "logging" => undefined, "datasources" => undefined, "deployment-scanner" => undefined, "ee" => undefined, "ejb3" => undefined, "infinispan" => undefined, "jaxrs" => undefined, "jca" => undefined, "jdr" => undefined, "jmx" => undefined, "jpa" => undefined, "jsf" => undefined, "mail" => undefined, "naming" => undefined, "pojo" => undefined, "remoting" => undefined, "resource-adapters" => undefined, "sar" => undefined, "security" => undefined, "threads" => undefined, "transactions" => undefined, "web" => undefined, "webservices" => undefined, "weld" => undefined } } }
针对子节点运行
read-resource
操作read-resource
操作可以查询根节点的子节点。操作的结构首先定义要开放的节点,然后附加这个操作来运行。[standalone@localhost:9999 /]
/subsystem=web/connector=http:read-resource
在下面的例子里,通过指引read-resource
操作到专有的 Web 子系统节点来开放 Web 子系统组件的专有资源信息。例 3.12. 开放根结点的子节点资源
[standalone@localhost:9999 /] /subsystem=web/connector=http:read-resource { "outcome" => "success", "result" => { "configuration" => undefined, "enable-lookups" => false, "enabled" => true, "executor" => undefined, "max-connections" => undefined, "max-post-size" => 2097152, "max-save-post-size" => 4096, "name" => "http", "protocol" => "HTTP/1.1", "proxy-name" => undefined, "proxy-port" => undefined, "redirect-port" => 443, "scheme" => "http", "secure" => false, "socket-binding" => "http", "ssl" => undefined, "virtual-server" => undefined } }
相同的结果可以用cd
命令进入子节点并直接运行read-resource
操作获得。例 3.13. 通过修改目录开放子节点资源
[standalone@localhost:9999 /] cd subsystem=web
[standalone@localhost:9999 subsystem=web] cd connector=http
[standalone@localhost:9999 connector=http] :read-resource { "outcome" => "success", "result" => { "configuration" => undefined, "enable-lookups" => false, "enabled" => true, "executor" => undefined, "max-connections" => undefined, "max-post-size" => 2097152, "max-save-post-size" => 4096, "name" => "http", "protocol" => "HTTP/1.1", "proxy-name" => undefined, "proxy-port" => undefined, "redirect-port" => 443, "scheme" => "http", "secure" => false, "socket-binding" => "http", "ssl" => undefined, "virtual-server" => undefined } }
使用 recursive 参数在结果里包含活动的属性值。
recursive 参数可以用来开放所有属性的值,包括非持久性的值、在启动时传入的值或其他在 runtime 模型里活动的属性。[standalone@localhost:9999 /]
/interface=public:read-resource(include-runtime=true)
和之前的例子相比,include-runtime
请求属性会开放其他的活动属性,如发送的字节和 HTTP 连接器接收的字节。例 3.14. 用
include-runtime
参数开放其他活动的属性值。[standalone@localhost:9999 /] /subsystem=web/connector=http:read-resource(include-runtime=true) { "outcome" => "success", "result" => { "any" => undefined, "any-address" => undefined, "any-ipv4-address" => undefined, "any-ipv6-address" => undefined, "inet-address" => expression "${jboss.bind.address:127.0.0.1}", "link-local-address" => undefined, "loopback" => undefined, "loopback-address" => undefined, "multicast" => undefined, "name" => "public", "nic" => undefined, "nic-match" => undefined, "not" => undefined, "point-to-point" => undefined, "public-address" => undefined, "resolved-address" => "127.0.0.1", "site-local-address" => undefined, "subnet-match" => undefined, "up" => undefined, "virtual" => undefined } }
3.6.7. 用管理 CLI 显示可用资源的描述
必须具备的条件
过程 3.19. 在管理 CLI 里执行命令
运行
read-resource-description
操作在管理 CLI 里,使用read-resource-description
来读取和显示可用资源。关于操作请求的详情,请参考 第 3.5.8 节 “在管理 CLI 里使用操作和命令”。[standalone@localhost:9999 /]
:read-resource-description
使用可选参数
read-resource-description
操作允许使用其他参数。- 使用
operations
参数来包含资源操作的描述。[standalone@localhost:9999 /]
:read-resource-description(operations=true)
- 使用
inherited
参数可以包含或排除资源继承操作的描述。默认状态是 true。[standalone@localhost:9999 /]
:read-resource-description(inherited=false)
- 使用
recursive
参数来包含子资源的递归描述。[standalone@localhost:9999 /]
:read-resource-description(recursive=true)
- 使用
locale
参数来获取资源描述。如果为 null 则使用默认的 locale。[standalone@localhost:9999 /]
:read-resource-description(locale=true)
显示可用资源的描述。
3.6.8. 用管理 CLI 重载应用服务器
前提条件
reload
操作来关闭所有服务并重启 runtime。在完成 reload
操作后管理 CLI 将自动重连。
例 3.15. 重载应用服务器
[standalone@localhost:9999 /]:reload
{"outcome" => "success"}
3.6.9. 用管理 CLI 关闭应用服务器
前提条件
过程 3.20. 关闭应用服务器
运行
shutdown
操作- 在独立模式下,请使用下列命令:
[standalone@localhost:9999 /]
:shutdown
- 在域模式下,请使用下列命令及合适的主机名:
[domain@localhost:9999 /]
/host=master:shutdown
- 要连接到附加的 CLI 实例并关闭服务器,请执行下列命令:
jboss-cli.sh --connect command=:shutdown
- 要连接到远程的 CLI 实例并关闭服务器,请执行下列命令:
[disconnected /] connect IP_ADDRESS Connected to IP_ADDRESS:PORT_NUMBER [192.168.1.10:9999 /] :shutdown
用实例的 IP 地址替换 IP_ADDRESS
服务器被关闭。管理 CLI 将断开连接,因为 runtime 已是不可用的。
3.6.10. 使用管理 CLI 配置属性
前提条件
write-attribute
操作是用来写入或修改资源属性的全局操作。您可以使用这个操作来进行持久性修改并修改管理的服务器实例的配置设置。请求属性包含下列参数。
请求属性
name
- 需要设置值的所选资源属性的名称。
value
- 所选资源里属性的值。如果底层模型支持 null 值的话可以为 null。
过程 3.21. 使用管理 CLI 配置资源属性
运行
write-attribute
操作在管理 CLI 里,使用write-attribute
操作修改资源属性的值。这个擦作可以运行在资源的子节点或管理 CLI 的根节点上(指定完整资源路径)。
例 3.16. 用 write-attribute
操作禁用部署扫描器。
write-attribute
操作来禁用部署扫描器。这个操作从根节点运行,使用 Tab Completion 来协助填充正确的资源路径。
[standalone@localhost:9999 /] /subsystem=deployment-scanner/scanner=default:write-attribute(name=scan-enabled,value=false) {"outcome" => "success"}
read-attribute
操作确认。
[standalone@localhost:9999 /] /subsystem=deployment-scanner/scanner=default:read-attribute(name=scan-enabled) { "outcome" => "success", "result" => false }
read-resource
操作列出节点的所有可用资源属性可以确认资源。在下列例子里,这个特定的配置展示了 scan-enabled
属性被设置为 false
。
[standalone@localhost:9999 /] /subsystem=deployment-scanner/scanner=default:read-resource { "outcome" => "success", "result" => { "auto-deploy-exploded" => false, "auto-deploy-xml" => true, "auto-deploy-zipped" => true, "deployment-timeout" => 600, "path" => "deployments", "relative-to" => "jboss.server.base.dir", "scan-enabled" => false, "scan-interval" => 5000 } }
更新了资源属性
3.6.11. 用管理 CLI 配置系统属性
过程 3.22. 用管理 CLI 配置系统属性
- 启动 JBoss EAP 服务器。
- 使用适合操作系统的命令启动管理 CLI对于 Linux:
对于 Windows:EAP_HOME/bin/jboss-cli.sh --connect
EAP_HOME\bin\jboss-cli.bat --connect
- 添加系统属性。使用的命令取决于服务器是否是独立服务器还是运行在受管域里。如果您运行的是受管域,您可以添加任何系统属性到运行在这个域里的任何或所有服务器里。
- 用下列语法在独立服务器上添加一个系统属性:
/system-property=PROPERTY_NAME:add(value=PROPERTY_VALUE)
例 3.17. 添加系统属性到独立服务器
[standalone@localhost:9999 /] /system-property=property.mybean.queue:add(value=java:/queue/MyBeanQueue) {"outcome" => "success"}
- 用下列语法在受管域里的所有主机和服务器上添加一个系统属性:
/system-property=PROPERTY_NAME:add(value=PROPERTY_VALUE)
例 3.18. 添加系统属性到受管域里的所有服务器
[domain@localhost:9999 /] /system-property=property.mybean.queue:add(value=java:/queue/MyBeanQueue) { "outcome" => "success", "result" => undefined, "server-groups" => {"main-server-group" => {"host" => {"master" => { "server-one" => {"response" => {"outcome" => "success"}}, "server-two" => {"response" => {"outcome" => "success"}} }}}} }
- 用下列语法在受管域里的主机及其服务器实例上添加一个系统属性:
/host=master/system-property=PROPERTY_NAME:add(value=PROPERTY_VALUE)
例 3.19. 添加系统属性到域里的主机及其服务器
[domain@localhost:9999 /] /host=master/system-property=property.mybean.queue:add(value=java:/queue/MyBeanQueue) { "outcome" => "success", "result" => undefined, "server-groups" => {"main-server-group" => {"host" => {"master" => { "server-one" => {"response" => {"outcome" => "success"}}, "server-two" => {"response" => {"outcome" => "success"}} }}}} }
- 用下列语法添加一个系统属性到受管域里的服务器实例:
/host=master/server-config=server-one/system-property=PROPERTY_NAME:add(value=PROPERTY_VALUE)
例 3.20. 添加系统属性到受管域里的服务器实例
[domain@localhost:9999 /] /host=master/server-config=server-one/system-property=property.mybean.queue:add(value=java:/queue/MyBeanQueue) { "outcome" => "success", "result" => undefined, "server-groups" => {"main-server-group" => {"host" => {"master" => {"server-one" => {"response" => {"outcome" => "success"}}}}}} }
- 读取系统属性。所使用的命令取决于服务器是否是独立服务器还是运行在受管域里。
- 用下列语法从独立服务器读取系统属性:
/system-property=PROPERTY_NAME:read-resource
例 3.21. 从独立服务器读取系统属性
[standalone@localhost:9999 /] /system-property=property.mybean.queue:read-resource { "outcome" => "success", "result" => {"value" => "java:/queue/MyBeanQueue"} }
- 用下列语法在受管域里的所有主机和服务器上读取系统属性:
/system-property=PROPERTY_NAME:read-resource
例 3.22. 从受管域里的所有服务器上读取系统属性
[domain@localhost:9999 /] /system-property=property.mybean.queue:read-resource { "outcome" => "success", "result" => { "boot-time" => true, "value" => "java:/queue/MyBeanQueue" } }
- 用下列语法从受管域里的主机及其服务器实例里读取系统属性:
/host=master/system-property=PROPERTY_NAME:read-resource
例 3.23. 从受管域里的主机及其服务器读取系统属性
[domain@localhost:9999 /] /host=master/system-property=property.mybean.queue:read-resource { "outcome" => "success", "result" => { "boot-time" => true, "value" => "java:/queue/MyBeanQueue" } }
- 用下列语法从受管域里的服务器实例里读取系统属性:
/host=master/server-config=server-one/system-property=PROPERTY_NAME:read-resource
例 3.24. 从受管域里的服务器实例读取系统属性
[domain@localhost:9999 /] /host=master/server-config=server-one/system-property=property.mybean.queue:read-resource { "outcome" => "success", "result" => { "boot-time" => true, "value" => "java:/queue/MyBeanQueue" } }
- 删除系统属性。所使用的命令取决于服务器是否是独立服务器还是运行在受管域里。
- 用下列语法从独立服务器删除系统属性:
/system-property=PROPERTY_NAME:remove
例 3.25. 从独立服务器删除系统属性
[standalone@localhost:9999 /] /system-property=property.mybean.queue:remove {"outcome" => "success"}
- 用下列语法从受管域里的所有主机和服务器里删除系统属性:
/system-property=PROPERTY_NAME:remove
例 3.26. 从受管域里的所有主机和服务器里删除系统属性
[domain@localhost:9999 /] /system-property=property.mybean.queue:remove { "outcome" => "success", "result" => undefined, "server-groups" => {"main-server-group" => {"host" => {"master" => { "server-one" => {"response" => {"outcome" => "success"}}, "server-two" => {"response" => {"outcome" => "success"}} }}}} }
- 用下列语法从受管域里的主机及其服务器实例里删除系统属性:
/host=master/system-property=PROPERTY_NAME:remove
例 3.27. 从受管域里的主机及其实例里删除系统属性
[domain@localhost:9999 /] /host=master/system-property=property.mybean.queue:remove { "outcome" => "success", "result" => undefined, "server-groups" => {"main-server-group" => {"host" => {"master" => { "server-one" => {"response" => {"outcome" => "success"}}, "server-two" => {"response" => {"outcome" => "success"}} }}}} }
- 用下列语法从受管域里的服务器实例里删除系统属性:
/host=master/server-config=server-one/system-property=PROPERTY_NAME:remove
例 3.28. 从受管域里的服务器里删除系统属性
[domain@localhost:9999 /] /host=master/server-config=server-one/system-property=property.mybean.queue:remove { "outcome" => "success", "result" => undefined, "server-groups" => {"main-server-group" => {"host" => {"master" => {"server-one" => {"response" => {"outcome" => "success"}}}}}} }
3.7. 管理 CLI 命令历史
3.7.1. 使用管理 CLI 命令历史
.jboss-cli-history
日志文件上。这个历史记录文件默认是记录最多 500 条 CLI 命令。
history
命令自身将返回当前会话的历史记录,或用其他参数将禁用、启用或清除会话内存里的历史记录。管理 CLI 也可以通过键盘上的箭头来在命令和操作的历史记录里前进或后退。
管理 CLI 的 history 命令的功能
3.7.2. 显示管理 CLI 命令历史
前提条件
过程 3.23. 显示管理 CLI 命令历史
运行
history
命令在管理 CLI 里,输入history
命令:[standalone@localhost:9999 /]
history
在 CLI 启动或历史清除命令显示后保存在内存里的 CLI 命令历史。
3.7.3. 清除管理 CLI 命令历史
前提条件
过程 3.24. 清除管理 CLI 命令历史
运行
history --clear
命令在管理 CLI 里,输入history --clear
命令:[standalone@localhost:9999 /]
history --clear
自 CLI 启动后记录的命令历史将从会话内存里删除。这些命令历史仍然保存在用户主目录的 .jboss-cli-history
文件里。
3.7.4. 禁用管理 CLI 命令历史
前提条件
过程 3.25. 禁用管理 CLI 命令历史
运行
history --disable
命令在管理 CLI 里,输入history --disable
命令:[standalone@localhost:9999 /]
history --disable
CLI 里执行的命令不会记录在内存里或保存在用户主目录的 .jboss-cli-history
文件里。
3.7.5. 启用管理 CLI 命令历史
前提条件
过程 3.26. 启用管理 CLI 命令历史
运行
history --enable
命令在管理 CLI 里,输入history --enable
命令:[standalone@localhost:9999 /]
history --enable
CLI 里执行的命令会记录在内存里并保存在用户主目录的 .jboss-cli-history
文件里。
3.8. 管理接口审计日志
3.8.1. 关于管理接口审计日志
注意
3.8.2. 从管理 CLI 里启用管理接口的审计日志
/core-service=management/access=audit/logger=audit-log:write-attribute(name=enabled,value=true)
3.8.3. 关于管理接口的审计日志格式器
表 3.5. JSON 格式器字段
属性 | 描述 |
---|---|
include-date | 布尔值,它定义格式化日志记录是否包含时间戳。 |
date-separator | 包含分隔日期和格式化日志信息的字符的字符串。如果 include-date =false 则被忽略。 |
date-format | 用于时间戳的 java.text.SimpleDateFormat.可以时别的日期格式。如果 include-date =false 则被忽略。 |
compact | 如果为 true ,它将在一行里格式化 JSON 信息。因为仍有包含新行符的值,所以如果需要在同一行里容纳整个记录,可以设置 escape-new-line 或 escape-control-characters 为 true 。 |
escape-control-characters | 如果为 true ,它将所有带有八进制 ASCII 字符的控制字符(带有十进制值 < 32 的 ASCII 条目)转义;例如新行将转义为 '#012'。如果它为 true ,它将覆盖 escape-new-line =false 。 |
escape-new-line | 如果为 true 会将所有带有八进制的 ASCII 代码的新行转义,例如 #012 。 |
3.8.4. 关于管理接口的审计日志文件处理程序
表 3.6. 文件处理程序的审计日志字段
属性 | 描述 | 只读的 |
---|---|---|
formatter | 用来格式化日志记录的 JSON 格式器的名称。 | False |
path | 审计日志文件的路径。 | False |
relative-to | 之前的命名路径的名称,或者系统提供的标准路径中的一个。如果提供了 relative-to ,path 属性的值将作为这个属性指定的路径的相对路径对待。 | False |
failure-count | 初始化处理程序前记录日志失败的次数。 | True |
max-failure-count | 禁用这个处理程序前记录日志失败的最多次数。 | False |
disabled-due-to-failure | true 表示如果登记日志失败则禁用处理程序。 | True |
3.8.5. 关于管理接口的审计日志 Syslog 处理程序
http://www.ietf.org/rfc/rfc3164.txt
http://www.ietf.org/rfc/rfc5424.txt
http://www.ietf.org/rfc/rfc6587.txt
表 3.7. Syslog 处理程序字段
字段 | 描述 | 只读的值 |
---|---|---|
formatter | 用来格式化日志记录的格式器的名称。 | False |
failure-count | 初始化处理程序前记录日志失败的次数。 | True |
max-failure-count | 禁用这个处理程序前记录日志失败的最多次数。 | False |
disabled-due-to-failure | True 表示如果登记日志失败则禁用处理程序。 | True |
syslog-format | Syslog 格式:RFC-5424 或 RFC-3164。 | False |
max-length | 日志消息的最大长度(字节),包括头部信息。如果没有定义,syslog-format 为 RFC3164 时它默认为 1024 字节,而 syslog-format 为 RFC5424 时它默认为 2048 字节。 | False. |
truncate | 如果消息长度超过最大字节数,是否要截短(包括头部信息)。如果为 false,消息将即兴分隔然后用相同的头部值来发送。 | False |
3.8.6. 启用发送到 Syslog 服务器的管理接口审计日志
注意
/host=HOST_NAME
到 /core-service
命令上。
过程 3.27. 启用发送到 Syslog 服务器的日志
创建一个名为
msyslog
的 syslog 处理程序[standalone@localhost:9999 /]batch [standalone@localhost:9999 /]/core-service=management/access=audit/syslog-handler=mysyslog:add(formatter=json-formatter) [standalone@localhost:9999 /]/core-service=management/access=audit/syslog-handler=mysyslog/protocol=udp:add(host=localhost,port=514) [standalone@localhost:9999 /]run-batch
在 syslog 处理程序里添加一个引用。
[standalone@localhost:9999 /]/core-service=management/access=audit/logger=audit-log/handler=mysyslog:add
管理接口的审计日志登记在 syslog 服务器上。
3.8.7. 管理接口的审计日志选项
配置选项
- log-boot
- 如果为
true
,引导服务器时的管理操作将记录审计日志。如果为false
则不会记录日志。默认为false
。 - log-read-only
- 如果为
true
,所有的操作都将记录审计日志。如果为false
,只有修改了模型的操作会记录日志。默认为false
。
3.8.8. 管理接口的审计日志字段
表 3.8. 管理接口的审计日志字段
字段名称 | 描述 |
---|---|
type | 它的值如果为 core ,表示是一个管理操作;如果为 jmx ,表示它来自 JMX 在系统(关于 JMX 子系统的审计日志请参考 JMX 子系统部分)。 |
r/o | 如果操作没有修改管理模型则为 true ,否则为 false 。 |
booting | 如果操作是在引导过程中执行的则为 true ,如果是在服务器启动并运行后执行的则为 false 。 |
version | JBoss EAP 实例的版本号码。 |
user | 已验证用户的用户名。如果和运行的服务器相同的主机为这个操作登记了日志,它将使用特殊的 $local 用户。 |
domainUUID | 当所有操作从域控制器传播到服务器、从主机控制器和从主机控制器服务器时,链接所有操作的标识符。 |
access | 它可以是下列值之一:NATIVE、HTTP、JMX。NATIVE - 操作通过原生管理接口进行,如 CLI。HTTP - 操作通过域 HTTP 接口进行,例如域控制台。JMX - 操作通过 JMX 子系统进行。关于如何配置 JMX 的审计日志,请参考 JMX 文档。 |
remote-address | 执行这个操作的客户的地址。 |
success | 如果操作成功则为 true ,如果回滚则为 false 。 |
ops | 被执行的操作。这是一个序列化到 JSON 的操作的列表。在引导时这是解析 XML 导致的所有操作。引导完成后,这个列表通常只包含单个条目。 |
第 4 章 用户管理
4.1. 用户创建
4.1.1. 为管理接口添加用户
JBoss EAP 6 里的管理界面默认是设置了安全性的,因为一开始没有可用的用户帐号,除非你是用图形安装程序安装的。对于因简单配置错误而可能引起来自远程系统的攻击来说,这是一个预防措施。本地的非 HTTP 访问是受 SASL 机制保护的,就是当客户从 localhost 第一次连接时客户和服务器间都进行协商。
注意
过程 4.1. 为远程管理界面创建初始管理性用户
调用
add-user.sh
或add-user.bat
脚本。进入EAP_HOME/bin/
目录。根据你的操作系统调用合适的脚本。- Red Hat Enterprise Linux
[user@host bin]$
./add-user.sh- Microsoft Windows Server
C:\bin>
add-user.bat
选择添加一个管理用户。
点击 ENTER 选择默认选项a
来添加一个管理用户。这个用户被添加到ManagementRealm
并被授权通过基于 web 的管理控制台或基于命令行的管理 CLI 来执行管理操作。另外一个选项b
则添加一个用户到ApplicationRealm
,且未提供特殊的权限。该区域(Realm)用于应用程序。输入用户名和密码。
遇到提示时输入用户名和密码,系统会提示您确认密码。输入您的组信息
添加用户所属的组或组群。如果用户属于多个组,请输入用逗号隔开的列表。如果不属于任何组,请留空。获取信息并确认。
系统会提示您确认信息。如果正确,请输入yes
。选择用户是否代表一个远程 JBoss EAP 6 服务器实例。
除了管理员以外,偶尔需要在ManagementRealm
里添加到 JBoss EAP 6 里的是代表其他 EAP 实例的用户,它需要通过验证作为成员加入到群集。下一个提示允许你指定所添加的用户。如果你选择yes
,你将得到一个 hashedsecret
值,代表用户的密码,这将需要添加到不同的配置文件里。为了完成这个任务,在这里请回答no
。输入其他的用户。
如果需要,重复刚才的过程你可以输入其他用户。你也可以在任何时候在运行系统里添加用户。不是选择默认的安全区,你需要添加用户到其他区以调整其授权过程。非交互式地创建用户。
通过在命令行传入参数,你可以非交互式地创建用户。我们不推荐在共享系统上使用这个方法,因为密码可以在日志或历史文件里看到。这个使用管理区域的命令的语法是:[user@host bin]$
./add-user.sh username password要使用应用程序区域,请使用-a
参数。[user@host bin]$
./add-user.sh -a username password- 通过
--silent
参数,你可以忽略 add-user 脚本的正常输出。这只有在指定了用户名
和密码
且只使用了最小参数集时才适用。 而错误信息仍会被显示。
你添加的任何用户都会在你指定的安全区里进行激活。ManagementRealm
区里活动的用户能够从远程系统里管理 JBoss EAP 6。
还可查看:
4.1.2. 传入参数到用户管理 add-user 脚本
add-user.sh
或 add-user.bat
命令或将参数传入到命令行。本节描述了传入参数时可用的选项。
4.1.3. Add-user 命令行参数
add-user.sh
或 add-user.bat
命令的可用参数。
表 4.1. Add-user 命令行参数
命令行参数 | 参数值 | 描述 |
---|---|---|
-a
|
N/A
|
这个参数指定在应用程序区里创建用户。如果忽略,默认是在管理区里创建用户。
|
-dc
|
DOMAIN_CONFIGURATION_DIRECTORY
|
这个参数指定了包含属性文件的域配置目录。如果忽略,默认的目录是
EAP_HOME/domain/configuration/ 。
|
-sc
|
SERVER_CONFIGURATION_DIRECTORY
|
这个参数指定了包含属性文件的其他独立服务器配置目录。如果忽略,默认的目录是
EAP_HOME/standalone/configuration/ 。
|
-up
--user-properties
|
USER_PROPERTIES_FILE
|
这个参数指定其他用户属性文件的名称。它可以是一个绝对路径,也可以和
-sc 或 -dc 参数一起来指定其他配置的目录。
|
-g
--group
|
GROUP_LIST
|
分配给这个用户的用逗号隔开的组的列表。
|
-gp
--group-properties
|
GROUP_PROPERTIES_FILE
|
这个参数指定其他组属性文件的名称。它可以是一个绝对路径,也可以和
-sc 或 -dc 参数一起来指定其他配置的目录。
|
-p
--password
|
PASSWORD
|
用户的密码。密码必须满足下列要求:
|
-u
--user
|
USER_NAME
|
用户的名称。它必须只包含字母数字字符。
|
-r
--realm
|
REALM_NAME
|
用来设置管理接口安全性的区的名称。如果忽略,默认是
ManagementRealm 。
|
-s
--silent
|
N/A
|
运行 add-user 脚本且不输出到控制台。
|
-h
--help
|
N/A
|
显示 add-user 脚本的用法。
|
4.1.4. 指定用户管理信息的替代属性文件
在默认情况下,用 add-user.sh
或 add-user.bat
创建的用户和角色信息都保存在服务器配置目录下的属性文件里。服务器配置信息保存在 EAP_HOME/standalone/configuration/
目录而域配置信息保存在 EAP_HOME/domain/configuration/
目录。本节将描述如何覆盖默认的文件名称和位置。
过程 4.2. 指定替代属性文件
- 要指定服务器配置的替代目录,请使用
-sc
参数。这个参数指定了包含服务器配置属性文件的替代目录。 - 要为域配置指定替代目录,,请使用
-dc
参数。这个参数指定了包含域配置属性文件的替代目录。 - 要指定替代的用户配置属性文件,请使用
-up
或--user-properties
参数。它可以是绝对路径,也可以和-sc
或-dc
参数一起使用来指定替代的配置目录。 - 要指定替代的组配置属性文件,请使用
-gp
或--group-properties
参数。它可以是绝对路径,也可以和-sc
或-dc
参数一起使用来指定替代的配置目录。
注意
add-user
命令旨在操作现有的属性文件。命令行里指定任何替代属性文件都必须存在,否则您将看到下列错误:
JBAS015234: No appusers.properties files found
4.1.5. Add-user 脚本命令行示例
add-user.sh
或 add-user.bat
命令。除非另有注明,这些命令假定是使用独立服务器配置的。
例 4.1. 创建属于使用默认属性文件的单个组的用户。
EAP_HOME/bin/add-user.sh -a -u 'appuser1' -p 'password1!' -g 'guest'
- 用户
appuser1
被添加到保存用户信息的下列默认属性文件里。EAP_HOME/standalone/configuration/application-users.properties
EAP_HOME/domain/configuration/application-users.properties
- 用户
appuser1
和组guest
被添加到保存组信息的默认属性文件里。EAP_HOME/standalone/configuration/application-roles.properties
EAP_HOME/domain/configuration/application-roles.properties
例 4.2. 创建属于使用默认属性文件的多个组的用户。
EAP_HOME/bin/add-user.sh -a -u 'appuser1' -p 'password1!' -g 'guest,app1group,app2group'
- 用户
appuser1
被添加到保存用户信息的下列默认属性文件里。EAP_HOME/standalone/configuration/application-users.properties
EAP_HOME/domain/configuration/application-users.properties
- 用户
appuser1
和组guest
、app1group
和app2group
被添加到保存组信息的默认属性文件里。EAP_HOME/standalone/configuration/application-roles.properties
EAP_HOME/domain/configuration/application-roles.properties
例 4.3. 在使用默认属性文件的默认区里创建带有管理权限的用户。
EAP_HOME/bin/add-user.sh -u 'adminuser1' -p 'password1!' -g 'admin'
- 用户
adminuser1
被添加到保存用户信息的下列默认属性文件里。EAP_HOME/standalone/configuration/mgmt-users.properties
EAP_HOME/domain/configuration/mgmt-users.properties
- 用户
adminuser1
和组admin
被添加到保存组信息的默认属性文件里。EAP_HOME/standalone/configuration/mgmt-groups.properties
EAP_HOME/domain/configuration/mgmt-groups.properties
例 4.4. 创建属于用替代属性文件保存信息的单个组的用户。
EAP_HOME/bin/add-user.sh -a -u appuser1 -p password1! -g app1group -sc /home/someusername/userconfigs/ -up appusers.properties -gp appgroups.properties
- 我们添加了用户
appuser1
到下列属性文件里,它现在是保存用户信息的默认文件。/home/someusername/userconfigs/appusers.properties
- 我们添加了用户
appuser1
和组app1group
到下列属性文件里,它现在是保存组信息的默认文件。/home/someusername/userconfigs/appgroups.properties
第 5 章 网络和端口配置
5.1. 接口
5.1.1. 关于接口
domain.xml
, host.xml
和 standalone.xml
都包含了接口声明。声明标准可以引用通配符地址或指定接口或地址必须具有来进行有效匹配的一个或多个特征。下面的例子展示了接口声明的多个可能的配置,它们通常是在 standalone.xml
或 host.xml
配置文件里定义的。这允许任何远程主机组维护自己所专有的接口属性,且仍然允许对域控制器里的 domain.xml
配置文件里任何接口组的引用。
management
和 public
相对名称组指定的专有的 inet-address
值。
例 5.1. 用 inet-address 值创建的接口组
<interfaces> <interface name="management"> <inet-address value="127.0.0.1"/> </interface> <interface name="public"> <inet-address value="127.0.0.1"/> </interface> </interfaces>
any-address
元素来声明通配符地址。
例 5.2. 用通配符声明创建的全局组
<interface name="global"> <!-- Use the wild-card address --> <any-address/> </interface>
external
的相对组下的一个网络接口卡。
例 5.3. 用 NIC 值创建的外部组
<interface name="external"> <nic name="eth0"/> </interface>
例 5.4. 用专有条件值创建的默认组
<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>
5.1.2. 配置接口
standalone.xml
和 host.xml
配置文件里默认的接口配置通常提供三个带有相对接口令牌的命名接口。您可以使用管理控制台或管理 CLI 来配置下表列出的其他属性和值。你也可以按需要用专有值替换相对的接口绑定。请注意,如果您这样做,您将无法在运行时传入接口值,因为 -b
选项只能覆盖相对值。
例 5.5. 默认的接口配置
<interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:127.0.0.1}"/> </interface> <interface name="public"> <inet-address value="${jboss.bind.address:127.0.0.1}"/> </interface> <interface name="unsecure"> <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/> </interface> </interfaces>
表 5.1. 接口属性和值
接口元素 | 描述 |
---|---|
any | 地址排斥类型的空元素,用于约束选择标准。 |
any-address | 空元素表示使用这个接口的套接字应该绑定到通配符地址。除非设置 java.net.preferIpV4Stack 系统属性为 true,否则 IPv6 将使用通配符地址(::),而 IPv4 将使用通配符地址(0.0.0.0)。如果套接字绑定到双栈主机上的任何本地 IPv6 地址,它可以接受 IPv6 及 IPv4 数据。如果绑定到任何的本地 IPv4 地址,它就只能接受 IPv4 数据。 |
any-ipv4-address | 空元素表示使用这个接口的套接字应该绑定到 IPv4 通配符地址(0.0.0.0)。 |
any-ipv6-address | 空元素表示使用这个接口的套接字应该绑定到 IPv6 通配符地址(::)。 |
inet-address | 请输入 IPv6 格式的 IP 地址或者用小数点隔开的 IPv4 地址,或者可以解析为 IP 地址的主机名。 |
link-local-address | 空元素表示接口的部分选择标准应该是或不是和 link-local 关联的地址。 |
loopback | 空元素表示接口的部分选择标准应该是或不是 loopback 接口。 |
loopback-address | 可能实际上不会在主机的 loopback 接口上配置的 loopback 地址。和 inet-addressType 不同的是,即使没有找到和 IP 地址相关的 NIC,给定的值也将被使用。 |
multicast | 空元素表示接口的部分选择标准应该支持或不支持多点传送。 |
nic | 网络接口的名称(如 eth0, eth1, lo) 。 |
nic-match | 常规表达式,表示主机上可以映射可接受的接口的网络接口的名称。 |
not | 地址排斥类型的空元素,用于约束选择标准。 |
point-to-point | 空元素表示接口的部分选择标准是是否为 point-to-point 接口。 |
public-address | 空元素表示接口的部分选择标准应该有或没有公共路由的地址。 |
site-local-address | 空元素表示接口的部分选择标准应该是或不是和 site-local 关联的地址。 |
subnet-match | 网络 IP 地址和地址的网络前缀的位数,以斜杠和数字表示;如 "192.168.0.0/16"。 |
up | 空元素表示接口的部分选择标准应该是或不是正在运行。 |
virtual | 空元素表示接口的部分选择标准应该是或不是虚拟接口。 |
配置接口属性
您可以用 Tab Completion 来完成输入的命令,并开放可用的属性。用管理 CLI 配置接口属性
使用管理 CLI 来添加新的接口并编写新的接口属性的值。添加新的接口
使用add
操作来创建新的接口。您可以在管理 CLI 会话的根目录里运行add
命令,下面的例子创建了一个名为 interfacename 的接口,它将inet-address
声明为 12.0.0.2。/interface=interfacename/:add(inet-address=12.0.0.2)
编辑接口属性
write
操作将新的值写入属性。下面的例子将inet-address
的值更新为 12.0.0.8。/interface=interfacename/:write-attribute(name=inet-address, value=12.0.0.8)
检验接口属性
通过include-runtime=true
参数运行read-resource
操作来确认值已修改,从而开放服务器模型里所有当前的值。例如:[standalone@localhost:9999 interface=public]
:read-resource(include-runtime=true)
用管理控制台配置接口属性
登录到管理控制台。
登录到受管域或独立服务器实例的管理控制台。进入 Interfaces 屏幕
进入 Configuration 标签页。
从屏幕顶部选择 Configuration 标签页。仅用于域模式
从屏幕左上角的 Profile 下拉菜单里选择要修改的配置集。
从导航菜单里选择 Interfaces。
展开 General Configuration 菜单。从导航菜单里选择 Interfaces 菜单条目。添加新的接口
- 点添加。
- 输入 Name、Inet Address 和 Address Wildcard 的值。
- 点击 Save。
编辑接口属性
- 从 Available Interfaces 列表里选择要编辑的接口并点击 Edit。
- 输入 Name、Inet Address 和 Address Wildcard 的值。
- 点击 Save。
5.2. 套接字绑定组
5.2.1. 关于套接字绑定组
domain.xml
和 standalone.xml
配置文件里找到。配置的其他部分可以通过逻辑名引用这些套接字,而无需包含套接字配置的完整细节。这允许您引用不同主机上可能不同的相对套接字配置。
例 5.6. 独立配置的默认套接字绑定
standalone.xml
配置文件里的默认套接字绑定组是按照 standard-sockets
分组的。public
接口也通过相同的逻辑引用方法引用了这个组。
<socket-binding-group name="standard-sockets" default-interface="public"> <socket-binding name="http" port="8080"/> <socket-binding name="https" port="8443"/> <socket-binding name="jacorb" port="3528"/> <socket-binding name="jacorb-ssl" port="3529"/> <socket-binding name="jmx-connector-registry" port="1090" interface="management"/> <socket-binding name="jmx-connector-server" port="1091" interface="management"/> <socket-binding name="jndi" port="1099"/> <socket-binding name="messaging" port="5445"/> <socket-binding name="messaging-throughput" port="5455"/> <socket-binding name="osgi-http" port="8090" interface="management"/> <socket-binding name="remoting" port="4447"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> </socket-binding-group>
例 5.7. 域配置的默认套接字绑定
domain.xml
配置文件里的默认套接字绑定组包含了四个组:standard-sockets
、ha-sockets
、full-sockets
和 full-ha-sockets
。这些组也被名为 public
的接口所引用。
<socket-binding-groups> <socket-binding-group name="standard-sockets" default-interface="public"> <!-- Needed for server groups using the 'default' profile --> <socket-binding name="ajp" port="8009"/> <socket-binding name="http" port="8080"/> <socket-binding name="https" port="8443"/> <socket-binding name="osgi-http" interface="management" port="8090"/> <socket-binding name="remoting" port="4447"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"/> </outbound-socket-binding> </socket-binding-group> <socket-binding-group name="ha-sockets" default-interface="public"> <!-- Needed for server groups using the 'ha' profile --> <socket-binding name="ajp" port="8009"/> <socket-binding name="http" port="8080"/> <socket-binding name="https" port="8443"/> <socket-binding name="jgroups-mping" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/> <socket-binding name="jgroups-tcp" port="7600"/> <socket-binding name="jgroups-tcp-fd" port="57600"/> <socket-binding name="jgroups-udp" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/> <socket-binding name="jgroups-udp-fd" port="54200"/> <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/> <socket-binding name="osgi-http" interface="management" port="8090"/> <socket-binding name="remoting" port="4447"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"/> </outbound-socket-binding> </socket-binding-group> <socket-binding-group name="full-sockets" default-interface="public"> <!-- Needed for server groups using the 'full' profile --> <socket-binding name="ajp" port="8009"/> <socket-binding name="http" port="8080"/> <socket-binding name="https" port="8443"/> <socket-binding name="jacorb" interface="unsecure" port="3528"/> <socket-binding name="jacorb-ssl" interface="unsecure" port="3529"/> <socket-binding name="messaging" port="5445"/> <socket-binding name="messaging-group" port="0" multicast-address="${jboss.messaging.group.address:231.7.7.7}" multicast-port="${jboss.messaging.group.port:9876}"/> <socket-binding name="messaging-throughput" port="5455"/> <socket-binding name="osgi-http" interface="management" port="8090"/> <socket-binding name="remoting" port="4447"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"/> </outbound-socket-binding> </socket-binding-group> <socket-binding-group name="full-ha-sockets" default-interface="public"> <!-- Needed for server groups using the 'full-ha' profile --> <socket-binding name="ajp" port="8009"/> <socket-binding name="http" port="8080"/> <socket-binding name="https" port="8443"/> <socket-binding name="jacorb" interface="unsecure" port="3528"/> <socket-binding name="jacorb-ssl" interface="unsecure" port="3529"/> <socket-binding name="jgroups-mping" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/> <socket-binding name="jgroups-tcp" port="7600"/> <socket-binding name="jgroups-tcp-fd" port="57600"/> <socket-binding name="jgroups-udp" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/> <socket-binding name="jgroups-udp-fd" port="54200"/> <socket-binding name="messaging" port="5445"/> <socket-binding name="messaging-group" port="0" multicast-address="${jboss.messaging.group.address:231.7.7.7}" multicast-port="${jboss.messaging.group.port:9876}"/> <socket-binding name="messaging-throughput" port="5455"/> <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/> <socket-binding name="osgi-http" interface="management" port="8090"/> <socket-binding name="remoting" port="4447"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"/> </outbound-socket-binding> </socket-binding-group> </socket-binding-groups>
standalone.xml
和 domain.xml
文件里创建和编辑。我们推荐的管理绑定的方法是使用管理控制台或管理 CLI。使用管理控制台的优势包括图形化的用户界面,在 General Configuration 部分里有专门的 Socket Binding Group 屏幕。管理 CLI 提供 API 和基于命令行的批处理工作流程,并可以对应用服务器配置的更高和更低级别使用脚本。两种界面都可以持久化修改或者保存修改到服务器配置文件里。
5.2.2. 配置套接字绑定
standard-sockets
组,且无法创建更多的组。相反,您可以创建替代的独立服务器配置文件。对于受管域,您可以创建多个套接字绑定组并按需要配置它们包含的套接字绑定。下表展示了每个套接字绑定的可用属性。
表 5.2. 套接字绑定属性
属性 | 描述 | 角色 |
---|---|---|
name | 应该用在配置里其他位置的套接字配置的逻辑名。 | 必需 |
port | 基于这个配置的套接字应该绑定的基础端口。请注意,您可以通过应用于所有端口的增量或减量来配置服务器以覆盖这个基础值。 | 必需 |
interface | 基于这个配置的套接字应该绑定的接口的逻辑名。如果没有定义,将会使用附带的套接字绑定组里 default-interface 属性的值。 | 可选 |
multicast-address | 如果套接字用于多点传送,要使用的多点传送地址。 | 可选 |
multicast-port | 如果套接字用于多点传送,要使用的多点传送端口。 | 可选 |
fixed-port | 如果为 true ,表示 true 的值必须总是用于套接字且不应该通过增减值来进行覆盖。 | 可选 |
配置套接字绑定组里的套接字绑定
请选择管理 CLI 或管理控制台来按需要配置套接字绑定。使用管理 CLI 配置套接字绑定
使用管理 CLI 配置套接字绑定。添加新的套接字绑定
如果有需要,请使用add
操作来创建新的地址设置。您可以在管理 CLI 会话的根目录里运行这个命令,下面的例子创建了一个名为 newsocket 的套接字绑定,它的port
属性声明为 1234。这些例子适用于独立服务器和受管域的standard-sockets
套接字绑定组。[domain@localhost:9999 /] /socket-binding-group=standard-sockets/socket-binding=newsocket/:add(port=1234)
编辑 Pattern 属性
使用write-attribute
操作来编写新的属性的值。您可以使用 tab completion 来帮助输入并提示所有可用的值。下面的例子将port
的值更新为 2020。[domain@localhost:9999 /] /socket-binding-group=standard-sockets/socket-binding=newsocket/:write-attribute(name=port,value=2020)
确认 Pattern 属性
通过include-runtime=true
参数运行read-resource
操作来确认值已修改以开放服务器模型里所有当前的值。[domain@localhost:9999 /] /socket-binding-group=standard-sockets/socket-binding=newsocket/:read-resource
使用管理控制台配置套接字绑定
使用管理控制台配置套接字绑定。登录到管理控制台。
登录到受管域或独立服务器的管理控制台。进入 Configuration 标签页。
从屏幕顶部选择 Configuration 标签页。从导航菜单里选择 Socket Binding 菜单条目。
展开 General Configuration 菜单。选择 Socket Binding。如果您在使用受管域,请在 Socket Binding Groups 列表里选择所需的组。添加新的套接字绑定
- 点击 Add 按钮。
- 输入 Name, Port 和 Binding Group 的值。
- 点击Save完成。
编辑套接字绑定
- 从列表里选择要编辑的套接字绑定并点击 Edit 按钮。
- 输入 Name, Interface 或Port 的值。
- 点击Save完成。
5.2.3. JBoss EAP 6 使用的网络端口
- 你的服务器组是否使用了默认的套接字绑定组,或者自定义的套接字绑定组。
- 单独部署的要求。
注意
8080
,而你的服务器使用了端口偏移量为 100
,那么它的 HTTP 端口是 8180
。
默认的套接字绑定组
full-ha-sockets
full-sockets
ha-sockets
standard-sockets
表 5.3. 默认的套接字绑定组的引用
名称 | 端口 | 多点传送端口 | 描述 | full-ha-sockets | full-sockets | ha-socket | standard-socket |
---|---|---|---|---|---|---|---|
ajp | 8009 | Apache JServ 协议,用于 HTTP 群集和负载平衡。 | 支持 | 支持 | 支持 | 支持 | |
http | 8080 | 用于已部署应用程序的默认端口。 | 支持 | 支持 | 支持 | 支持 | |
https | 8443 | 已部署的应用程序和客户间的用 SSL 加密的连接。 | 支持 | 支持 | 支持 | 支持 | |
jacorb | 3528 | 用于 JTS 事务的 CORBA 服务和其他依赖于 ORB 的服务。 | 支持 | 支持 | 不支持 | 不支持 | |
jacorb-ssl | 3529 | SSL 加密的 CORBA 服务。 | 支持 | 支持 | 不支持 | 不支持 | |
jgroups-diagnostics | 7500 | 多点传送。用于 HA 群集里的 Peer 发现。不能使用管理界面进行配置。 | 支持 | 不支持 | 支持 | 不支持 | |
jgroups-mping | 45700 | 多点传送。用于在 HA 群集里发现初始成员资格。 | 支持 | 不支持 | 支持 | 不支持 | |
jgroups-tcp | 7600 | HA 群集里使用 TCP 的多点传送 Peer 发现。 | 支持 | 不支持 | 支持 | 不支持 | |
jgroups-tcp-fd | 57600 | 用于 TCP 上的 HA 失败检测。 | 支持 | 不支持 | 支持 | 不支持 | |
jgroups-udp | 55200 | 45688 | HA 群集里使用 UDP 的多点传送 Peer 发现。 | 支持 | 不支持 | 支持 | 不支持 |
jgroups-udp-fd | 54200 | 用于 UDP 上的 HA 失败检测。 | 支持 | 不支持 | 支持 | 不支持 | |
messaging | 5445 | JMS 服务。 | 支持 | 支持 | 不支持 | 不支持 | |
messaging-group | 被 HornetQ JMS 广播和发现组引用。 | 支持 | 支持 | 不支持 | 不支持 | ||
messaging-throughput | 5455 | JMS remoting 所使用的。 | 支持 | 支持 | 不支持 | 不支持 | |
mod_cluster | 23364 | 用于 JBoss EAP 6 和 HTTP 加载平衡器之间通讯的多点传送端口。 | 支持 | 不支持 | 支持 | 不支持 | |
osgi-http | 8090 | 由使用 OSGi 子系统的内部组件使用。不能通过管理界面进行配置。 | 支持 | 支持 | 支持 | 支持 | |
remoting | 4447 | 用于远程 EJB 调用。 | 支持 | 支持 | 支持 | 支持 | |
txn-recovery-environment | 4712 | JTA 事务恢复管理者。 | 支持 | 支持 | 支持 | 支持 | |
txn-status-manager | 4713 | JTA / JTS 事务管理者。 | 支持 | 支持 | 支持 | 支持 |
除了套接字绑定组,每个主机控制台都打开另外两个端口用于管理:
9990
- Web 管理控制台的端口9999
- 管理控制台和 API 使用的端口
5.2.4. 关于套接字绑定组的端口偏移
5.2.5. 配置端口偏移
配置端口偏移
选择管理 CLI 或管理控制台来配置您的端口偏移。使用管理 CLI 配置端口偏移
使用管理 CLI 来配置端口偏移。编辑端口偏移
使用write-attribute
操作来为端口偏移属性编写新的值。下面的例子更新了 server-two 的socket-binding-port-offset
值为 250。这个服务器是默认本地主机组的成员。为使改动生效,服务器需要重启。[domain@localhost:9999 /] /host=master/server-config=server-two/:write-attribute(name=socket-binding-port-offset,value=250)
确认端口偏移属性
通过include-runtime=true
参数运行read-resource
操作来确认值已修改以开放服务器模型里所有当前的值。[domain@localhost:9999 /] /host=master/server-config=server-two/:read-resource(include-runtime=true)
使用管理控制台来配置端口偏移
使用管理控制台来配置端口偏移。登录到管理控制台。
登录到您的受管域的管理控制台。选择 Domain 标签页
从屏幕顶部选择 Domain 标签页。编辑端口偏移属性
- 在
Available Server Configurations
列表里选择服务器并点击属性列表顶部的 Edit 按钮。 - 在 Port Offset 字段里输入想要的值。
- 点击Save完成。
5.2.6. 配置 Remoting 里的消息大小
MAX_INBOUND_MESSAGE_SIZE
)及最大的转出消息(MAX_OUTBOUND_MESSAGE_SIZE
)来确保接收和发送的消息具有合适的大小。
MAX_INBOUND_MESSAGE_SIZE
),服务器将抛出异常并取消数据的传输。然而连接将保持打开且如果需要的话发送者可以选择关闭消息。
MAX_INBOUND_MESSAGE_SIZE
),消息将被异步关闭而连接仍将保持打开。
5.3. IPv6
5.3.1. 配置 IPv6 网络的 JVM Stack 首选项
- 概述
- 本节涵盖为 JBoss EAP 6 安装启用 IPv6 网络。
过程 5.1. 禁用 IPv4 Stack Java 属性
- 打开相关的安装文件:
对于独立服务器:
打开EAP_HOME/bin/standalone.conf
。对于受管域:
打开EAP_HOME/bin/domain.conf
。
- 修改 IPv4 Stack Java 属性为 false:
-Djava.net.preferIPv4Stack=false
例如:# Specify options to pass to the Java VM. # if [ "x$JAVA_OPTS" = "x" ]; then JAVA_OPTS="-Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=false -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.net.preferIPv6Addresses=true" fi
5.3.2. 配置 IPv6 网络的接口声明
遵循下列步骤来配置 IPv6 的接口 inet 地址:
过程 5.2. 配置 IPv6 网络的接口
- 从屏幕顶部选择 Configuration 标签页。
- 展开 General Configuration 菜单并选择 Interfaces。
- 从 Available Interfaces 列表里选择接口。
- 点击细节列表里的 Edit 按钮。
- 设置 inet 地址为:
${jboss.bind.address.management:[ADDRESS]}
- 点击Save完成。
- 重启服务器来应用这些修改。
5.3.3. 配置 IPv6 地址的 JVM Stack 首选项
- 概述
- 本节涵盖通过配置文件配置 JBoss EAP 6 安装首选 IPv6 地址。
过程 5.3. 配置 JBoss EAP 6 安装首选 IPv6 地址
- 打开相关的安装文件:
对于独立服务器:
打开EAP_HOME/bin/standalone.conf
。对于受管域:
打开EAP_HOME/bin/domain.conf
。
- 附加下列 Java 属性到 Java VM 选项:
-Djava.net.preferIPv6Addresses=true
例如:# Specify options to pass to the Java VM. # if [ "x$JAVA_OPTS" = "x" ]; then JAVA_OPTS="-Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=false -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.net.preferIPv6Addresses=true" fi
第 6 章 数据源管理
6.1. 介绍
6.1.1. 关于 JDBC
6.1.2. JBoss EAP 6 支持的数据库
6.1.3. 数据源的类型
非 XA 数据源
和XA 数据源
。
6.1.4. 数据源示例
警告
6.1.5. -ds.xml 文件的部署
*-ds.xml
数据源配置文件。*-ds.xml
文件仍可以按照Schemas 这里http://www.ironjacamar.org/documentation.html 的 1.1 数据源模式部署在 JBoss EAP 6 里。
警告
重要
*-ds.xml
文件时,使用对已部署 / 定义的<driver> 条目的引用是强制的。
6.2. JDBC 驱动
6.2.1. 用管理控制台安装 JDBC 驱动
在你的应用程序可以连接 JDBC 数据源之前,你的数据源供应商的 JDBC 驱动需要安装在 JBoss EAP 可以使用的位置上。JBoss EAP 6 允许你象其他部署一样部署这些驱动。这意味着如果你使用了受管域,你可以将它们部署在服务器组里的多个服务器上。
在执行这个任务之前,你需要满足以下预备条件:
- 从数据库供应商下载 JDBC 驱动。
注意
过程 6.1. 修改 JDBC 驱动 JAR
- 修改或创建空的临时目录。
- 创建一个 META-INF 子目录。
- 创建一个 META-INF/services 子目录。
- 创建一个 META-INF/services/java.sql.Driver 文件,它包含一行指明 JDBC 驱动的全限定类名的内容。
- 使用 JAR 命令行工具来更新 JAR:
jar \-uf jdbc-driver.jar META-INF/services/java.sql.Driver
过程 6.2. 部署 JDBC 驱动
访问管理控制台。
将 JAR 文件部署到服务器或服务器组。
如果你使用了受管域,你可以将 JAR 文件部署到服务器组。否则,部署到自己的服务器。请参考 第 10.2.2 节 “用管理控制台启用已部署的应用程序”。
JDBC 驱动被部署,可由你的应用程序所使用。
6.2.2. 将 JDBC 驱动安装为核心模块
在执行这个任务之前,你需要满足以下预备条件:
- 从数据库供应商下载 JDBC 驱动。JDBC 驱动的下载位置是:第 6.2.3 节 “JDBC 驱动的下载位置”。
- 解压归档文件。
过程 6.3. 将 JDBC 驱动安装为核心模块
- 在
EAP_HOME/modules/
目录下创建一个文件路径结构。例如,对于 MySQL JDBC 驱动,创建下列目录结构:EAP_HOME/modules/com/mysql/main/
。 - 将 JDBC 驱动的 JAR 文件复制到
main/
子目录。 - 在
main/
子目录里,创建一个类似于下列示例的module.xml
文件: 第 7.1.1 节 “模块”。module
XSD 在EAP_HOME/docs/schema/module-1_2.xsd
文件里进行定义。 - 启动服务器。
- 启动管理 CLI。
- 运行 CLI 命令将 JDBC 驱动模块添加到服务器配置里。你选择的命令取决于 JDBC 驱动 JAR 里的
/META-INF/services/java.sql.Driver
文件里列出的类的数量。例如,MySQL 5.1.20 JDBC JAR 里的/META-INF/services/java.sql.Driver
文件列出了两个类:当有多个条目时,您必须也指定驱动类的名称。没这样做会导致这样的错误:com.mysql.jdbc.Driver
com.mysql.fabric.jdbc.FabricMySQLDriver
JBAS014749: Operation handler failed: Service jboss.jdbc-driver.mysql is already registered
- 为包含一个驱动类条目的 JDBC JAR 运行 CLI 命令。
/subsystem=datasources/jdbc-driver=DRIVER_NAME:add(driver-name=DRIVER_NAME,driver-module-name=MODULE_NAME,driver-xa-datasource-class-name=XA_DATASOURCE_CLASS_NAME)
例 6.1. 用于具有一个驱动类的 JDBC JAR 的独立模式的 CLI 命令示例
/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource)
例 6.2. 用于具有一个驱动类的 JDBC JAR 的域模式的 CLI 命令示例
/profile=ha/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource)
- 为具有多个驱动类条目的 JDBC JAR 运行 CLI 命令。
/subsystem=datasources/jdbc-driver=DRIVER_NAME:add(driver-name=DRIVER_NAME,driver-module-name=MODULE_NAME,driver-xa-datasource-class-name=XA_DATASOURCE_CLASS_NAME, driver-class-name=DRIVER_CLASS_NAME)
例 6.3. 用于具有多个驱动类条目的 JDBC JAR 的独立模式的 CLI 命令示例
/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource, driver-class-name=com.mysql.jdbc.Driver)
例 6.4. 用于具有多个驱动类条目的 JDBC JAR 的域模式的 CLI 命令示例
/profile=ha/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource, driver-class-name=com.mysql.jdbc.Driver)
已安装好 JDBC 驱动并设置为核心模块,且可以被应用程序数据源引用。
6.2.3. JDBC 驱动的下载位置
表 6.1. JDBC 驱动的下载位置
供应商 | 下载位置 |
---|---|
MySQL | |
PostgreSQL | |
Oracle | |
IBM | |
Sybase | |
Microsoft |
6.2.4. 访问供应商专有的类
本节涵盖使用 JDBC 专有类所需的步骤。当应用程序需要使用非 JDBC API 一部分的供应商专有功能时这是有必要的。
警告
重要
重要
过程 6.4. 在应用程序里添加依赖关系
配置
MANIFEST.MF
文件- 在文本编辑器里打开应用程序的
META-INF/MANIFEST.MF
文件。 - 为 JDBC 模块添加一个依赖关系并保存文件。
依赖关系:MODULE_NAME
例 6.5. 依赖关系示例
依赖关系:com.mysql
创建一个
jboss-deployment-structure.xml
文件在应用程序的META-INF/
orWEB-INF
文件夹里创建一个名为jboss-deployment-structure.xml
的文件。例 6.6.
jboss-deployment-structure.xml
文件示例<jboss-deployment-structure> <deployment> <dependencies> <module name="com.mysql" /> </dependencies> </deployment> </jboss-deployment-structure>
例 6.7. 访问供应商专有的 API
import java.sql.Connection; import org.jboss.jca.adapters.jdbc.WrappedConnection; Connection c = ds.getConnection(); WrappedConnection wc = (WrappedConnection)c; com.mysql.jdbc.Connection mc = wc.getUnderlyingConnection();
6.3. Non-XA 数据源
6.3.1. 用管理界面创建一个 Non-XA 数据源
本节涵盖用管理控制台或管理 CLI 创建 Non-XA 数据源所需的步骤。
前提条件
- JBoss EAP 6 服务器必须正在运行。
注意
过程 6.5. 用管理 CLI 或管理控制台创建一个数据源
管理 CLI
- 启动 CLI 工具并连接到您的服务器。
- 运行下列命令来创建 Non-XA 数据源,配置合适的变量:
data-source add --name=DATASOURCE_NAME --jndi-name=JNDI_NAME --driver-name=DRIVER_NAME --connection-url=CONNECTION_URL
- 启用数据源:
data-source enable --name=DATASOURCE_NAME
管理控制台
- 登陆到管理控制台。
进入管理控制台的 Datasources 面板
- 从控制台顶部选择 Configuration 标签页。
- 对于域模式,从左上角的下拉菜单里选择合适的配置集。
- 展开控制台左侧的 Subsystems 菜单,然后展开 Connector 菜单。
- 从控制台左侧的菜单里选择 Datasources。
创建新的数据源
- 点击 Datasources 面板顶部的 Add 按钮。
- 在 Create Datasource 向导里输入新的数据源属性并点击 Next 按钮。
- 在 Create Datasource 向导里输入 JDBC 驱动细节并点击 Next 按钮。
- 在 Create Datasource 向导里输入连接设置。
- 点击 Test Connection 按钮测试到数据源的连接并检验设置是否正确。
- 点击 Done 完成。
Non-XA 数据源已被添加至服务器。它在 standalone.xml
或 domain.xml
文件以及管理界面里都可见。
6.3.2. 用管理界面修改 Non-XA 数据源
本节涵盖用管理控制台或管理 CLI 修改 Non-XA 数据源所需的步骤。
必须具备的条件
注意
jta
参数被设置为 true
。
过程 6.6. 修改 Non-XA 数据源
管理 CLI
- 使用
write-attribute
命令来配置数据源属性:/subsystem=datasources/data-source=DATASOURCE_NAME:write-attribute(name=ATTRIBUTE_NAME,value=ATTRIBUTE_VALUE)
- 重载服务器来确认修改:
:reload
管理控制台
进入管理控制台的 Datasources 面板
- 从控制台顶部选择 Configuration 标签页。
- 对于域模式,从左上角的下拉菜单里选择合适的配置集。
- 展开控制台左侧的 Subsystems 菜单,然后展开 Connector 菜单。
- 从展开的菜单选择 Datasources。
编辑数据源
- 从 Available Datasources 列表里选择相关的数据源。下面显示了数据源属性。
- 点击 Edit 按钮来编辑数据源属性。
- 点击Save完成。
已完成对 Non-XA 数据源的配置。这些修改在 standalone.xml
或 domain.xml
文件以及管理界面里都可见。
- 要创建新的数据源,请参考:第 6.3.1 节 “用管理界面创建一个 Non-XA 数据源”。
- 要删除数据源,请参考:第 6.3.3 节 “用管理界面删除 Non-XA 数据源”。
6.3.3. 用管理界面删除 Non-XA 数据源
本节涵盖用管理控制台或管理 CLI 从 JBoss EAP 6 删除 Non-XA 数据源所需的步骤。
必须具备的条件
过程 6.7. 删除 Non-XA 数据源
管理 CLI
- 运行下列命令来删除 Non-XA 数据源:
data-source remove --name=DATASOURCE_NAME
管理控制台
进入管理控制台的 Datasources 面板
- 从控制台顶部选择 Configuration 标签页。
- 对于域模式,从左上角的下拉菜单里选择合适的配置集。
- 展开控制台左侧的 Subsystems 菜单,然后展开 Connector 菜单。
- 选择 Datasources。
- 选择要删除的数据源,然后点击 Remove。
非 XA 数据源已从服务器删除。
- 要添加新的数据源,请参考:第 6.3.1 节 “用管理界面创建一个 Non-XA 数据源”。
6.4. XA 数据源
6.4.1. 用管理界面创建 XA 数据源
本节涵盖用管理控制台或管理 CLI 创建 XA 数据源所需的步骤。
注意
过程 6.8. 用管理 CLI 或管理控制台创建 XA 数据源
管理 CLI
- 运行下列命令来创建 XA 数据源,配置合适的变量:
xa-data-source add --name=XA_DATASOURCE_NAME --jndi-name=JNDI_NAME --driver-name=DRIVER_NAME --xa-datasource-class=XA_DATASOURCE_CLASS
配置 XA 数据源属性
设置服务器名称
运行下列命令来配置主机的服务器名称:/subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME/xa-datasource-properties=ServerName:add(value=HOSTNAME)
设置数据库名称
运行下列命令来配置数据库名称:/subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME/xa-datasource-properties=DatabaseName:add(value=DATABASE_NAME)
- 启用数据源:
xa-data-source enable --name=XA_DATASOURCE_NAME
管理控制台
进入管理控制台的 Datasources 面板
- 从控制台顶部选择 Configuration 标签页。
- 对于域模式,从左上角的下拉菜单里选择合适的配置集。
- 展开控制台左侧的 Subsystems 菜单,然后展开 Connector 菜单。
- 选择 Datasources。
- 选择 XA Datasource 标签页。
创建新的 XA 数据源
- 点添加。
- 在 Create XA Datasource 向导里输入新的 XA 数据源属性并点击 Next 按钮。
- 在 Create XA Datasource 向导里输入 JDBC 驱动细节并点击 Next 按钮。
- 输入 XA 属性并点击 Next。
- 在 Create XA Datasource 向导里输入连接设置。
- 点击 Test Connection 按钮测试到 XA 数据源的连接并检验设置是否正确。
- 点击 Done 完成。
XA 数据源已被添加至服务器。它在 standalone.xml
或 domain.xml
文件以及管理界面里都可见。
6.4.2. 用管理界面修改 XA 数据源
本节涵盖用管理控制台或管理 CLI 修改 XA 数据源所需的步骤。
过程 6.9. 用管理 CLI 或管理控制台修改 XA 数据源
管理 CLI
配置 XA 数据源属性
使用write-attribute
命令来配置数据源属性:/subsystem=datasources/xa-data-source=XA_DATASOURCE_NAME:write-attribute(name=ATTRIBUTE_NAME,value=ATTRIBUTE_VALUE)
配置 XA 数据源属性
运行下列命令来配置 XA 数据源子资源:/subsystem=datasources/xa-data-source=DATASOURCE_NAME/xa-datasource-properties=PROPERTY_NAME:add(value=PROPERTY_VALUE)
- 重载服务器来确认修改:
:reload
管理控制台
进入管理控制台的 Datasources 面板
- 从控制台顶部选择 Configuration 标签页。
- 对于域模式,从左上角的下拉菜单里选择合适的配置集。
- 展开控制台左侧的 Subsystems 菜单,然后展开 Connector 菜单。
- 选择 Datasources。
- 选择 XA Datasource 标签页。
编辑数据源
- 从 Available XA Datasources 列表里选择相关的数据源。XA 数据源属性显示在下面的 Attributes 面板上。
- 选择 Edit 按钮来编辑数据源属性。
- 编辑 XA 数据源属性并在完成时选择 Save 按钮。
已完成对 XA 数据源的配置。这些修改在 standalone.xml
或 domain.xml
文件以及管理界面里都可见。
- 要创建新的数据源,请参考:第 6.4.1 节 “用管理界面创建 XA 数据源”。
- 要删除数据源,请参考:第 6.4.3 节 “用管理界面删除 XA 数据源”。
6.4.3. 用管理界面删除 XA 数据源
本节涵盖用管理控制台或管理 CLI 从 JBoss EAP 6 删除 XA 数据源所需的步骤。
过程 6.10. 用管理 CLI 或管理控制台删除 XA 数据源
管理 CLI
- 运行下列命令来删除 XA 数据源:
xa-data-source remove --name=XA_DATASOURCE_NAME
管理控制台
进入管理控制台的 Datasources 面板
- 从控制台顶部选择 Configuration 标签页。
- 对于域模式,从左上角的下拉菜单里选择合适的配置集。
- 展开控制台左侧的 Subsystems 菜单,然后展开 Connector 菜单。
- 选择 Datasources。
- 选择 XA Datasource 标签页。
- 选择要删除的 XA 数据源,然后点击 Remove 按钮来永久地删除这个 XA 数据源。
XA 数据源已从服务器删除。
- 要添加新的 XA 数据源,请参考:第 6.4.1 节 “用管理界面创建 XA 数据源”。
6.4.4. XA Recovery
6.4.4.1. 关于 XA Recovery 模块
com.arjuna.ats.jta.recovery.XAResourceRecovery
。
6.4.4.2. 配置 XA Recovery 模块
表 6.2. 常用的配置属性
属性 | 描述 |
---|---|
recovery-username |
recovery 模块应该用来连接资源进行恢复的用户名。
|
recovery-password |
recovery 模块应该用来连接资源进行恢复的密码。
|
recovery-security-domain |
recovery 模块应该用来连接资源进行恢复的安全域。
|
recovery-plugin-class-name |
如果你需要使用自定义的 recovery 模块,请将这个属性设置为模块的全限定名。这个模块应该继承
com.arjuna.ats.jta.recovery.XAResourceRecovery 类。
|
recovery-plugin-properties |
如果你使用了要求设置属性的自定义 recovery 模块,请将这个属性设置为用逗号隔开的 key=value 对的列表。
|
供应商专有的配置信息
- Oracle
- 如果错误地配置了 Oracle 数据源,您可能会在日志输出里看到这样的错误:
WARN [com.arjuna.ats.jta.logging.loggerI18N] [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR
要解决这个错误,请确保recovery-username
里配置的 Oracle 用户可以访问恢复所需的表。下面是安装了 Oracle bug 5945463 补丁的 Oracle 11g 或 Oracle 10g R2 实例的正确 Grant SQL 语句。GRANT SELECT ON sys.dba_pending_transactions TO recovery-username; GRANT SELECT ON sys.pending_trans$ TO recovery-username; GRANT SELECT ON sys.dba_2pc_pending TO recovery-username; GRANT EXECUTE ON sys.dbms_xa TO recovery-username;
如果你使用了 11g 以前的 Oracle 11 版本,请将最后的EXECUTE
语句修改为:GRANT EXECUTE ON sys.dbms_system TO recovery-username;
- PostgreSQL
- 关于启用 pepared (也就是 XA)事务的说明请阅读 PostgreSQL 文档。PostgreSQL 的 JDBC 驱动的 8.4-701 版本在
org.postgresql.xa.PGXAConnection
里有一个程序错误,它在某些情况下会中断恢复。在更新的版本里我们会修复这个问题。 - MySQL
- 根据 http://bugs.mysql.com/bug.php?id=12161,XA 事务恢复在 MySQL 5 的某些版本里无法运行。MySQL 6.1 里已解决了这个问题。详情请参考 bug URL 或 MySQL 文档。
- IBM DB2
- IBM DB2 期望
XAResource.recover
方法只是在应用服务器发生崩溃或故障后重启时的重同步阶段才被调用。这是 DB2 实现里的设计问题,超出了本文档的范畴。 - Sybase
- Sybase 期望在数据库启用 XA 事务。如果没有正确的数据库配置,XA 事务将无法工作。
enable xact coordination
启用或禁用 Adaptive Server 事务协调(transaction coordination)服务。当启用这个参数时,Adaptive Server 确保对远程 Adaptive Server 数据提交或用原始事务进行回滚。要启用事务协调,请使用:sp_configure 'enable xact coordination', 1
.
6.5. 数据源安全性
6.5.1. 关于数据源安全性
例 6.8. 安全域示例
<security> <security-domain>mySecurityDomain</security-domain> </security>
例 6.9. 密码阀示例
<security> <user-name>admin</user-name> <password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password> </security>
6.6. 数据源配置
6.6.1. 数据源参数
表 6.3. XA 和非 XA 数据源共用的数据源参数
参数 | 描述 |
---|---|
jndi-name | 数据源的唯一 JNDI 名称。 |
pool-name | 数据源的管理池的名称。 |
enabled | 是否启用数据源 |
use-java-context |
是否绑定数据源到全局 JNDI。
|
spy |
启用 JDBC 层的
spy 功能。这会将所有 JDBC 通讯记录到数据源。请注意 logging 子系统里的日志类别 jboss.jdbc.spy 的级别也必须设置为 DEBUG 。
|
use-ccm | 启用缓存连接管理者。 |
new-connection-sql | 当连接被添加到连接池时会执行的 SQL 语句。 |
transaction-isolation |
下列值之一:
|
url-delimiter | 用于高可用性(HA)群集数据库的 connection-url 的分隔符。 |
url-selector-strategy-class-name | 实现 org.jboss.jca.adapters.jdbc.URLSelectorStrategy 接口的类。 |
security |
包含设置安全性的子元素。请参考 表 6.8 “安全性参数”。
|
validation |
包含设置有效性的子元素。 请参考 表 6.9 “用于检验的参数”。
|
timeout |
包含设置超时的子元素。请参考 表 6.10 “超时参数”。
|
statement |
包含设置语句的子元素。请参考 表 6.11 “语句参数”。
|
表 6.4. Non-XA 数据源参数
参数 | 描述 |
---|---|
jta | 为非 XA 数据源启动 JTA 集成。不适用于 XA 数据源。 |
connection-url | JDBC 驱动连接的 URL。 |
driver-class | JDBC 驱动类的全限定名。 |
connection-property |
传递给
Driver.connect(url,props) 方法的任意连接属性。每个 connection-property 都指定一个字符串/值对。属性名称来自元素名称,而值来自元素的内容。
|
pool |
包含设置池的子元素。请参考 表 6.6 “non-XA 和 XA 数据源公用的池参数”。
|
表 6.5. XA 数据源参数
参数 | 描述 |
---|---|
xa-datasource-property |
分配给
XADataSource 类实现的属性。通过 name=value 指定。如果存在 setName 格式的 setter 方法,这个属性将通过调用 setName(value) 格式的 setter 方法来设置。
|
xa-datasource-class | javax.sql.XADataSource 实现的全限定名。
|
driver |
对包含 JDBC 驱动的 classloader 模块的唯一引用。有效的格式是 driverName#majorVersion.minorVersion。
|
xa-pool |
包含设置池的子元素。请参考 表 6.6 “non-XA 和 XA 数据源公用的池参数” 和 表 6.7 “XA 池参数”。
|
recovery |
包含设置恢复的子元素。请参考 表 6.12 “恢复参数”。
|
表 6.6. non-XA 和 XA 数据源公用的池参数
参数 | 描述 |
---|---|
min-pool-size | 池里可保留的连接的最小数量。 |
max-pool-size | 池里可保留的连接的最大数量。 |
prefill | 是否预先填充连接池。空的元素表示 true 值。默认为 false 。 |
use-strict-min | pool-size 是否是严格规定的。默认为 false 。 |
flush-strategy |
在发生错误时是否冲刷池。有效值为:
默认值为
FailingConnectionOnly 。
|
allow-multiple-users | 指定是否有多个用户将通过 getConnection(user, password) 访问数据源,且内部池类型是否应该计入在内。 |
表 6.7. XA 池参数
参数 | 描述 |
---|---|
is-same-rm-override | javax.transaction.xa.XAResource.isSameRM(XAResource) 类是否返回 true 或 false 。 |
interleaving | 是否启用 XA 连接工厂的 interleaving。 |
no-tx-separate-pools |
是否为每个上下文创建单独的子池。对于 Oracel 数据源来说这是必需的,它不允许 XA 连接既在 JTA 内部又在外部使用。
使用这个选项将导致您的池大小两倍于
max-pool-size ,因为这实际会创建两个池。
|
pad-xid | 是否拆分 Xid。 |
wrap-xa-resource |
是否将 XAResource 包裹在
org.jboss.tm.XAResourceWrapper 实例里。
|
表 6.8. 安全性参数
参数 | 描述 |
---|---|
user-name | 创建新连接使用的用户名。 |
password | 创建新连接使用的密码。 |
security-domain | 非 XA 数据源参数 |
reauth-plugin | 定义一个重验证插件以用于重新验证物理连接。 |
表 6.9. 用于检验的参数
参数 | 描述 |
---|---|
valid-connection-checker |
提供
SQLException.isValidConnection(Connection e) 方法来检验连接的 org.jboss.jca.adaptors.jdbc.ValidConnectionChecker 接口的实现。异常表示连接已被销毁。它覆盖了 check-valid-connection-sql 参数(如果存在)。
|
check-valid-connection-sql | 检查池连接有效性的 SQL 语句。当从池里获取受管连接进行使用时它会被调用。 |
validate-on-match |
指定当连接工厂试图对给定的集合匹配受管连接时是否执行连接级别的检验。
我们通常不会同时指定
validate-on-match 和background-validation 为 true。但客户在使用连接前必须进行检验时则需要 Validate-on-match 。这个参数默认为 false。
|
background-validation |
指定连接在背景线程上进行检验。背景检验不和
validate-on-match 一起使用是一种性能优化。如果 validate-on-match 为 true 时,使用 background-validation 可能导致冗余的检查。背景检验可能会让用户用到有问题的连接(连接在返回给客户和检验扫描之间可能会出现问题),所以客户应用程序必须考虑到这种可能性。
|
background-validation-millis | 背景检验运行的时间(毫秒)。 |
use-fast-fail |
如果为 true,在第一次尝试时如果连接无效则失败。默认为
false 。
|
stale-connection-checker |
提供 Boolean
isStaleConnection(SQLException e) 方法的 org.jboss.jca.adapters.jdbc.StaleConnectionChecker 实例。如果这个方法返回 true ,异常将包裹在 org.jboss.jca.adapters.jdbc.StaleConnectionException (SQLException 的子类)里。
|
exception-sorter |
提供 Boolean
isExceptionFatal(SQLException e) 方法的 org.jboss.jca.adapters.jdbc.ExceptionSorter 实例。这个方法检验异常是否作为 connectionErrorOccurred 消息传播到所有的 javax.resource.spi.ConnectionEventListener 实例上。
|
表 6.10. 超时参数
参数 | 描述 |
---|---|
use-try-lock | 使用 tryLock() 而不是 lock() 。在指定秒数内试图获取锁,而不是在锁不可用时立即失败。默认值为 60 秒。如果超时为 5 分钟,则应设置 <use-try-lock> 300</use-try-lock> 。 |
blocking-timeout-millis | 等待连接时阻塞的最长时间(毫秒)。超过这个时间后,异常将被抛出。这只是在等待连接许可时阻塞,如果创建新连接花费很长时间并不会抛出异常。默认值为 30000,也就是 30 秒。 |
idle-timeout-minutes |
在空闲连接关闭前的最长等待时间(分钟)。实际的最长时间取决于 idleRemover 扫描时间,它是任何池的最小
idle-timeout-minutes 的一半。
|
set-tx-query-timeout |
是否根据事务超时前剩下的时间设置查询超时。如果没有事务存在则使用任何配置好的查询超时时间。默认为
false 。
|
query-timeout | 查询的超时时间(秒)。默认是无超时。 |
allocation-retry | 在抛出异常前,重新尝试分配连接的次数。默认为 0 ,异常将在第一次失败时抛出。 |
allocation-retry-wait-millis |
在重新分配连接前应等待的时间(毫秒)。默认值是 5000,也就是 5 秒。
|
xa-resource-timeout |
如果为非零值,这个值将传递给
XAResource.setTransactionTimeout 方法。
|
表 6.11. 语句参数
参数 | 描述 |
---|---|
track-statements |
当连接返回池且语句返回到 prepared 语句缓存时是否检测未关闭的语句。如果为 false,则不会对语句进行追踪。
有效值
|
prepared-statement-cache-size | 每个连接的 prepared 语句的个数,存在于 Least Recently Used (LRU) 缓存里。 |
share-prepared-statements |
是否两次请求相同的底层 prepared 语句而不关闭它。默认是
false 。
|
表 6.12. 恢复参数
参数 | 描述 |
---|---|
recover-credential | 安全域用于恢复的用户名/密码对。 |
recover-plugin |
用于恢复的
org.jboss.jca.core.spi.recoveryRecoveryPlugin 类的实现。
|
6.6.2. 数据源连接 URL
表 6.13. 数据源连接 URL
数据源 | 数据源 URL |
---|---|
PostgreSQL | jdbc:postgresql://SERVER_NAME:PORT/DATABASE_NAME |
MySQL | jdbc:mysql://SERVER_NAME:PORT/DATABASE_NAME |
Oracle | jdbc:oracle:thin:@ORACLE_HOST:PORT:ORACLE_SID |
IBM DB2 | jdbc:db2://SERVER_NAME:PORT/DATABASE_NAME |
Microsoft SQLServer | jdbc:microsoft:sqlserver://SERVER_NAME:PORT;DatabaseName=DATABASE_NAME |
6.6.3. 数据源扩展
表 6.14. 数据源扩展
数据源扩展 | 配置参数 | 描述 |
---|---|---|
org.jboss.jca.adapters.jdbc.spi.ExceptionSorter | <exception-sorter> | 检查 SQLException 对于抛出它的连接是否是毁灭性的 |
org.jboss.jca.adapters.jdbc.spi.StaleConnection | <stale-connection-checker> | 将过时的 SQLExceptions 包裹在 org.jboss.jca.adapters.jdbc.StaleConnectionException |
org.jboss.jca.adapters.jdbc.spi.ValidConnection | <valid-connection-checker> | 检查连接是否有效,能为应用程序所用。 |
扩展实现
- 通用
- org.jboss.jca.adapters.jdbc.extensions.novendor.NullExceptionSorter
- org.jboss.jca.adapters.jdbc.extensions.novendor.NullStaleConnectionChecker
- org.jboss.jca.adapters.jdbc.extensions.novendor.NullValidConnectionChecker
- org.jboss.jca.adapters.jdbc.extensions.novendor.JDBC4ValidConnectionChecker
- PostgreSQL
- org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter
- org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
- MySQL
- org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter
- org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLReplicationValidConnectionChecker
- org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker
- IBM DB2
- org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter
- org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker
- org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker
- Sybase
- org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter
- org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker
- Microsoft SQLServer
- org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker
- Oracle
- org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter
- org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker
- org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker
6.6.4. 查看数据源统计
jdbc
和 pool
的统计信息:
过程 6.11.
/subsystem=datasources/data-source=ExampleDS/statistics=jdbc:read-resource(include-runtime=true)
/subsystem=datasources/data-source=ExampleDS/statistics=pool:read-resource(include-runtime=true)
注意
include-runtime=true
参数,因为所有统计都是 runtime 信息。默认值为 false
。
6.6.5. 数据源统计
下表包含受支持的数据源核心统计信息列表:
表 6.15. 核心统计信息
名称 | 描述 |
---|---|
ActiveCount |
活动连接的数量。每个连接都是正在被应用程序使用或是在池里备用。
|
AvailableCount |
池里可用连接的数量。
|
AverageBlockingTime |
获取池里排他锁时阻塞的平均时间。单位为毫秒。
|
AverageCreationTime |
创建连接所花费的平均时间。单位为毫秒。
|
CreatedCount |
创建的连接数量。
|
DestroyedCount |
销毁的连接数量。
|
InUseCount |
正在使用的连接的数量。
|
MaxCreationTime |
创建连接所花费的最长时间。单位为毫秒。
|
MaxUsedCount |
使用的连接的最大数目。
|
MaxWaitCount |
同一时间等待连接的请求的最大数目。
|
MaxWaitTime |
等待池里排他锁所花费的最长时间。
|
TimedOut |
超时连接的数量。
|
TotalBlockingTime |
等待池里排他锁总共所花费的时间。单位为毫秒。
|
TotalCreationTime |
创建连接总共所花费的时间。单位为毫秒。
|
WaitCount |
需要等待连接的请求的数量。
|
下表包含受支持的数据源 JDBC 统计信息列表:
表 6.16. JDBC 统计信息
名称 | 描述 |
---|---|
PreparedStatementCacheAccessCount |
语句缓存被访问的次数。
|
PreparedStatementCacheAddCount |
添加到语句缓存里的语句数量。
|
PreparedStatementCacheCurrentSize |
目前缓存在语句缓存里的 prepared 和可调用的语句的数量。
|
PreparedStatementCacheDeleteCount |
从缓存里丢弃的语句的数量。
|
PreparedStatementCacheHitCount |
语句在缓存里被使用的次数。
|
PreparedStatementCacheMissCount |
对缓存里语句的请求无法被满足的次数。
|
Core
和 JDBC
的统计信息:
/subsystem=datasources/data-source=ExampleDS/statistics=pool:write-attribute(name=statistics-enabled,value=true)
/subsystem=datasources/data-source=ExampleDS/statistics=jdbc:write-attribute(name=statistics-enabled,value=true)
6.7. 数据源示例
6.7.1. PostgreSQL 数据源示例
例 6.10.
<datasources> <datasource jndi-name="java:jboss/PostgresDS" pool-name="PostgresDS"> <connection-url>jdbc:postgresql://localhost:5432/postgresdb</connection-url> <driver>postgresql</driver> <security> <user-name>admin</user-name> <password>admin</password> </security> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"></valid-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"></exception-sorter> </validation> </datasource> <drivers> <driver name="postgresql" module="org.postgresql"> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> </driver> </drivers> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="org.postgresql"> <resources> <resource-root path="postgresql-9.1-902.jdbc4.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
6.7.2. PostgreSQL XA 数据源示例
例 6.11.
<datasources> <xa-datasource jndi-name="java:jboss/PostgresXADS" pool-name="PostgresXADS"> <driver>postgresql</driver> <xa-datasource-property name="ServerName">localhost</xa-datasource-property> <xa-datasource-property name="PortNumber">5432</xa-datasource-property> <xa-datasource-property name="DatabaseName">postgresdb</xa-datasource-property> <security> <user-name>admin</user-name> <password>admin</password> </security> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"> </valid-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"> </exception-sorter> </validation> </xa-datasource> <drivers> <driver name="postgresql" module="org.postgresql"> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> </driver> </drivers> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="org.postgresql"> <resources> <resource-root path="postgresql-9.1-902.jdbc4.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
6.7.3. MySQL 数据源示例
例 6.12.
<datasources> <datasource jndi-name="java:jboss/MySqlDS" pool-name="MySqlDS"> <connection-url>jdbc:mysql://mysql-localhost:3306/jbossdb</connection-url> <driver>mysql</driver> <security> <user-name>admin</user-name> <password>admin</password> </security> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"></valid-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"></exception-sorter> </validation> </datasource> <drivers> <driver name="mysql" module="com.mysql"> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> </driver> </drivers> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-5.0.8-bin.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
6.7.4. MySQL XA 数据源示例
例 6.13.
<datasources> <xa-datasource jndi-name="java:jboss/MysqlXADS" pool-name="MysqlXADS"> <driver>mysql</driver> <xa-datasource-property name="ServerName">localhost</xa-datasource-property> <xa-datasource-property name="DatabaseName">mysqldb</xa-datasource-property> <security> <user-name>admin</user-name> <password>admin</password> </security> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"></valid-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"></exception-sorter> </validation> </xa-datasource> <drivers> <driver name="mysql" module="com.mysql"> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> </driver> </drivers> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-5.0.8-bin.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
6.7.5. Oracle 数据源示例
注意
例 6.14.
<datasources> <datasource jndi-name="java:/OracleDS" pool-name="OracleDS"> <connection-url>jdbc:oracle:thin:@localhost:1521:XE</connection-url> <driver>oracle</driver> <security> <user-name>admin</user-name> <password>admin</password> </security> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"></valid-connection-checker> <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"></stale-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"></exception-sorter> </validation> </datasource> <drivers> <driver name="oracle" module="com.oracle"> <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class> </driver> </drivers> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="com.oracle"> <resources> <resource-root path="ojdbc6.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
6.7.6. Oracle XA 数据源示例
注意
重要
user
的值是连接 JBoss 到 Oracle 的用户:
- GRANT SELECT ON sys.dba_pending_transactions TO user;
- GRANT SELECT ON sys.pending_trans$ TO user;
- GRANT SELECT ON sys.dba_2pc_pending TO user;
- GRANT EXECUTE ON sys.dbms_xa TO user; (If using Oracle 10g R2 (patched) or Oracle 11g)ORGRANT EXECUTE ON sys.dbms_system TO user; (If using an unpatched Oracle version prior to 11g)
例 6.15.
<datasources> <xa-datasource jndi-name="java:/XAOracleDS" pool-name="XAOracleDS"> <driver>oracle</driver> <xa-datasource-property name="URL">jdbc:oracle:oci8:@tc</xa-datasource-property> <security> <user-name>admin</user-name> <password>admin</password> </security> <xa-pool> <is-same-rm-override>false</is-same-rm-override> <no-tx-separate-pools /> </xa-pool> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"></valid-connection-checker> <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"></stale-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"></exception-sorter> </validation> </xa-datasource> <drivers> <driver name="oracle" module="com.oracle"> <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class> </driver> </drivers> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="com.oracle"> <resources> <resource-root path="ojdbc6.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
6.7.7. Microsoft SQLServer 数据源示例
例 6.16.
<datasources> <datasource jndi-name="java:/MSSQLDS" pool-name="MSSQLDS"> <connection-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyDatabase</connection-url> <driver>sqlserver</driver> <security> <user-name>admin</user-name> <password>admin</password> </security> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"></valid-connection-checker> </validation> </datasource> <drivers> <driver name="sqlserver" module="com.microsoft"> <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class> </driver> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="com.microsoft"> <resources> <resource-root path="sqljdbc4.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
6.7.8. Microsoft SQLServer XA 数据源示例
例 6.17.
<datasources> <xa-datasource jndi-name="java:/MSSQLXADS" pool-name="MSSQLXADS"> <driver>sqlserver</driver> <xa-datasource-property name="ServerName">localhost</xa-datasource-property> <xa-datasource-property name="DatabaseName">mssqldb</xa-datasource-property> <xa-datasource-property name="SelectMethod">cursor</xa-datasource-property> <security> <user-name>admin</user-name> <password>admin</password> </security> <xa-pool> <is-same-rm-override>false</is-same-rm-override> </xa-pool> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"></valid-connection-checker> </validation> </xa-datasource> <drivers> <driver name="sqlserver" module="com.microsoft"> <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class> </driver> </drivers> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="com.microsoft"> <resources> <resource-root path="sqljdbc4.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
6.7.9. IBM DB2 数据源示例
例 6.18.
<datasources> <datasource jndi-name="java:/DB2DS" pool-name="DB2DS"> <connection-url>jdbc:db2:ibmdb2db</connection-url> <driver>ibmdb2</driver> <pool> <min-pool-size>0</min-pool-size> <max-pool-size>50</max-pool-size> </pool> <security> <user-name>admin</user-name> <password>admin</password> </security> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker"></valid-connection-checker> <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker"></stale-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter"></exception-sorter> </validation> </datasource> <drivers> <driver name="ibmdb2" module="com.ibm"> <xa-datasource-class>com.ibm.db2.jdbc.DB2XADataSource</xa-datasource-class> </driver> </drivers> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="com.ibm"> <resources> <resource-root path="db2jcc4.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
6.7.10. IBM DB2 XA 数据源示例
例 6.19.
<datasources> <xa-datasource jndi-name="java:/DB2XADS" pool-name="DB2XADS"> <driver>ibmdb2</driver> <xa-datasource-property name="DatabaseName">ibmdb2db</xa-datasource-property> <xa-datasource-property name="ServerName">hostname</xa-datasource-property> <xa-datasource-property name="PortNumber">port</xa-datasource-property> <security> <user-name>admin</user-name> <password>admin</password> </security> <xa-pool> <is-same-rm-override>false</is-same-rm-override> </xa-pool> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker"></valid-connection-checker> <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker"></stale-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter"></exception-sorter> </validation> <recovery> <recover-plugin class-name="org.jboss.jca.core.recovery.ConfigurableRecoveryPlugin"> <config-property name="EnableIsValid">false</config-property> <config-property name="IsValidOverride">false</config-property> <config-property name="EnableClose">false</config-property> </recover-plugin> </recovery> </xa-datasource> <drivers> <driver name="ibmdb2" module="com.ibm"> <xa-datasource-class>com.ibm.db2.jcc.DB2XADataSource</xa-datasource-class> </driver> </drivers> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="com.ibm"> <resources> <resource-root path="db2jcc4.jar"/> <resource-root path="db2jcc_license_cisuz.jar"/> <resource-root path="db2jcc_license_cu.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
6.7.11. Sybase 数据源示例
例 6.20.
<datasources> <datasource jndi-name="java:jboss/SybaseDB" pool-name="SybaseDB" enabled="true"> <connection-url>jdbc:sybase:Tds:localhost:5000/DATABASE?JCONNECT_VERSION=6</connection-url> <security> <user-name>admin</user-name> <password>admin</password> </security> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker"></valid-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter"></exception-sorter> </validation> </datasource> <drivers> <driver name="sybase" module="com.sybase"> <datasource-class>com.sybase.jdbc4.jdbc.SybDataSource</datasource-class> <xa-datasource-class>com.sybase.jdbc4.jdbc.SybXADataSource</xa-datasource-class> </driver> </drivers> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="com.sybase"> <resources> <resource-root path="jconn2.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
6.7.12. Sybase XA 数据源示例
例 6.21.
<datasources> <xa-datasource jndi-name="java:jboss/SybaseXADS" pool-name="SybaseXADS" enabled="true"> <xa-datasource-property name="NetworkProtocol">Tds</xa-datasource-property> <xa-datasource-property name="ServerName">myserver</xa-datasource-property> <xa-datasource-property name="PortNumber">4100</xa-datasource-property> <xa-datasource-property name="DatabaseName">mydatabase</xa-datasource-property> <security> <user-name>admin</user-name> <password>admin</password> </security> <validation> <background-validation>true</background-validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseValidConnectionChecker"></valid-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.sybase.SybaseExceptionSorter"></exception-sorter> </validation> </xa-datasource> <drivers> <driver name="sybase" module="com.sybase"> <datasource-class>com.sybase.jdbc4.jdbc.SybDataSource</datasource-class> <xa-datasource-class>com.sybase.jdbc4.jdbc.SybXADataSource</xa-datasource-class> </driver> </drivers> </datasources>
module.xml
文件示例。
<module xmlns="urn:jboss:module:1.1" name="com.sybase"> <resources> <resource-root path="jconn2.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
第 7 章 配置模块
7.1. 介绍
7.1.1. 模块
- 静态模块
- 静态模块是在应用服务器的
EAP_HOME/modules/
目录里进行预定义的。每个子目录都代表一个模块并包含一个配置文件(module.xml
)或所需的 JAR 文件。模块的名称是在module.xml
文件里定义的。所有应用服务器提供的 API 都是作为静态模块提供的,包括 Java EE API 以及其他 API(如 Jboss Logging)。例 7.1. 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.15.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
模块名com.mysql
应该匹配这个模块的目录结构。JBoss EAP 里提供的模块位于JBOSS_HOME/modules
里的system
目录。这使它们和第三方体的模块隔离开来。Red Hat 提供的任何高于 JBoss EAP 6.1 或更高版本的分层产品也会安装它们的模块到system
目录里。如果许多使用相同第三方库的应用程序部署在相同的服务器上,那么创建自定义静态模块就很有用。不是将这些库捆绑到每个应用程序,而是由 JBoss 管理员创建和安装包含这些库的模块。然后应用程序就可以声明对自定义静态模块的显性依赖关系。用户必须确保使用一个目录对应一个模块的格式将自定义的模块安装至JBOSS_HOME/modules
目录。这可以确保系统加载已存在于system
目录的模块的自定义版本,而不是系统附带的版本。因此,用户提供的模块将优先于系统模块。如果您使用JBOSS_MODULE_PATH
环境变量来修改 JBoss EAP 搜索模块的位置,那么产品将查找指定的位置中的system
子目录结构。system
结构必须存在于用JBOSS_MODULE_PATH
指定的位置中的某处。 - 动态模块
- 应用服务器为每个 JAR 或 WAR 部署(或 EAR 里的子部署)创建和加载动态模块。动态模块的名称源自部署的归档的名称。因为部署是作为模块加载的,它们可以配置依赖关系并被其他部署作为依赖关系使用。
7.1.2. 全局模块
7.1.3. 模块的依赖关系
例 7.2. 模块依赖关系
- 模块 A 声明了对模块 C 的显性依赖关系,或者
- 模块 B 导出它对模块 C 的依赖关系。
7.1.4. 子部署类加载器的隔离
7.2. 对所有的部署禁用子部署模块隔离(Sub-Deployment Module Isolation)
警告
停止服务器
暂停 JBoss EAP 6 服务器。打开服务器配置文件
在文本编辑器里打开服务器配置文件。对于受管域和独立服务器这个文件是不同的。此外也可能使用非默认的位置和文件名称。对于受管域和独立服务器,默认的配置文件分别是domain/configuration/domain.xml
和standalone/configuration/standalone.xml
。定位 EE 子系统配置
在配置文件里找到 EE 子系统配置元素。配置文件的<profile>
元素包含了几个子系统元素。EE 子系统元素的命名空间是urn:jboss:domain:ee:1.1
。<profile> ... <subsystem xmlns="urn:jboss:domain:ee:1.1" /> ...
默认的配置有一个自闭合的标签,但自定义的配置可能有单独的开和合标签(里面可能还有其他元素),如:<subsystem xmlns="urn:jboss:domain:ee:1.1" ></subsystem>
如果需要则替换自闭合的标签
如果 EE Subsystem 元素是一个单个的自闭合标签,那么请用合适的开和合标签来替换,如:<subsystem xmlns="urn:jboss:domain:ee:1.1" ></subsystem>
添加 ear-subdeployments-isolated 元素
将ear-subdeployments-isolated
元素添加为 EE Subsystem 元素的子元素并添加false
内容,如:<subsystem xmlns="urn:jboss:domain:ee:1.1" ><ear-subdeployments-isolated>false</ear-subdeployments-isolated></subsystem>
期待服务器
重新启动 JBoss EAP 6 服务器以使用新的配置运行。
服务器现在对于所有部署都禁用了 Subdeployment Module Isolation。
7.3. 添加模块到所有部署里
必须具备的条件
- 您必须知道要配置为全局模块的模块的名称。关于 JBoss EAP 6 附带的静态模块的列表,请参考 第 7.5.1 节 “包括的模块”。如果这个模块是另外一个部署,请参考 第 7.5.2 节 “动态模块命名” 来确定模块名。
过程 7.1. 添加模块到全局模块列表里
- 登陆到管理控制台。第 3.4.2 节 “登录到管理控制台”
- 进入 EE Subsystem 面板。
- 从控制台顶部选择 Configuration 标签页。
仅用于域模式
- 从左上角的下拉菜单里选择合适的配置集。
- 展开控制台左侧的 Subsystems 菜单。
- 从控制台左侧的菜单里选择 Container → EE。
- 点击 Subsystem Defaults 部分的 Add 按钮。Create Module 对话框将会出现。
- 输入模块名以及模块 slot(可选)。
- 点击 Save 按钮来添加新的全局模块,或者点击 Cancel 链接中止。
- 如果您点击了 Save 按钮,对话框将关闭而指定的模块将被添加到全局模块列表里。
- 如果您点击了 Cancel,对话框将关闭且不会保存任何修改。
添加到全局模块列表的模块将作为依赖关系添加到每个部署里。
7.4. 定义外部 JBoss Modules 目录
在默认情况下,JBoss EAP 查找 EAP_HOME/modules/
目录里的模块。通过定义 JBOSS_MODULEPATH
环境变量或在启动配置文件里设置变量,您可以指引 JBoss EAP 查找一个或多个外部目录。本节描述了这两个方法。
过程 7.2. 设置 JBOSS_MODULEPATH 环境变量
- 要指定一个或更多的外部模块目录,请定义环境变量
JBOSS_MODULEPATH
。在 Linux 里,请使用冒号来隔开目录列表。例如:export JBOSS_MODULEPATH=EAP_HOME/modules/:/home/username/external/modules/directory/
在 Windows 里,请使用分号来隔开目录列表。例如:SET JBOSS_MODULEPATH=EAP_HOME\modules\;D:\JBoss-Modules\
过程 7.3. 在 Startup 配置文件里设置 JBOSS_MODULEPATH 环境变量
- 如果您不愿意设置全局环境变量,您可以在 JBoss EAP 启动配置文件里设置
JBOSS_MODULEPATH
变量。如果您运行的是独立服务器,配置文件是EAP_HOME/bin/standalone.conf
;如果服务器运行在受管域里,配置文件是EAP_HOME/bin/domain.conf
。下面是在standalone.conf
文件里设置JBOSS_MODULEPATH
变量的命令示例。JBOSS_MODULEPATH="EAP_HOME/modules/:/home/username/external/modules/directory/"
7.5. 参考
7.5.1. 包括的模块
7.5.2. 动态模块命名
- WAR 和JAR 文件的部署是用下列格式命名的:
deployment.DEPLOYMENT_NAME
例如,inventory.war
和store.jar
的模块名分别是deployment.inventory.war
和deployment.store.jar
。 - EAR 里的子部署是用下列格式命名的:
deployment.EAR_NAME.SUBDEPLOYMENT_NAME
例如,accounts.ear
里的reports.war
子部署的模块名将是deployment.accounts.ear.reports.war
。
第 8 章 Jsvc
8.1. 介绍
8.1.1. 关于 Jsvc
注意
Native Utilities for Windows Server
的 prunsrv.exe
。
8.1.2. 用 Jsvc 启动和停止 JBoss EAP
必须具备的条件
- 如果 JBoss EAP 6 是用 ZIP 方式安装的:
- 从 Red Hat 客户门户下载并安装 Native Utilities 软件包。请参考《安装指南》里的『安装 Native 组件和 Native 工具(ZIP/安装程序)』章节。
- 创建将运行JBoss EAP 6 实例的用户帐号。用来启动和停止服务器的帐号必须拥有读取和写入安装 JBoss EAP 的目录的权限。
- 如果 JBoss EAP 是用 RPM 模式安装的,请安装 apache-commons-daemon-jsvc-eap6 软件包。请参考《安装指南》里的『安装 Native 组件和 Native 工具(RPM 安装)』章节。
下面的说明是关于在独立模式下启动和停止 JBoss EAP 的。
表 8.1. ZIP 安装模式下的 Jsvc 文件位置 - 独立模式
参考文件说明 | 文件位置 |
---|---|
EAP-HOME |
${eap-installation-location}/jboss-eap-${version}
|
JSVC-BIN |
EAP_HOME/modules/system/layers/base/native/sbin/jsvc
|
JSVC-JAR |
EAP_HOME/modules/system/layers/base/native/sbin/commons-daemon.jar
|
CONF-DIR |
EAP_HOME/standalone/configuration
|
LOG-DIR |
EAP_HOME/standalone/log
|
表 8.2. RPM 安装模式下的 Jsvc 文件位置 - 独立模式
参考文件说明 | 文件位置 |
---|---|
EAP-HOME |
/usr/share/jbossas
|
JSVC-BIN |
/usr/bin/jsvc-eap6/jsvc
|
JSVC-JAR |
EAP_HOME/modules/system/layers/base/native/sbin/commons-daemon.jar
|
CONF-DIR |
/etc/jbossas/standalone
|
LOG-DIR |
/var/log/jbossas/standalone
|
以独立模式启动 JBoss EAP
JSVC_BIN \ -outfile LOG_DIR/jsvc.out.log \ -errfile LOG_DIR/jsvc.err.log \ -pidfile LOG_DIR/jsvc.pid \ -user jboss \ -D[Standalone] -XX:+UseCompressedOops -Xms1303m \ -Xmx1303m -XX:MaxPermSize=256m \ -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman \ -Djava.awt.headless=true \ -Dorg.jboss.boot.log.file=LOG_DIR/server.log \ -Dlogging.configuration=file:CONF_DIR/logging.properties \ -Djboss.modules.policy-permissions \ -cp EAP_HOME/jboss-modules.jar:JSVC_JAR \ -Djboss.home.dir=EAP_HOME \ -Djboss.server.base.dir=EAP_HOME/standalone \ @org.jboss.modules.Main -start-method main \ -mp EAP_HOME/modules \ -jaxpmodule javax.xml.jaxp-provider \ org.jboss.as.standalone
停止以独立模式运行的 JBoss EAP
JSVC_BIN \ -stop \ -outfile LOG_DIR/jsvc.out.log \ -errfile LOG_DIR/jsvc.err.log \ -pidfile LOG_DIR/jsvc.pid \ -user jboss \ -D[Standalone] -XX:+UseCompressedOops -Xms1303m \ -Xmx1303m -XX:MaxPermSize=256m \ -Djava.net.preferIPv4Stack=true \ -Djboss.modules.system.pkgs=org.jboss.byteman \ -Djava.awt.headless=true \ -Dorg.jboss.boot.log.file=LOG_DIR/server.log \ -Dlogging.configuration=file:CONF_DIR/logging.properties \ -Djboss.modules.policy-permissions \ -cp EAP_HOME/jboss-modules.jar:JSVC_JAR \ -Djboss.home.dir=EAP_HOME \ -Djboss.server.base.dir=EAP_HOME/standalone \ @org.jboss.modules.Main -start-method main \ -mp EAP_HOME/modules \ -jaxpmodule javax.xml.jaxp-provider \ org.jboss.as.standalone
下面的说明是关于在域模式下启动和停止 JBoss EAP 的。请注意对于域模式,您必须用 Java 主目录替换 JAVA_HOME 变量。
表 8.3. ZIP 安装模式下的 Jsvc 文件位置 - 域模式
参考文件说明 | 文件位置 |
---|---|
EAP-HOME |
${eap-installation-location}/jboss-eap-${version}
|
JSVC-BIN |
EAP_HOME/modules/system/layers/base/native/sbin/jsvc
|
JSVC-JAR |
EAP_HOME/modules/system/layers/base/native/sbin/commons-daemon.jar
|
CONF-DIR |
EAP_HOME/domain/configuration
|
LOG-DIR |
EAP_HOME/domain/log
|
表 8.4. RPM 安装模式下的 Jsvc 文件位置 - 域模式
参考文件说明 | 文件位置 |
---|---|
EAP-HOME |
/usr/share/jbossas
|
JSVC-BIN |
/usr/bin/jsvc-eap6/jsvc
|
JSVC-JAR |
EAP_HOME/modules/system/layers/base/native/sbin/commons-daemon.jar
|
CONF-DIR |
/etc/jbossas/domain
|
LOG-DIR |
/var/log/jbossas/domain
|
以域模式启动 JBoss EAP
JSVC_BIN \ -outfile LOG_DIR/jsvc.out.log \ -errfile LOG_DIR/jsvc.err.log \ -pidfile LOG_DIR/jsvc.pid \ -user jboss \ -nodetach -D"[Process Controller]" -server -Xms64m \ -Xmx512m -XX:MaxPermSize=256m \ -Djava.net.preferIPv4Stack=true \ -Djboss.modules.system.pkgs=org.jboss.byteman \ -Djava.awt.headless=true \ -Dorg.jboss.boot.log.file=LOG_DIR/process-controller.log \ -Dlogging.configuration=file:CONF_DIR/logging.properties \ -Djboss.modules.policy-permissions \ -cp "EAP_HOME/jboss-modules.jar:JSVC_JAR" \ org.apache.commons.daemon.support.DaemonWrapper \ -start org.jboss.modules.Main -start-method main \ -mp EAP_HOME/modules org.jboss.as.process-controller \ -jboss-home EAP_HOME -jvm $JAVA_HOME/bin/java \ -mp EAP_HOME/modules -- \ -Dorg.jboss.boot.log.file=LOG_DIR/host-controller.log \ -Dlogging.configuration=file:CONF_DIR/logging.properties \ -Djboss.modules.policy-permissions \ -server -Xms64m -Xmx512m -XX:MaxPermSize=256m \ -Djava.net.preferIPv4Stack=true \ -Djboss.modules.system.pkgs=org.jboss.byteman \ -Djava.awt.headless=true -- -default-jvm $JAVA_HOME/bin/java
停止以域模式运行的 JBoss EAP
JSVC_BIN \ -stop \ -outfile LOG_DIR/jsvc.out.log \ -errfile LOG_DIR/jsvc.err.log \ -pidfile LOG_DIR/jsvc.pid \ -user jboss \ -nodetach -D"[Process Controller]" -server -Xms64m \ -Xmx512m -XX:MaxPermSize=256m \ -Djava.net.preferIPv4Stack=true \ -Djboss.modules.system.pkgs=org.jboss.byteman \ -Djava.awt.headless=true \ -Dorg.jboss.boot.log.file=LOG_DIR/process-controller.log \ -Dlogging.configuration=file:CONF_DIR/logging.properties \ -Djboss.modules.policy-permissions \ -cp "EAP_HOME/jboss-modules.jar:JSVC_JAR" \ org.apache.commons.daemon.support.DaemonWrapper \ -start org.jboss.modules.Main -start-method main \ -mp EAP_HOME/modules org.jboss.as.process-controller \ -jboss-home EAP_HOME -jvm $JAVA_HOME/bin/java \ -mp EAP_HOME/modules -- \ -Dorg.jboss.boot.log.file=LOG_DIR/host-controller.log \ -Dlogging.configuration=file:CONF_DIR/logging.properties \ -Djboss.modules.policy-permissions \ -server -Xms64m -Xmx512m -XX:MaxPermSize=256m \ -Djava.net.preferIPv4Stack=true \ -Djboss.modules.system.pkgs=org.jboss.byteman \ -Djava.awt.headless=true -- -default-jvm $JAVA_HOME/bin/java
注意
第 9 章 全局 Valve
9.1. 关于 Valve
- 全局 Valve 是在服务器级别配置的,它应用于所有部署在服务器里的应用程序。配置全局 Valve 的说明位于《JBoss EAP 管理和配置指南》里。
- 在应用程序级别配置的 Valve 和应用程序部署打包在一起,它只影响专门的应用程序。配置程序级别的 Valve 的说明位于《JBoss EAP 开发指南》里。
9.2. 关于全局 Valve
9.3. 关于 Authenticator Valve
org.apache.catalina.authenticator.AuthenticatorBase
的一个子类并重写了 authenticate(Request request, Response response, LoginConfig config)
方法。
9.4. 安装 Global Valve
预备条件:
- Valve 必须已被创建且打包在 JAR 文件里。
- 必须为这个模块创建一个
module.xml
文件。关于module.xml
文件的例子,请参考 第 7.1.1 节 “模块”。
过程 9.1. 安装全局模块(Global Module)
创建模块安装目录
在应用服务器的 modules 目录里必须创建一个安装模块的目录。EAP_HOME/modules/system/layers/base/MODULENAME/main
$ mkdir -P EAP_HOME/modules/system/layers/base/MODULENAME/main
复制文件
复制 JAR 和module.xml
文件到步骤 1 创建的目录里。$ cp MyValves.jar module.xml EAP_HOME/modules/system/layers/base/MODULENAME/main
9.5. 配置全局 Valve
过程 9.2. 配置全局 Valve
启用 Valve
使用add
操作添加新的 Valve 条目。/subsystem=web/valve=VALVENAME:add(module="MODULENAME",class-name="CLASSNAME")
您需要指定下列值:VALVENAME
,用来引用应用程序配置里的 valve 的名称。MODULENAME
,包含要配置的 Valve 的模块。CLASSNAME
,模块里专有 valve 的类名。
/subsystem=web/valve=clientlimiter:add(module="clientlimitermodule",class-name="org.jboss.samplevalves.RestrictedUserAgentsValve")
可选:指定参数
如果 Valve 有配置参数,请用add-param
操作进行指定。/subsystem=web/valve=testvalve:add-param(param-name="NAME", param-value="VALUE")
/subsystem=web/valve=testvalve:add-param( param-name="restrictedUserAgents", param-value="^.*MS Web Services Client Protocol.*$" )
第 10 章 应用程序部署
10.1. 关于应用程序部署
Administration
开发
10.2. 用管理控制台进行部署
10.2.1. 在管理控制台里管理应用程序的部署
10.2.2. 用管理控制台启用已部署的应用程序
过程 10.1. 用管理控制台启用已部署的应用程序
- 从控制台的顶部选择 Runtime 标签页。
- 对于受管域,展开
Domain
菜单。 - 对于独立服务器,展开
Server
菜单。
- 选择 Manage Deployments。
- 应用程序的部署方法会根据部署到独立服务器还是受管域而有所不同。
启用独立服务器实例里的应用程序
Available Deployments 表显示所有可用的应用程序部署及其状态。- 要启用独立服务器实例里的应用程序,请选择应用程序并点击 En/Disable。
- 点击 confirm 按钮来确认应用程序将在服务器实例上启用。
启用受管域里的应用程序
Content Repository 标签页包含一个 Available Deployment Content 表显示所有可用的应用程序部署及其状态。- 要启用受管域里的应用程序,请选择要部署的应用程序。点击 Available Deployment Content 表上的 Assign。
- 选择您要添加应用程序的服务器组并点击 Save 按钮完成。
- 选择 Server Groups 标签页来查看 Server Groups 表。您的应用程序现在已部署到所选的服务器组了。
应用程序部署在相关的服务器或服务器组。
10.2.3. 用管理控制台禁用已部署的应用程序
过程 10.2. 用管理控制台禁用已部署的应用程序
- 从控制台的顶部选择 Runtime 标签页。
- 对于受管域,展开 Domain 菜单。
- 对于独立服务器,展开 Server 菜单。
- 选择 Manage Deployments。
- 禁用应用程序的方法会根据部署到独立服务器还是受管域而有所不同。
禁用独立服务器实例里已部署的应用程序
Available Deployments 表显示所有可用的应用程序部署及其状态。- 选择要禁用的应用程序。点击 En/Disable 禁用所选的应用程序。
- 点击 confirm 按钮来确认应用程序将在服务器实例上禁用。
禁用受管域里已部署的应用程序
Manage Deployments Content 屏幕包含一个 Content Repository 标签页,Available Deployment Content 表显示所有可用的应用程序部署及其状态。- 选择 Server Group 标签页来查看服务器组以及部署的应用程序的状态。
- 选择 Server Group 表里的服务器来卸载应用程序。点击 View 查看应用程序。
- 选择应用程序并点击 En/Disable 禁用所选服务器的应用程序。
- 点击 confirm 按钮来确认应用程序将在服务器实例上禁用。
- 按需要对其他服务器组重复这些步骤。Group Deployments 表里可以确认每个服务器组里的应用程序的状态。
应用程序已从相关的服务器或服务器组里卸载。
10.3. 用管理 CLI 进行部署
10.3.1. 在管理 CLI 里管理应用程序的部署
10.3.2. 用管理 CLI 在独立服务器里部署应用程序
过程 10.3. 在独立服务器里部署应用程序
运行
deploy
命令在管理 CLI 里,输入deploy
命令及应用程序部署的位置。[standalone@localhost:9999 /]
deploy /path/to/test-application.war
请注意,成功的部署不会在 CLI 里产生任何输出。
指定的应用程序已部署在独立服务器里了。
10.3.3. 用管理 CLI 卸载独立服务器里的应用程序
过程 10.4. 卸载独立服务器里的应用程序
运行
undeploy
命令在管理 CLI 里,输入undeploy
命令及应用程序部署的文件名。[standalone@localhost:9999 /]
undeploy test-application.war
请注意,成功的卸载不会在 CLI 里产生任何输出。
指定的应用程序已经卸载了。
10.3.4. 用管理 CLI 在受管域里部署应用程序
过程 10.5. 在受管域里部署应用程序
运行
deploy
命令在管理 CLI 里,输入deploy
命令及应用程序部署的位置。如要部署到所有的服务器组,可以使用--all-server-groups
参数。[domain@localhost:9999 /]
deploy /path/to/test-application.war --all-server-groups
- 或者,用
--server-groups
参数定义部署的专有服务器组。[domain@localhost:9999 /]
deploy /path/to/test-application.war --server-groups=server_group_1,server_group_2
请注意,成功的部署不会在 CLI 里产生任何输出。
指定的应用程序现在已部署在受管域的服务器组里了。
10.3.5. 用管理 CLI 卸载受管域里的应用程序
过程 10.6. 卸载受管域里的应用程序
运行
undeploy
命令在管理 CLI 里,输入undeploy
命令及应用程序部署的文件名。如果要从应用程序原来部署过的所有服务器组里卸载这个应用程序,可以使用--all-relevant-server-groups
参数。[domain@localhost:9999 /]
undeploy
test-application.war--all-relevant-server-groups
请注意,成功的卸载不会在 CLI 里产生任何输出。
指定的应用程序已经卸载了。
10.4. 用 HTTP API 进行部署
10.4.1. 用 HTTP API 部署应用程序
应用程序可以按照下列说明通过 HTTP API 进行部署。
过程 10.7. 用 DeployDmrToJson.java
部署应用程序
- 用
DeployDmrToJson.java
为 JSON 生成请求来部署应用程序。例 10.1. DeployDmrToJson.java class
import org.jboss.dmr.ModelNode; import java.net.URL; public class DeployDmrToJson { public static void main(String[] args) throws Exception { if(args.length < 1) throw new IllegalArgumentException("The first argument must be a URL"); URL url = new URL(args[0]); String[] pathElements = url.getFile().split("/"); String name = pathElements[pathElements.length-1]; ModelNode deploy = getDeploy(url.toExternalForm(), name); ModelNode undeploy = getUndeploy(name); System.out.println("Deploy\n------------------------------\n"); System.out.println("Formatted:\n" + deploy.toJSONString(false)); System.out.println("Unformatted:\n" + deploy.toJSONString(true)); System.out.println("\nUneploy\n------------------------------\n"); System.out.println("Formatted:\n" + undeploy.toJSONString(false)); System.out.println("Unformatted:\n" + undeploy.toJSONString(true)); } public static ModelNode getUndeploy(String name) { ModelNode undeployRequest = new ModelNode(); undeployRequest.get("operation").set("undeploy"); undeployRequest.get("address", "deployment").set(name); ModelNode removeRequest = new ModelNode(); removeRequest.get("operation").set("remove"); removeRequest.get("address", "deployment").set(name); ModelNode composite = new ModelNode(); composite.get("operation").set("composite"); composite.get("address").setEmptyList(); final ModelNode steps = composite.get("steps"); steps.add(undeployRequest); steps.add(removeRequest); return composite; } public static ModelNode getDeploy(String url, String name) { ModelNode deployRequest = new ModelNode(); deployRequest.get("operation").set("deploy"); deployRequest.get("address", "deployment").set(name); ModelNode addRequest = new ModelNode(); addRequest.get("operation").set("add"); addRequest.get("address", "deployment").set(name); addRequest.get("content").get(0).get("url").set(url); ModelNode composite = new ModelNode(); composite.get("operation").set("composite"); composite.get("address").setEmptyList(); final ModelNode steps = composite.get("steps"); steps.add(addRequest); steps.add(deployRequest); return composite; } }
- 按照下列说明用命令运行这个类:
例 10.2. 执行命令
java -cp .:$JBOSS_HOME/modules/org/jboss/dmr/main/jboss-dmr-1.1.1.Final-redhat-1.jar DeployDmrToJson \ file:///Users/username/support/helloWorld.war/dist/helloWorld.war
- 当类运行时,下列命令格式将被显示。请根据要求使用
deploy
或undeploy
命令。例 10.3.
Deploy ------------------------------ Formatted: { "operation" : "composite", "address" : [], "steps" : [ { "operation" : "add", "address" : {"deployment" : "helloWorld.war"}, "content" : [{"url" : "file:/Users/username/support/helloWorld.war/dist/helloWorld.war"}] }, { "operation" : "deploy", "address" : {"deployment" : "helloWorld.war"} } ] } Unformatted: {"operation" : "composite", "address" : [], "steps" : [{"operation" : "add", "address" : {"deployment" : "helloWorld.war"}, "content" : [{"url" : "file:/Users/username/support/helloWorld.war/dist/helloWorld.war"}]},{"operation" : "deploy", "address" : {"deployment" : "helloWorld.war"}}]} Uneploy ------------------------------ Formatted: { "operation" : "composite", "address" : [], "steps" : [ { "operation" : "undeploy", "address" : {"deployment" : "helloWorld.war"} }, { "operation" : "remove", "address" : {"deployment" : "helloWorld.war"} } ] } Unformatted: {"operation" : "composite", "address" : [], "steps" : [{"operation" : "undeploy", "address" : {"deployment" : "helloWorld.war"}},{"operation" : "remove", "address" : {"deployment" : "helloWorld.war"}}]}
- 使用下列命令部署或卸载应用程序。请用上面概述的请求替换
json request
。例 10.4. 执行命令
curl -f --digest -u "<user>:<pass>" -H Content-Type:\ application/json -d '<json request>' "http://localhost:9990/management"
10.5. 用部署扫描器进行部署
10.5.1. 在部署扫描器(Deployment Scanner)里管理应用程序的部署
10.5.2. 用部署扫描器部署应用程序到独立服务器实例
必须具备的条件
这个任务展示了用部署扫描器部署应用程序到独立服务器实例的方法。如 第 10.1 节 “关于应用程序部署” 所述,这个方法是为了方便开发人员而保留的,对于产品环境下的管理我们推荐管理控制台和管理 CLI 方法。
过程 10.8. 使用部署扫描器部署应用程序
复制内容到 deployment 目录
复制应用程序文件到EAP_HOME/standalone/deployments/
里的 deployment 目录。部署扫描模式
有两种部署方法。您可以选择自动或手动部署扫描模式。在启动部署方法之前,请先阅读 第 10.5.8 节 “用管理 CLI 配置部署扫描器”。自动扫描
部署扫描器获取文件夹状态的变动并创建一个 第 10.5.8 节 “用管理 CLI 配置部署扫描器” 里定义的 marker 文件。手动部署
部署扫描器需要一个 marker 文件来触发部署过程。下面的例子使用了 Unixtouch
命令来创建一个新的.dodeploy
文件。例 10.5. 用
touch
命令进行部署[user@host bin]$
touch
$EAP_HOME/standalone/deployments/example.war.dodeploy
应用程序文件部署到了应用服务器里。deployment 目录里创建了一个 marker 文件以表示部署成功,且应用程序在管理控制台里被标记为 Enabled
。
例 10.6. 在部署后 deployment 目录包含了下列内容
example.war example.war.deployed
10.5.3. 用部署扫描器卸载独立服务器实例的应用程序
这个任务展示了用部署扫描器卸载独立服务器实例的应用程序的方法。如 第 10.1 节 “关于应用程序部署” 所述,这个方法是为了方便开发人员而保留的,对于产品环境下的管理我们推荐管理控制台和管理 CLI 方法。
注意
过程 10.9. 用下列方法之一卸载应用程序
卸载应用程序
有两种方法可以卸载应用程序,这取决于您是否想从 deployment 目录删除应用程序还是只修改它的部署状态。通过删除 marker 文件进行卸载
删除已部署的应用程序的example.war.deployed
marker 文件来触发部署扫描器从 runtime 卸载应用程序。- 结果
- 部署扫描器卸载应用程序并创建一个
example.war.undeployed
marker 文件。应用程序仍保留在 deployment 目录里。
通过删除应用程序进行卸载
从 deployment 目录删除应用程序来触发部署扫描器从 runtime 卸载应用程序。- 结果
- 部署扫描器卸载应用程序并创建一个
filename.filetype.undeployed
marker 文件。应用程序现在不会出现在 deployment 目录里了。
应用程序文件从应用服务器里卸载且不会出现在管理服务器的 Deployments 屏幕上了。
10.5.4. 用部署扫描器在独立服务器实例里重新部署应用程序
这个任务展示了用部署扫描器重新部署应用程序到独立服务器实例的方法。如 第 10.1 节 “关于应用程序部署” 所述,这个方法是为了方便开发人员而保留的,对于产品环境下的管理我们推荐管理控制台和管理 CLI 方法。
过程 10.10. 在独立服务器里重新部署应用程序
重新部署应用程序
重新部署用部署扫描器部署的应用程序有三种可能的方法。这些方法可以触发部署扫描器来启动部署循环,您可以按个人喜好进行选择。通过修改 marker 文件进行重新部署
通过修改 marker 文件的访问和修改时间戳可以触发部署扫描器的重新部署。在后面的 Linux 示例里将使用 Unixtouch
命令。例 10.7. 用 Unix
touch
命令进行重新部署[user@host bin]$
touch
EAP_HOME/standalone/deployments/example.war.dodeploy结果部署扫描器检测到 marker 文件的修改并重新部署应用程序。新的
.deployed
将替换旧的 marker 文件。通过创建新的
.dodeploy
marker 文件进行重新部署通过创建新的.dodeploy
marker 文件来触发部署扫描器的重新部署。手动部署的说明请参考 第 10.5.2 节 “用部署扫描器部署应用程序到独立服务器实例”。通过删除 marker 文件进行重新部署
如 第 10.5.5 节 “对部署扫描器 Marker 文件的引用” 所述,删除已部署应用程序的.deployed
marker 文件将触发卸载并创建一个.undeployed
marker 文件。删除卸载 marker 文件将再次触发部署循环。进一步的信息请参考 第 10.5.3 节 “用部署扫描器卸载独立服务器实例的应用程序”。
应用程序被重新部署。
10.5.5. 对部署扫描器 Marker 文件的引用
Marker 文件是部署扫描器子系统的一部分。这些文件标记独立服务器的 deployment 目录里的应用程序的状态。Marker 文件具有和应用程序相同的名称,其后缀则表示部署的状态。下表定义了每个 marker 文件的类型及响应。
例 10.8. Marker 文件示例
testapplication.war
应用程序的实例的 marker 文件。
testapplication.war.deployed
表 10.1. Marker 文件类型定义
文件名后缀 | 来源 | 描述 |
---|---|---|
.dodeploy | 用户生成 | 表示内容应该部署到 runtime 或从 runtime 卸载。 |
.skipdeploy | 用户生成 | 禁用应用程序的自动部署。用作禁止展开内容的自动部署的临时方法,阻止不完整的内容进入应用环境。它可以用于压缩的内容,扫描器会检测压缩内容的进度并等待完成。 |
.isdeploying | 系统生成 | 表示部署的初始化。当部署过程完成时,Marker 文件将被删除。 |
.deployed | 系统生成 | 表示内容已经被部署。如果文件被删除,这些内容将被卸载。 |
.failed | 系统生成 | 表示部署失败。Marker 文件包含关于失败原因的信息。如果 Marker 文件被删除,这些内容将再次对于自动部署可见。 |
.isundeploying | 系统生成 | 表示对删除 .deployed 文件的响应。完成后其内容将被卸载且 marker 文件将被自动删除。 |
.undeployed | 系统生成 | 表示内容已被卸载。Marker 文件的删除对内容重部署没有影响。 |
.pending | 系统生成 | 表示部署说明将被发送到有检测的问题还未解决的服务器。这个 marker 文件充当全局部署 road-block。当这个条件存在时,扫描器不会指引服务器部署或卸载任何其他内容。 |
10.5.6. 对部署扫描器属性的引用
write-attribute
进行配置的属性。关于配置选项的更多信息,请参考 第 10.5.8 节 “用管理 CLI 配置部署扫描器”。
表 10.2. 部署扫描器属性
实例类型 | 描述 | 类型 | 默认值 |
---|---|---|---|
auto-deploy-exploded | 允许自动部署展开内容而无需 .dodeploy marker 文件。我们仅推荐用于基本的部署场景,以防止在开发人员或操作系统进行修改时发生展开的应用程序的部署。 | 布尔值(Boolean) | False |
auto-deploy-xml | 允许自动部署 XML 内容而无需 .dodeploy marker 文件。 | 布尔值(Boolean) | True |
auto-deploy-zipped | 允许自动部署压缩内容而无需 .dodeploy marker 文件。 | 布尔值(Boolean) | True |
deployment-timeout | 部署扫描器在取消部署前允许尝试部署的时间。 | Long | 600 |
path | 定义要扫描的实际的文件系统路径。如果指定了 relative-to 属性,path 值将充当该目录或路径的相对路径。 | 字符串 | deployments |
relative-to | 对在服务器配置 XML 文件的 paths 部分定义的文件系统路径的引用。 | 字符串 | jboss.server.base.dir |
scan-enabled | 允许在启动时及每隔 scan-interval 自动扫描应用程序。 | 布尔值(Boolean) | True |
scan-interval | 扫描资料库的时间间隔(毫秒)。小于 1 的值表示扫描器只有在启动时才操作。 | Int | 5000 |
10.5.7. 配置部署扫描器
10.5.8. 用管理 CLI 配置部署扫描器
必须具备的条件
虽然有多个方法可以配置部署扫描器,管理 CLI 可以用批处理脚本或实时开放和修改属性。您可以用 read-attribute
和 write-attribute
全局命令行操作修改部署扫描器的行为。关于部署扫描器属性的更多信息,请参考 第 10.5.6 节 “对部署扫描器属性的引用”。
standalone.xml
里查看它。
<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1"> <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000"/> </subsystem>
过程 10.11. 配置部署扫描器
确定要配置的部署扫描器属性
通过管理 CLI 配置部署描述符要求您首先开放正确的属性名。您可以在根节点上用read-resources
操作来实现,或者用cd
命令来修改子节点。您也可以用ls
命令显示这个级别的属性。用
read-resource
操作开放部署扫描器的属性请使用read-resource
操作来开放默认部署扫描器资源定义的属性。[standalone@localhost:9999 /]/subsystem=deployment-scanner/scanner=default:read-resource { "outcome" => "success", "result" => { "auto-deploy-exploded" => false, "auto-deploy-xml" => true, "auto-deploy-zipped" => true, "deployment-timeout" => 600, "path" => "deployments", "relative-to" => "jboss.server.base.dir", "scan-enabled" => true, "scan-interval" => 5000 } }
用
ls
命令开放部署扫描器属性请使用ls
命令和-l
可选参数来显示包含子系统节点、值和类型的结果。您可以输入ls --help
来学习关于ls
命令及其参数的更多内容。关于管理 CLI 里帮助菜单的详情,请参考 第 3.5.5 节 “用管理 CLI 获取帮助”。[standalone@localhost:9999 /] ls -l /subsystem=deployment-scanner/scanner=default ATTRIBUTE VALUE TYPE auto-deploy-exploded false BOOLEAN auto-deploy-xml true BOOLEAN auto-deploy-zipped true BOOLEAN deployment-timeout 600 LONG path deployments STRING relative-to jboss.server.base.dir STRING scan-enabled true BOOLEAN scan-interval 5000 INT
用
write-attribute
操作配置部署扫描器在您确定了要修改的属性的名称后,请使用write-attribute
来指定属性名称和写入的新值。下面的例子都运行在子节点级别,可以通过cd
命令访问,并开放默认扫描器节点的 Tab 完成和修改。[standalone@localhost:9999 /] cd subsystem=deployment-scanner/scanner=default
启用展开内容的自动部署
请使用write-attribute
命令来禁用展开的 应用程序内容的自动部署。[standalone@localhost:9999 scanner=default] :write-attribute(name=auto-deploy-exploded,value=true) {"outcome" => "success"}
禁用 XML 内容的自动部署
请使用write-attribute
命令来禁用 XML 应用程序内容的自动部署。[standalone@localhost:9999 scanner=default] :write-attribute(name=auto-deploy-xml,value=false) {"outcome" => "success"}
禁用压缩内容的自动部署
请使用write-attribute
命令来禁用压缩的应用程序内容的自动部署。[standalone@localhost:9999 scanner=default] :write-attribute(name=auto-deploy-zipped,value=false) {"outcome" => "success"}
配置路径属性
请使用write-attribute
操作来修改路径属性,用新的路径名替换newpathname
以被部署扫描器监控。请注意,服务器需要重启以使修改生效。[standalone@localhost:9999 scanner=default] :write-attribute(name=path,value=newpathname) { "outcome" => "success", "response-headers" => { "operation-requires-reload" => true, "process-state" => "reload-required" } }
配置相对路径属性
请使用write-attribute
操作来修改对 XML 配置文件里路径部分定义的文件路径的相对引用。请注意,服务器将需要重启以使修改生效。[standalone@localhost:9999 scanner=default] :write-attribute(name=relative-to,value=new.relative.dir) { "outcome" => "success", "response-headers" => { "operation-requires-reload" => true, "process-state" => "reload-required" } }
禁用部署扫描器
请使用write-attribute
命令并将scan-enabled
设为 false 来禁用部署扫描器。[standalone@localhost:9999 scanner=default] :write-attribute(name=scan-enabled,value=false) {"outcome" => "success"}
修改扫描间隔
请使用write-attribute
操作来修改扫描间隔(5000 到 10000 毫秒)。[standalone@localhost:9999 scanner=default] :write-attribute(name=scan-interval,value=10000) {"outcome" => "success"}
您对配置的修改已保存到部署扫描器里。
10.6. 用 Maven 进行部署
10.6.2. 用 Maven 部署应用程序
必须具备的条件
本节展示了用 Maven 卸载应用程序的方法。下面的例子使用了 JBoss EAP 6 Quickstarts 里的 jboss-as-helloworld.war
应用程序。helloworld
项目包含了一个初始化了 jboss-as-maven-plugin
的 POM 文件。这个插件提供了在应用服务器里部署和卸载应用程序的简单操作。
过程 10.12. 用 Maven 部署应用程序
- 打开终端会话并进入包含 Quickstart 例程的目录里。
例 10.9. 进入 helloworld 应用程序目录
[localhost]$ cd /QUICKSTART_HOME/helloworld
- 运行 Maven deploy 命令来部署应用程序。如果应用程序已经运行,它将被重新部署。
[localhost]$ mvn package jboss-as:deploy
- 查看结果。
- 通过在终端窗口里查看操作日志可以确认部署。
例 10.10. 通过 Maven 确认 Helloworld 应用程序
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 32.629s [INFO] Finished at: Fri Mar 14 09:09:50 EDT 2014 [INFO] Final Memory: 23M/204M [INFO] ------------------------------------------------------------------------
- 部署在活动应用程序服务器实例的状态流里也可以确认。
例 10.11. 通过应用服务器确认 Helloworld 应用程序
09:09:49,167 INFO [org.jboss.as.repository] (management-handler-thread - 1) JBAS014900: Content added at location /home/username/EAP_HOME/standalone/data/content/32/4b4ef9a4bbe7206d3674a89807203a2092fc70/content 09:09:49,175 INFO [org.jboss.as.server.deployment] (MSC service thread 1-7) JBAS015876: Starting deployment of "jboss-helloworld.war" (runtime-name: "jboss-helloworld.war") 09:09:49,563 INFO [org.jboss.weld.deployer] (MSC service thread 1-8) JBAS016002: Processing weld deployment jboss-helloworld.war 09:09:49,611 INFO [org.jboss.weld.deployer] (MSC service thread 1-1) JBAS016005: Starting Services for CDI deployment: jboss-helloworld.war 09:09:49,680 INFO [org.jboss.weld.Version] (MSC service thread 1-1) WELD-000900 1.1.17 (redhat) 09:09:49,705 INFO [org.jboss.weld.deployer] (MSC service thread 1-2) JBAS016008: Starting weld service for deployment jboss-helloworld.war 09:09:50,080 INFO [org.jboss.web] (ServerService Thread Pool -- 55) JBAS018210: Register web context: /jboss-helloworld 09:09:50,425 INFO [org.jboss.as.server] (management-handler-thread - 1) JBAS018559: Deployed "jboss-helloworld.war" (runtime-name : "jboss-helloworld.war")
应用程序已部署到应用服务器里。
10.6.3. 用 Maven 卸载应用程序
必须具备的条件
本节展示了用 Maven 卸载应用程序的方法。下面的例子使用了 JBoss EAP 6 Quickstarts 里的 jboss-as-helloworld.war
应用程序。helloworld
项目包含了一个初始化了 jboss-as-maven-plugin
的 POM 文件。这个插件提供了在应用服务器里部署和卸载应用程序的简单操作。
过程 10.13. 用 Maven 卸载应用程序
- 打开终端会话并进入包含 Quickstart 例程的目录里。
例 10.12. 进入 helloworld 应用程序目录
[localhost]$ cd /QUICKSTART_HOME/helloworld
- 运行 Maven undeploy 命令来卸载应用程序。
[localhost]$ mvn jboss-as:undeploy
- 查看结果。
- 通过在终端窗口里查看操作日志可以确认卸载。
例 10.13. 卸载 Helloworld 应用程序的通 Maven 确认信息
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1 second [INFO] Finished at: Mon Oct 10 17:33:02 EST 2011 [INFO] Final Memory: 11M/212M [INFO] ------------------------------------------------------------------------
- 卸载在活动应用程序服务器实例的状态流里也可以确认。
例 10.14. 卸载 Helloworld 应用程序的应用服务器确认信息
09:51:40,512 INFO [org.jboss.web] (ServerService Thread Pool -- 69) JBAS018224: Unregister web context: /jboss-helloworld 09:51:40,522 INFO [org.jboss.weld.deployer] (MSC service thread 1-3) JBAS016009: Stopping weld service for deployment jboss-helloworld.war 09:51:40,536 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015877: Stopped deployment jboss-helloworld.war (runtime-name: jboss-helloworld.war) in 27ms 09:51:40,621 INFO [org.jboss.as.repository] (management-handler-thread - 10) JBAS014901: Content removed from location /home/username/EAP_HOME/jboss-eap-6.3/standalone/data/content/44/e1f3c55c84b777b0fc201d69451223c09c9da5/content 09:51:40,621 INFO [org.jboss.as.server] (management-handler-thread - 10) JBAS018558: Undeployed "jboss-helloworld.war" (runtime-name: "jboss-helloworld.war")
从服务器服务器里卸载了应用程序。
10.7. 控制 JBoss EAP 6 里部署应用程序的顺序
过程 10.14. 控制 JBoss EAP 6.0.X 里部署的顺序
- 创建在服务器启动/停止时按顺序部署和卸载应用程序的 CLI 脚本。
- CLI 也支持批模式,它允许您将命令和操作分组并作为一个原子单元执行。如果有一个命令或操作运行失败,该批模式里所有其他已成功执行的命令或操作将进行回滚。
过程 10.15. 控制 JBoss EAP 6.1.X 里部署的顺序
- 在
app.ear/META-INF
文件夹里创建一个jboss-all.xml
文件(如果没有),这里的app.ear
是依赖于另外一个之前部署的应用程序的归档。 - 如下所示,在这个文件里创建一个
jboss-deployment-dependencies
条目。请注意,在下面的列表里,framework.ear
是应该在app.ear
之前部署的依赖关系应用程序归档。<jboss umlns="urn:jboss:1.0"> <jboss-deployment-dependencies xmlns="urn:jboss:deployment-dependencies:1.0"> <dependency name="framework.ear" /> </jboss-deployment-dependencies> </jboss>
10.8. 部署描述符覆盖
过程 10.16. 用管理 CLI 覆盖部署描述符
app.war
,你想用 /home/user/web.xml
下的 web.xml
覆盖它的 WEB-INF/web.xml
文件。
- 添加一个部署重叠并添加内容。您可以以下列两种方式来进行:
使用 DRM 树
/deployment-overlay=myoverlay:add
/deployment-overlay=myoverlay/content=WEB-INF\/web.xml:add(content={url=file:///home/user/web.xml})
您可以用第二个语句添加更多的内容规则。
使用 convenience 模式
deployment-overlay add --name=myoverlay --content=WEB-INF/web.xml=/home/user/web.xml
- 链接这个重叠至部署归档。您可以以下列两种方式来进行:
使用 DRM 树
/deployment-overlay=myoverlay/deployment=app.war:add
使用 convenience 模式
deployment-overlay link --name=myoverlay --deployments=app.war
你必须指定用逗号隔开的多个归档名称。
请注意,部署归档并不需要存在于服务器上。您可以指定这个名称,但不将其链接到实际的部署。 重新部署应用程序
/deployment=app.war:redeploy
第 11 章 保护 JBoss EAP 6
11.1. 关于安全子系统
安全(security)
子系统通过 PicketBox 提供的安全服务为 Red Hat JBoss EAP 里的所有安全功能提供了基础结构。这个子系统使用了和当前请求关联的安全上下文向相关的容器开放验证管理者、授权管理者、审计管理者和映射管理者的功能。
security
安全子系统是预配置好的,所以您很少需要修改其中的安全元素。唯一要修改的可能是是否使用 deep-copy-subject-mode。在多数情况下,管理员将专注于 security domains 的配置。
关于 Deep Copy 模式的细节,请参考 第 11.4 节 “关于 Deep Copy Subject 模式”。
安全域(Security Domain)是一系列 Java 验证和授权服务(Java Authentication and Authorization Service,JAAS)的声明式安全配置,一个或多个应用程序用它来控制验证、授权、审计和映射。有三个默认的安全域:jboss-ejb-policy
、jboss-web-policy
和 other
。你也可以按照应用程序的需要创建安全域。关于安全域的细节,请参考 第 11.6.12 节 “在应用程序里使用安全域”。
11.2. 关于安全子系统的结构
例 11.1. 安全子系统配置示例
<subsystem xmlns="urn:jboss:domain:security:1.2"> <security-management> ... </security-management> <security-domains> <security-domain name="other" cache-type="default"> <authentication> <login-module code="Remoting" flag="optional"> <module-option name="password-stacking" value="useFirstPass"/> </login-module> <login-module code="RealmUsersRoles" flag="required"> <module-option name="usersProperties" value="${jboss.domain.config.dir}/application-users.properties"/> <module-option name="rolesProperties" value="${jboss.domain.config.dir}/application-roles.properties"/> <module-option name="realm" value="ApplicationRealm"/> <module-option name="password-stacking" value="useFirstPass"/> </login-module> </authentication> </security-domain> <security-domain name="jboss-web-policy" cache-type="default"> <authorization> <policy-module code="Delegating" flag="required"/> </authorization> </security-domain> <security-domain name="jboss-ejb-policy" cache-type="default"> <authorization> <policy-module code="Delegating" flag="required"/> </authorization> </security-domain> </security-domains> <vault> ... </vault> </subsystem>
<security-management>
、<subject-factory>
和 <security-properties>
元素没有出现在默认配置里。从 JBoss EAP 6.1 开始已启用了 <subject-factory>
和 <security-properties>
元素。
11.3. 配置安全子系统
- <security-management>
- 这部分内容覆盖了安全子系统的高层行为。每个设置都是可选的。除了 Deep Copy 模式,须该这些设置的任何一个都是不寻常的。
选项 描述 deep-copy-subject-mode 指定是否复制或链接安全令牌以用于额外的线程安全。authentication-manager-class-name 指定一个要使用的其他的 AuthenticationManager 实现的类名。authorization-manager-class-name 指定一个要使用的其他的 AuthorizationManager 实现的类名。audit-manager-class-name 指定一个要使用的其他的 AuditManager 实现的类名。identity-trust-manager-class-name 指定一个要使用的其他的 IdentityTrustManager 实现的类名。mapping-manager-class-name 指定一个要使用的 MappingManager 实现的类名。 - <subject-factory>
- 主题工厂(Subject factory)控制主题实例的创建。它可以使用验证管理者来检验调用者。主题工厂的主要用途是为了 JCA 组件建立主题。你通常不需要修改它。
- <security-domains>
- 保存多个安全域的容器元素。安全域可能包含关于验证、授权、映射、审计模块以及 JASPI 验证和 JSSE 配置的信息。你的应用程序可以指定一个安全域来管理它的安全信息。
- <security-properties>
- 包含在 java.security.Security 类上设置的属性的名字和值。
11.4. 关于 Deep Copy Subject 模式
11.5. 启用 Deep Copy Subject 模式
过程 11.1. 通过管理控制台启用 Deep Copy 安全模式
登录到管理控制台。
请参考 第 3.4.2 节 “登录到管理控制台”。受管域:选择合适的配置集。
在受管域里,安全子系统是针对每个配置集进行配置的,而且你可以在每个配置集里独立地启用或禁用 Deep Copy 安全模式。要选择配置集,请点击控制台顶部的 Configuration 标签,然后在左上角的 Profile 下拉菜单里选择配置集。打开 Security Subsystem 配置菜单。
展开 Security 菜单,然后选择 Security Subsystem。启用 Deep Copy Subject 模式。
点击 Edit 按钮。选定 Deep Copy Subjects 复选框来启用 Deep Copy Subject 模式。
如果你想通过管理 CLI 来启用这个选项,请使用下列命令。
例 11.2. 受管域
/profile=full/subsystem=security/:write-attribute(name=deep-copy-subject-mode,value=TRUE)
例 11.3. 独立服务器
/subsystem=security/:write-attribute(name=deep-copy-subject-mode,value=TRUE)
11.6. 安全域
11.6.1. 关于安全域
11.6.2. 关于 Picketbox
- 第 11.6.5 节 “关于授权” 和访问控制
- 第 11.6.10 节 “关于安全性映射” 和 principal、角色、属性
11.6.3. 关于验证
11.6.4. 配置安全域的验证
过程 11.2. 为安全域设置验证
打开安全域的详细视图。
- 点击管理控制台顶部的 Configuration 标签。
- 从 Profile 视图左上角的 Profile 里选择要修改的配置集。
- 展开 Security 菜单,然后选择 Security Domains。
- 点击您要编辑的安全域的 View 链接。
进入验证子系统配置。
如果还未选择的话,选择视图顶部的 Authentication 标签。配置区域分成两部分:Login Modules 和 Details。登录模块是配置的基本单元。安全域可以包含多个登录模块,每个都包括几个属性和选项。添加一个验证模块。
点击 Add 添加一个 JAAS 验证模块。填写模块的细节。Code 是模块的类名。Flag 设置控制模块如何和相同安全域里的其他验证模块关联。对标签的解释Java EE 6 规格提供了安全域的标签的解释。下面的列表来自 http://docs.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html#AppendixA。关于更消息的信息,请参考这个文档。
标签 详情 required 登录模块是验证成功所必需的。如果成功或失败,验证都仍会继续处理登录模块列表。requisite 登录模块是验证成功所必需的。如果成功,验证将继续处理登录模块列表。如果失败,控制权马上返回给应用程序(验证不会继续处理登录模块列表)。sufficient 登录模块不是验证成功所必需的。如果成功,控制权马上返回给应用程序(验证不会继续处理登录模块列表)。如果失败,验证将继续处理登录模块列表。optional 登录模块不是验证成功所必需的。如果成功或失败,验证都仍会继续处理登录模块列表。编辑验证设置
在你添加了模块时,你可以通过屏幕上的 Details 里的 Edit 按钮修改它的 Code 或 Flags。请确保选择了 Attributes 标签页。可选的:添加或删除模块选项。
如果你需要在模块里添加选项,请点击 Login Modules 列表里的条目,并在 Details 页面里选择 Module Options 标签页。点击 Add 按钮,并提供这个选项的键和值。你可以用 Remove 按钮来删除选项。
你的验证模块已添加至安全域,且马上可为使用安全域的应用程序所用。
jboss.security.security_domain
模块选项
在默认情况下,安全域里定义的每个登录模块都会自动添加一个 jboss.security.security_domain
模块选项。这个选项会给检查是否只定义了已知选项的登录模块带来问题。IBM Kerberos 登录模块 com.ibm.security.auth.module.Krb5LoginModule
就是其中之一。
true
来禁用添加这个模块选项的行为。请添加下列内容到你的启动参数里。
-Djboss.security.disable.secdomain.option=true
11.6.5. 关于授权
11.6.6. 配置安全域里的授权
过程 11.3. 在安全域里设置授权
打开安全域的详细视图。
- 点击管理控制台顶部的 Configuration 标签。
- 在受管域里,从左上角的 Profile 下拉菜单里选择要修改的配置集。
- 展开 Security 菜单,然后选择 Security Domains。
- 点击您要编辑的安全域的 View 链接。
进入授权子系统配置。
从屏幕顶部选择 Authorization 标签。配置区域分成两部分:Policies 和 Details。登录模块是配置的基本单元。安全域可以包含几个授权策略,每个都包括几个属性和选项。添加策略
点击 Add 添加一个 JAAS 授权策略模块。填写模块的细节。Code 是模块的类名。Flag 控制模块如何和相同安全域里的其他授权策略模块关联。对标签的解释Java EE 6 规格提供了安全域的标签的解释。下面的列表来自 http://docs.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html#AppendixA。关于更消息的信息,请参考这个文档。
标签 详情 required 登录模块是授权成功所必需的。如果成功或失败,授权都仍会继续处理登录模块列表。requisite 登录模块是授权成功所必需的。如果成功,授权将继续处理登录模块列表。如果失败,控制权马上返回给应用程序(授权不会继续处理登录模块列表)。sufficient 登录模块不是授权成功所必需的。如果成功,控制权马上返回给应用程序(授权不会继续处理登录模块列表)。如果失败,授权将继续处理登录模块列表。optional 登录模块不是授权成功所必需的。如果成功或失败,授权都仍会继续处理登录模块列表。编辑授权设置
在你添加了模块时,你可以通过屏幕上的 Details 里的 Edit 按钮修改它的 Code 或 Flags。请确保选择了 Attributes 标签页。可选的:添加或删除模块选项。
如果你需要在模块里添加选项,请点击 Policies 列表里的条目,并在 Details 页面里选择 Module Options 标签页。点击 Add 按钮,并提供这个选项的键和值。你可以用 Remove 按钮来删除选项。
你的授权模块已添加至安全域,且马上可为使用安全域的应用程序所用。
11.6.7. 关于安全性审计
11.6.8. 配置安全审计
过程 11.4. 在安全域里设置安全审计
打开安全域的详细视图。
- 点击屏幕顶部的 Configuration。
- 在受管域里,从左上角的 Profile 选择框里选择要修改的配置集。
- 展开 Security 菜单,然后选择 Security Domains。
- 点击您要编辑的安全域的 View 链接。
进入审计子系统配置。
从屏幕顶部选择 Audit 标签页。配置区域分成两部分:Provider Modules 和 Details。提供者模块(Provider Module)是配置的基本单元。安全域可以包含多个提供者模块,每个都包括几个属性和选项。添加一个提供者模块。
点击 Add。 在 Code 里输入提供者模块的类名。检验你的模块是否可以运行
审计模块的目的是提供一个在安全子系统里监控事件的途径。这种监控可以通过写入日志文件、电子邮件通知或其他可度量的审计机制来实现。例如,JBoss EAP 6 默认包含了LogAuditProvider
模块。如果按照上面的步骤启用,这个审计模块会将安全通知写入EAP_HOME
目录里的log
子目录下的audit.log
文件里。要检验上面的步骤是否可以在LogAuditProvider
上下文里运行,你可以执行一个可能触发通知的动作并检查审计日志文件。关于安全审计提供者模块的完整列表,请参考 第 12.4 节 “包括的安全审计供应商模块”。可选的:添加、编辑或删除模块选项。
如果你需要在模块里添加选项,请点击 Modules 列表里的条目,并在 Details 页面里选择 Module Options 标签页。点击 Add 按钮,并提供这个选项的键和值。要编辑已存在的选项,请点击 Remove 删除它,然后点击 Add 再次以正确的选项添加它。
你的安全审计模块已添加至安全域,且马上可为使用安全域的应用程序所用。
11.6.9. 关于审计日志
LogAuditProvider
模块,JBoss EAP 6 将维护一个审计日志,它记录应用程序和登录模块里的验证和授权。这个文件默认名为 audit.log
且位于 EAP_HOME 的 log
子目录里。这个行为是由日志子系统的日志处理程序确定的。此外,LogAuditProvider
模块的输出可以通过 syslog
日志处理程序发送到 syslog
服务器而不是某个文件。
LogAuditProvider
模块只输出到累积的 audit.log
文件里。要实现定期的轮询文件处理程序 AUDIT
,请使用下列管理 CLI 命令。
/subsystem=logging/periodic-rotating-file-handler=AUDIT/:add(suffix=.yyyy-MM-dd,formatter=%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n,level=TRACE
,file={"relative-to" => "jboss.server.log.dir","path" => "audit.log"})
还可查看:
11.6.10. 关于安全性映射
11.6.11. 在安全域里配置安全映射
过程 11.5. 在安全域里设置安全映射
打开安全域的详细视图。
- 点击管理控制台顶部的 Configuration 标签。
- 在受管域里,从左上角的 Profile 选择框里选择配置集。
- 展开 Security 菜单,然后选择 Security Domains。
- 点击您要编辑的安全域的 View 链接。
进入映射子系统配置。
从屏幕顶部选择 Mapping 标签。配置区域分成两部分:Modules 和 Details。映射模块是配置的基本单元。安全域可以包含多个映射模块,每个都包括几个属性和选项。添加安全映射模块。
点击 Add。输入模块的相关内容。Code 是模块的类名。Type 字段表示这个模块执行的映射的类型。所允许的值有 principal、role、attribute 和 credential。编辑安全映射模块
在你添加了模块时,你可以修改它的 Code 或 Type。- 选择 Attributes 标签页。
- 点击屏幕的 Details 部分里的 Edit 按钮。
可选的:添加、编辑或删除模块选项。
如果你需要在模块里添加选项,请点击 Modules 列表里的条目,并在 Details 页面里选择 Module Options 标签页。点击 Add 按钮,并提供这个选项的键和值。要编辑已存在的选项,请先点击 Remove 删除它,然后用新的值再次添加它。使用 Remove 按钮来删除选项。
你的安全映射模块已添加至安全域,且马上可为使用安全域的应用程序所用。
11.6.12. 在应用程序里使用安全域
要在应用程序里使用安全域,首先您必须在服务器配置文件里定义安全域并在应用程序的描述符文件里启用安全域。然后您必须添加所需的注解到使用安全域的 EJB。本节涵盖了在应用程序里使用安全域所需的步骤。
警告
过程 11.6. 配置你的应用程序以使用安全域
定义安全域
您需要在服务器的配置文件里定义安全域,然后在应用程序的描述符文件里启用它。在服务器的配置文件里配置安全域
安全域是在服务器配置文件的security
子系统里配置的。如果 JBoss EAP 6 实例运行在受管域里,配置文件应该是domain/configuration/domain.xml
。如果是独立服务器,则是standalone/configuration/standalone.xml
文件。other
、jboss-web-policy
和jboss-ejb-policy
都是 JBoss EAP 6 里默认提供的安全域。下面的 XML 示例是从服务器配置文件的security
子系统里复制的。为执行更快的验证检查,安全域的cach-type
属性指定了一个缓存。允许的值由用于简单表缓存的default
或 Infinispan 缓存的infinispan
。<subsystem xmlns="urn:jboss:domain:security:1.2"> <security-domains> <security-domain name="other" cache-type="default"> <authentication> <login-module code="Remoting" flag="optional"> <module-option name="password-stacking" value="useFirstPass"/> </login-module> <login-module code="RealmDirect" flag="required"> <module-option name="password-stacking" value="useFirstPass"/> </login-module> </authentication> </security-domain> <security-domain name="jboss-web-policy" cache-type="default"> <authorization> <policy-module code="Delegating" flag="required"/> </authorization> </security-domain> <security-domain name="jboss-ejb-policy" cache-type="default"> <authorization> <policy-module code="Delegating" flag="required"/> </authorization> </security-domain> </security-domains> </subsystem>
你可以按需要用管理控制台或 CLI 配置其他的安全域。在应用程序的描述符文件里启用安全域
安全域是在应用程序的WEB-INF/jboss-web.xml
文件里的<jboss-web>
元素的<security-domain>
子元素里指定的。下面的例子配置了一个名为my-domain
的安全域。<jboss-web> <security-domain>my-domain</security-domain> </jboss-web>
这只是你可以在WEB-INF/jboss-web.xml
描述符里指定的许多设置中的一个。
在 EJB 里添加必需的注解
你可以用@SecurityDomain
和@RolesAllowed
注解在 EJB 里配置安全性。下面的 EJB 代码示例限制了具有guest
角色的用户对other
安全域的访问。package example.ejb3; import java.security.Principal; import javax.annotation.Resource; import javax.annotation.security.RolesAllowed; import javax.ejb.SessionContext; import javax.ejb.Stateless; import org.jboss.ejb3.annotation.SecurityDomain; /** * Simple secured EJB using EJB security annotations * Allow access to "other" security domain by users in a "guest" role. */ @Stateless @RolesAllowed({ "guest" }) @SecurityDomain("other") public class SecuredEJB { // Inject the Session Context @Resource private SessionContext ctx; /** * Secured EJB method using security annotations */ public String getSecurityInfo() { // Session context injected using the resource annotation Principal principal = ctx.getCallerPrincipal(); return principal.toString(); } }
关于更多的代码示例,请参考 JBoss EAP 6 Quickstarts 集里的ejb-security
quickstart,你可以在红帽的客户门户找到这些例子。
11.6.13. Java 容器授权合约(JACC)
11.6.13.1. 关于 Java 容器授权合约(JACC)
11.6.13.2. 配置 Java 容器授权合约(JACC)的安全性
jboss-web.xml
来包含正确的参数。