(翻译整理by Jim Ma)
管理域和单独运行服务器的 JVM设置是不相同的。在管理域中, domain controller组件会负责停止和启动服务器进程,因此由它来决定 JVM的设置。在单独运行服务器中,由启动服务器的进程 (比如通过命令行参数 )负责 JVM的设置。
在管理域里, JVM设置可以在不同的作用域上声明 :比如在特定的服务器组,一个主机或者一个特别的服务器。如果没有显式声明, JVM设置从父作用域继承。这样可以在不同的层次上允许定制或者继承 JVM设置。
我们来看一下对一个服务器组 JVM的声明 :
(参见 domain/configuration/domain.xml )
在这个例子里,服务器组 "main-server-group" 的 jvm设置成 64m的 heap size和 最大是 512m的 heap size.任何属于这个组的服务器都会集成这些 JVM设置。你可以改变整个组,或者一个特定服务器,主机的 JVM设置 :
(参考 domain/configuration/host.xml)
在这个例子中, server-two 属于 main-server-group, 因此会继承名字为 default的 JVM设置,但是它在 server-two服务器上声明了一个较低的 maxium heap size。
[domain@localhost:9999 /] /host=local/server-config=server-two/jvm=default:read-resource { "outcome" => "success", "result" => { "heap-size" => "64m", "max-heap-size" => "256m", } }
对于单独运行的服务器,则需要在执行 $JBOSS_HOME/bin/standalone.sh 脚本时使用命令行参数来设置 JVM,或者在 $JBOSS_HOME/bin/standalone.conf 声明。 (对于 windows用户,需要执行 %JBOSS_HOME%/bin/standalone.bat 和设置
%JBOSS_HOME%/bin/standalone.conf.bat.)
启动 JBoss AS7的管理域,需要执行 : $JBOSS_HOME/bin/domain.sh 脚本,启动单独运行的服务器需要执行 $JBOSS_HOME/bin/standalone.sh . 使用这两个脚本启动时,将会使用默认的设置。以下内容,我们讲介绍如何通过额外的命令行参数来覆盖这些默认的设置。
单服务器和管理域模式都使用用来设置标准位置 (如 jboss.home.dir,jboss.server.config.dir)的默认设置, B这小节中介绍这些系统属性的默认值。每个系统属性,都可以通过标准的 JVM设置方式 -Dkey=value覆盖:
$JBOSS_HOME/bin/standalone.sh -Djboss.home.dir=some/location/AS7/jboss-as \ -Djboss.server.config.dir=some/location/AS7/jboss-as/custom-standalone
以上的命令行启动一个不是标准的 AS home目录,并且使用一个特定的配置文件路径 . 具体系统属性的含义将在以下内容中介绍。
同时,你也可以使用一个 properties文件通过下面任何一种方式来覆盖配置默认的系统属性 :
$JBOSS_HOME/bin/domain.sh --properties=/some/location/jboss.properties $JBOSS_HOME/bin/domain.sh -P=/some/location/jboss.properties
这个 properties文件是一个标准的包含 key=value对的标准 Java property文件 :
jboss.home.dir=/some/location/AS7/jboss-as jboss.domain.config.dir=/some/location/AS7/custom-domain
属性名 |
说明 |
默认值 |
---|---|---|
java.ext.dirs |
指定 JDK extension路径 |
null |
jboss.home.dir |
JBoss AS 7 安装的根目录 |
standalone.sh 设置为 $JBOSS_HOME |
jboss.server.base.dir |
server的 base目录 |
jboss.home.dir /standalone |
jboss.server.config.dir |
base configuration目录 |
jboss.server.base.dir /configuration |
jboss.server.data.dir |
用于存放持久化数据的目录 |
jboss.server.base.dir /data |
jboss.server.log.dir |
存放 server.log 的目录 |
jboss.server.base.dir /log |
jboss.server.temp.dir |
临时文件目录 |
jboss.server.base.dir /tmp |
jboss.server.deploy.dir |
部署目录 |
jboss.server.data.dir /content |
属性名 |
说明 |
Default value |
---|---|---|
jboss.home.dir |
The root directory of the JBoss AS 7 installation. |
domain.sh 设置为 $JBOSS_HOME |
jboss.domain.base.dir |
domain的 base目录 |
jboss.home.dir /domain |
jboss.domain.config.dir |
base configuration目录 |
jboss.domain.base.dir /configuration |
jboss.domain.data.dir |
用于存放持久化数据的目录 . |
jboss.domain.base.dir /data |
jboss.domain.log.dir |
存放 host-controller.log 和 process-controller.log 文件的目录 |
jboss.domain.base.dir /log |
jboss.domain.temp.dir |
临时文件目录 |
jboss.domain.base.dir /tmp |
jboss.domain.deployment.dir |
部署目录 |
jboss.domain.base.dir /content |
jboss.domain.servers.dir |
被管服务器输出存放的目录 |
jboss.domain.base.dir /log |
第一种接收参数的格式是 :
--name=value
比如 :
$JBOSS_HOME/bin/standalone.sh --server-config=standalone-ha.xml
如果参数名是一个单词,那么使用一个” -”前缀,而不 是两个” --”:
-x=value
比如 :
$JBOSS_HOME/bin/standalone.sh -P=/some/location/jboss.properties
下面说明在单服务器和管理域模式下可用的的命令行参数 :
参数名 |
缺省的默认值 |
值 |
---|---|---|
--server-config |
jboss.server.config.dir /standalone.xml |
一个相对于 jboss.server.config.dir 的路径或者是一个绝对路径 |
参数名 |
缺省的默认值 |
值 |
---|---|---|
--domain-config |
jboss.domain.config.dir /domain.xml |
一个相对于 jboss.domain.config.dir 的路径或者是一个绝对路径 |
--host-config |
jboss.domain.config.dir /host.xml |
一个相对于 jboss.domain.config.dir 的路径或者是一个绝对路径 |
下面的参数不需要指定值,并且只能被用于 host controller.(比如被配置连接到远程 domain controller的主机 )
参数名 |
功能 |
---|---|
--backup |
使从 host controller创建和维护一个域配置的本地拷贝 |
--cached-dc |
如果从 (slave)host controller在启动时不能连接主 domain controller取得配置信息,那么通过 -bakcup创建的本地拷贝将会被使用。同时 slave host controller不会改变任何 domain的配置,仅启动服务器。
|
这些没有值的参数既适用于单服务器模式也适用于管理域模式。下表介绍这些参数的使用 :
参数 |
功能 |
---|---|
--version |
打印 JBossAS的版本信息,并且退出 JVM。 |
--help |
打印各参数的帮助信息,并且退出 JVM |
在以下章节中将集中介绍通过 CLI和 web接口进行操作的高级管理用例 .对于每个子系统详细的配置属性,请参考每个子系统的参考文档。
Schema Location 配置的 schema 文件都在目录 $JBOSS_HOME/docs/schema . |
Datasources 在通过子系统进行配置。声明一个新的数据源,需要两个步骤 : 提供一个 JDBC 驱动,然后定义一个使用这个 JDBC驱动的数据源。
在应用服务器中安装 JDBC驱动推荐使用一个常规的 jar进行部署。因为当在域模式下运行应用服务器时,部署的内容会自动传送到要部署的所有服务器上,因此使用 jar文件将利用这一特性而不需要关心额外的事情。
任何符合 JDBC4的启动将会被自动识别并且按照名字和版本安装到系统中。 JDBC jar使用 Java server provider机制进行识别。 Jar文件中需要包含一个文件名是 META-INF/services/java.sql.Driver 的文本文件 ,这个文件中包含在这个 jar里的驱动类的名称。如果你的 JDBC驱动 jar不符合 JDBC规范,我们通过其他方式也可以部署这样的驱动。
修改 Jar 文件
最直接的方式是简单的修改 Jar文件添加缺失的文件。你可以通过一下命令添加 :
The most straightforward solution is to simply modify the JAR and add the missing file. You can do
改变路径到或者创建一个空的临时文件夹 .
创建一个 META-INF 子目录
创建一个 META-INF/services 子目录
创建 一个只包含一行内容 :JDBC驱动类的全名的文件 META-INF/services/java.sql.Driver .
使用 jar命令来跟新这个 jar文件 :
jar \-uf jdbc-driver.jar META-INF/services/java.sql.Driver 如何部署 JDBC4驱动 jar文件,请参考”应用部署 “章节。
数据源在 datasources子系统里定义 :
jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 h2 10 20 true sa sa h2 jdbc:h2:mem:test 10 20 true sa sa org.h2.jdbcx.JdbcDataSource
(参见 standalone/configuration/standalone.xml )
如以上示例所示,数据源通过逻辑名来引用 JDBC驱动 .通过命令行 (CLI)可以很方便的查询同样的信息 :
[standalone@localhost:9999 /] /subsystem=datasources:read-resource(recursive=true) { "outcome" => "success", "result" => { "data-source" => {"java:/H2DS" => { "connection-url" => "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "jndi-name" => "java:/H2DS", "driver-name" => "h2", "pool-name" => "H2DS", "use-java-context" => true, "enabled" => true, "jta" => true, "pool-prefill" => true, "pool-use-strict-min" => false, "user-name" => "sa", "password" => "sa", "flush-strategy" => "FailingConnectionOnly", "background-validation" => false, "use-fast-fail" => false, "validate-on-match" => false, "use-ccm" => true }}, "xa-data-source" => undefined, "jdbc-driver" => {"h2" => { "driver-name" => "h2", "driver-module-name" => "com.h2database.h2", "driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource" }} } } [standalone@localhost:9999 /] /subsystem=datasources:installed-drivers-list { "outcome" => "success", "result" => [{ "driver-name" => "h2", "deployment-name" => undefined, "driver-module-name" => "com.h2database.h2", "module-slot" => "main", "driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource", "driver-class-name" => "org.h2.Driver", "driver-major-version" => 1, "driver-minor-version" => 2, "jdbc-compliant" => true }] }
使用 web控制台和命令行可以极大的简化 JDBC驱动的部署和数据源的创建。
|
命令行方式提供了一些列的命令来创建和更改数据源 :
[standalone@localhost:9999 /] help Supported commands: [...] data-source - allows to add new, modify and remove existing data sources xa-data-source - allows add new, modify and remove existing XA data sources 特定命令的详细描述请使用” -b”参数查询。
datasource子系统由 IronJacamar 项目提供。更多关于配置属性和属性的详细介绍请参考项目文档 :
IronJacamar 主页 : http://www.jboss.org/ironjacamar
项目文档 : http://www.jboss.org/ironjacamar/docs
Schema描述 : http://docs.jboss.org/ironjacamar/userguide/1.0/en-US/html/deployment.html#deployingds_descriptor
JMS服务器需要通过 messaging子系统进行配置。在本章节中,我们将概括介绍常用的配置项。其他详细的介绍,请参考 HornetQ用户指南 (参见 "参考 ").
JMS connection factories 可以分为两类 : In-VM connection factory和 被远程客户端使用的 connections factories. 每个 connecton factory都引用一个 connector ,每个
connector都关联到一个 socket binding. Connection Factory的 entry定义 factory被暴露的 JNDI name.
[...] [...] [...]
( 参见 standalone/configuration/standalone.xml)
Queues 和 topics 是 messaging 子系统的子资源 .每个 Entry指定一个 queue或者 topic的 JNDI名 :
[...]
(参见 standalone/configuration/standalone.xml)
JMS endpoints 通过命令行方式可以很容易的创建 :
[standalone@localhost:9999 /] add-jms-queue --name=myQueue --entries=queues/myQueue [standalone@localhost:9999 /] /subsystem=messaging/jms-queue=myQueue:read-resource { "outcome" => "success", "result" => {"entries" => ["queues/myQueue"]}, "compensating-operation" => undefined } JbossAS同时也提供了其他很多的维护 JMS子系统的命令 : [standalone@localhost:9999 /] help Supported commands: [...] add-jms-queue - creates a new JMS queue remove-jms-queue - removes an existing JMS queue add-jms-topic - creates a new JMS topic remove-jms-topic - removes an existing JMS topic add-jms-cf - creates a new JMS connection factory remove-jms-cf - removes an existing JMS connection factory 获取更多命令行的详细信息,请使用” --help”参数获取。
有些设置可以在通配符地址上生效,而不是一个特别的 messaging destination.Dead letter queue和 redelivery设置就可以使用通配符地址 :
[...] [...] jms.queue.DLQ jms.queue.ExpiryQueue 0 [...]
(参见 standalone/configuration/standalone.xml)
安全性的设置也可以使用通配符地址生效,如同 DLQ和 redelivery设置一样 :
[...] [...]
(参见 standalone/configuration/standalone.xml)
Messaging 子系统由 Hornetq项目提供。详细的关于可用的配置项信息,请查询 hornetq项目文档。
HornetQ主页 : http://www.jboss.org/hornetq
项目文档 : http://www.jboss.org/hornetq/docs
Web子系统的配置由三个部分组成 :JSP, connectors和 virtural servers。高级特性如 :负载均衡, failover等将在高”可用性指南”中介绍。默认配置对于大多数的用例都可以提供合理的性能。
需要的扩展 :
基本子系统配置的例子 :
依赖于其他子系统 :
无 .
这里的”配置“包含了所有关于 servlet engine自身的设置。详细的关于配置属性的介绍,请参考 JBossWeb有关文档.
[standalone@localhost:9999 /] /subsystem=web:read-resource { "outcome" => "success", "result" => { "configuration" => { "static-resources" => { "sendfile" => 49152, "max-depth" => 3, "read-only" => true, "webdav" => false, "listings" => false, "disabled" => false }, "jsp-configuration" => { "development" => false, "keep-generated" => true, "recompile-on-fail" => false, "check-interval" => 0, "modification-test-interval" => 4, "display-source-fragment" => true, "error-on-use-bean-invalid-class-attribute" => false, "java-encoding" => "UTF8", "tag-pooling" => true, "generate-strings-as-char-arrays" => false, "target-vm" => "1.5", "dump-smap" => false, "mapped-file" => true, "disabled" => false, "source-vm" => "1.5", "trim-spaces" => false, "smap" => true } }, "connector" => {"http" => undefined}, "virtual-server" => {"localhost" => undefined} } }
(参见 standalone/configuration/standalone.xml)
Connecotrs是 web子系统的子资源。每个 connector都引用一个特定的 socket binding:
[standalone@localhost:9999 /] /subsystem=web:read-children-names(child-type=connector) { "outcome" => "success", "result" => ["http"] } [standalone@localhost:9999 /] /subsystem=web/connector=http:read-resource(recursive=true) { "outcome" => "success", "result" => { "protocol" => "HTTP/1.1", "scheme" => "http", "socket-binding" => "http", "ssl" => undefined, "virtual-server" => undefined } }
创建一个 connector需要先声明一个 socket binding:
[standalone@localhost:9999 /] /socket-binding-group=standard-sockets/socket-binding=custom:add(port=8181) 新创建的没有被使用的 socket binding可以用来创建一个新的 connector配置 : [standalone@localhost:9999 /] /subsystem=web/connector=test-connector:add( socket-binding=custom, scheme=http, protocol="HTTP/1.1", enabled=true )
web子系统可以配置三种类型的 connecotr:
默认的 connector,通常运行在 8080端口。配置请参考以上内容
HTTPS connectors是 web子系统的子资源。默认使用 JSSE.每个 connector引用一个特定的 socket binding:
[standalone@localhost:9999 /] /subsystem=web:read-children-names(child-type=connector) { "outcome" => "success", "result" => [ "ajp", "http", "https" ] } [standalone@localhost:9999 /] /subsystem=web/connector=https:read-resource(recursive=true) { "outcome" => "success", "result" => { "protocol" => "HTTP/1.1", "scheme" => "https", "secure" => true, "socket-binding" => "https", "ssl" => {}, "virtual-server" => undefined } }
创建一个新的 connector首先需要声明一个新的 socket binding:
[standalone@localhost:9999 /] /socket-binding-group=standard-sockets/socket-binding=https:add(port=8443) 新创建的,没有使用的 socket binding可被用来设置新创建的 connecotr: [standalone@localhost:9999 /] /subsystem=web/connector=test-connector:add(socket-binding=https, scheme=https, protocol="HTTP/1.1", enabled=true, ssl = {})
默认 SSL使用” tomcat”别名和” changit”密码。可以使用 keytool来创建相应的 keystore:
keytool -genkey -alias tomcat -keyalg RSA
当然需要指定值是” changeit”的密码。
AJP Connectors是 web子系统的子资源。它和前段 apache httpd的 mod_jdk,mode_proxy和 mod_cluster一起使用。
每个 connecotor都引用一个特定的 socket binding:
[standalone@localhost:9999 /] /subsystem=web:read-children-names(child-type=connector) { "outcome" => "success", "result" => [ "ajp", "http" ] } [standalone@localhost:9999 /] /subsystem=web/connector=ajp:read-resource(recursive=true) { "outcome" => "success", "result" => { "protocol" => "AJP/1.3", "scheme" => "http", "socket-binding" => "ajp", "ssl" => undefined, "virtual-server" => undefined } }
创建一个新的 connector首先需要声明一个新的 socket binding:
[standalone@localhost:9999 /] /socket-binding-group=standard-sockets/socket-binding=ajp:add(port=8009) 新创建的,没有使用的 socket binding可被用来设置新创建的 connecotr: [standalone@localhost:9999 /] /subsystem=web/connector=ajp:add( socket-binding=ajpm, protocol="AJP/1.3", enabled=true )
Native connectors是基于 Tomcat native的高性能的 connectors.如果 nativie模块安装的话,就可以使用 native connectors 。
目前很多发布已经包含 jboss web native(如果你还没有试用过 JBoss web native)。
在配置层面,由于使用 OpenSSL,只有 SSL部分需要被不同的配置。
[standalone@localhost:9999 /] /subsystem=web/connector=https:read-resource(recursive=true) { "outcome" => "success", "result" => { "protocol" => "HTTP/1.1", "scheme" => "https", "secure" => true, "socket-binding" => "https", "ssl" => { "certificate-file" => "/home/jfclere/CERTS/SERVER/newcert.pem", "certificate-key-file" => "/home/jfclere/CERTS/SERVER/newkey.pem", "password" => "xxxxxxx" }, "virtual-server" => undefined } }
和 connector类似, virtual server 声明 web 子系统的子资源。可以通过使用别名来引用 virtual server,
同时 virtual server 也可以指定默认的 web 应用来充当 root web context 。
[standalone@localhost:9999 /] /subsystem=web:read-children-names(child-type=virtual-server) { "outcome" => "success", "result" => ["localhost"] } [standalone@localhost:9999 /] /subsystem=web/virtual-server=default-host:read-resource { "outcome" => "success", "result" => { "access-log" => undefined, "alias" => ["example.com"], "default-web-module" => undefined, "enable-welcome-root" => true, "rewrite" => undefined } }
增加一个 virtual server的声明可以通过默认的 add操作 :
[standalone@localhost:9999 /] /subsystem=web/virtual-server=example.com:add [standalone@localhost:9999 /] /subsystem=web/virtual-server=example.com:remove
在 configuration tree上任意一个节点上都可以执行增加和删除操作 |
Web子系统部件由 jboss web项目提供。关于 web子系统可配置的属性的详细介绍,请参考 JBoss Web文档 :
JBoss Web 配置和参考 : http://docs.jboss.org/jbossweb/7.0.x/config/index.html
JBossWeb 主页 : http://www.jboss.org/jbossweb
项目文档 : http://docs.jboss.org/jbossweb/7.0.x/
Web service endpoint 通过包含有 webservice endpoint 实现的部署来提供 因此他们可以通过部署资源进行查询。
进一步的信息,请参考”应用部署”章节。 每个 webservice endpoint 都需要指定一个 web context 和一个 wsdl的 URL :
[standalone@localhost:9999 /] /deployment="*"/subsystem=webservices/endpoint="*":read-resource { "outcome" => "success", "result" => [{ "address" => [ ("deployment" => "jaxws-samples-handlerchain.war"), ("subsystem" => "webservices"), ("endpoint" => "jaxws-samples-handlerchain:TestService") ], "outcome" => "success", "result" => { "class" => "org.jboss.test.ws.jaxws.samples.handlerchain.EndpointImpl", "context" => "jaxws-samples-handlerchain", "name" => "TestService", "type" => "JAXWS_JSE", "wsdl-url" => "http://localhost:8080/jaxws-samples-handlerchain?wsdl" } }] }
Webservice 子系统由 JBossWS项目提供。关于 websevice子系统可配置的属性的详细介绍,请参考 JBoss WS文档 :
JBossWS 主页 : http://www.jboss.org/jbossws
项目文档 : https://docs.jboss.org/author/display/JBWS