刚开始接触GlassFish时,觉得它好麻烦,配置也复杂,WEB管理端内容也繁多,其实还是自己对Java相关知识不了,再熟悉了这些之后,现在回头来看看,其实GlassFish的配置文件也是挺简单的。
推荐先去看看官方文档《GlassFish Server 4.0 Documentation》,英文版的。由于GlassFish的资料很少,中文版的更少,所以还是老老实实去看英文的官方文档吧。本文基于GlassFish 4.0来讲解。
首先创建一个域
[root@backup domains]# ../bin/asadmin -W password.txt -u admin create-domain G098_Domain
Using default port 4848 for Admin.
Using default port 8080 for HTTP Instance.
Using default port 7676 for JMS.
Using default port 3700 for IIOP.
Using default port 8181 for HTTP_SSL.
Using default port 3820 for IIOP_SSL.
Using default port 3920 for IIOP_MUTUALAUTH.
Using default port 8686 for JMX_ADMIN.
Using default port 6666 for OSGI_SHELL.
Using default port 9009 for JAVA_DEBUGGER.
Distinguished Name of the self-signed X.509 Server Certificate is:
[CN=backup,OU=GlassFish,O=Oracle Corporation,L=Santa Clara,ST=California,C=US]
Distinguished Name of the self-signed X.509 Server Certificate is:
[CN=backup-instance,OU=GlassFish,O=Oracle Corporation,L=Santa Clara,ST=California,C=US]
Domain G098_Domain created.
Domain G098_Domain admin port is 4848.
Domain G098_Domain admin user is "admin".
Command create-domain executed successfully.
上面显示的是一些默认参数。
在web管理端查看GlassFish的主要内容有如下一些:
图 1展开的内容比较多,我们就看看一二级内容
图 2上面的这些内容,在《GlassFish Server Open Source Edition Administration Guide Release 4.0》官方文档里都有详细介绍,看过之后,再看看这些就十分清晰了。
此时的配置文件domain.xml还都是默认值,完整的domain.xml见附录A。
对附录A的domain.xml进行折叠之后显示如下:
...
...
...
...
...
...
...
security-configurations 主要保存的是安全相关的配置,对应图1中
这里有两个authentication-service,第一个authentication-service是admin用户认证的adminAuth,第二个应该是通用的认证服务authorizationService。
第一个authentication-service又分为两个security-provider,除了name和module-class不一样,其他都相同,即这里通过两个Java类来提供了两种安全认证:adminSpecialLM和adminFileLM。
在未发布应用之前,此类元素为空。
有两个jdbc资源:__TimerPool和DerbyPool。
对应的还有两个jdbc连接池:__TimerPool和DerbyPool。
这两个默认的jdbc资源我们一般都没有用,后面在我的测试环境下会用到我们自己创建的jdbc。
当我们创建一个域时,默认会创建一个名为server的服务器,其引用的配置文件为server-config,后面的第2.6节将会介绍到。
这里的server有两个资源引用,即2.3节讲到的两个默认的jdbc资源。
我们是在单node环境下,所以只有一个名为localhost-G098_Domain(主机名+域名)的node,还指定了其安装目录。
configs下有两个config,分别为server-config和default-config。
server-config对应2.4节说到的server服务器,这就是它的配置内容。
另外需要说的是,每个GlassFish默认会有一个__asadmin服务器,这个admin服务器就是我们登陆4848这个web页面所使用的,是用来其他domain的,所以这个__asadmin服务器的配置文件内容就在default-config部分。
完整内容参见附录A,我们折叠一下,主要包含了几种服务,配置和线程池。
...
...
...
...
...
...
...
...
2.6.1.1 system-property
系统属性,这里显示的是JMS的端口和描述。
2.6.1.2 http-service
包含访问日志(空)和虚拟服务器server和__asasdmin的网络监听。
2.6.1.3 iiop-service
使用线程池 thread-pool-1,监听3700和两个启用了SSL的3820,3920端口。
2.6.1.4 admin-service
配置了jmx监听8686,以及一些其他属性。
2.6.1.5 connector-service
就只有一个关闭超时配置。
2.6.1.6 transaction-service
事务的日志路径。(启用了事务才有日志)
2.6.1.7 diagnostic-service
诊断服务为空。
2.6.1.8 security-service
...
...
...
...
...
...
详细展示如后面
2.6.1.8.1 auth-realm
安全服务配置了三个安全领域(auth-realm):admin-realm,file,certificate.
其中admin-realm的认证文件为config/admin-keyfile,file的认证文件为config/keyfile,而certificate应该是使用证书吧?
2.6.1.8.2 jacc-provider
接着是两个jacc-provider:default和simple。
2.6.1.8.3 audit-module
然后是一个audit-module审计模块,默认关闭。
2.6.1.8.4 message-security-config
再然后是两个message-security-config,分别在SOAP层和HttpServlet层进行认证。SOAP提供的是client类型认证,而HttpServlet提供的是server类型认证。
2.6.1.8.5 property
最后是一个默认加密算法SHA-256。
2.6.1.9 java-config
-XX:MaxPermSize=192m
-client
-Djava.awt.headless=true
-Djdk.corba.allowOutputStreamSubclass=true
-Djavax.xml.accessExternalSchema=all
-Djavax.management.builder.initial=com.sun.enterprise.v3.admin.AppServerMBeanServerBuilder
-XX:+UnlockDiagnosticVMOptions
-Djava.endorsed.dirs=${com.sun.aas.installRoot}/modules/endorsed${path.separator}${com.sun.aas.installRoot}/lib/endorsed
-Djava.security.policy=${com.sun.aas.instanceRoot}/config/server.policy
-Djava.security.auth.login.config=${com.sun.aas.instanceRoot}/config/login.conf
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as
-Xmx512m
-Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks
-Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/cacerts.jks
-Djava.ext.dirs=${com.sun.aas.javaRoot}/lib/ext${path.separator}${com.sun.aas.javaRoot}/jre/lib/ext${path.separator}${com.sun.aas.instanceRoot}/lib/ext
-Djdbc.drivers=org.apache.derby.jdbc.ClientDriver
-DANTLR_USE_DIRECT_CLASS_LOADING=true
-Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory
-Dorg.glassfish.additionalOSGiBundlesToStart=org.apache.felix.shell,org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.apache.felix.gogo.command,org.apache.felix.shell.remote,org.apache.felix.fileinstall
-Dosgi.shell.telnet.port=6666
-Dosgi.shell.telnet.maxconn=1
-Dosgi.shell.telnet.ip=127.0.0.1
-Dgosh.args=--nointeractive
-Dfelix.fileinstall.dir=${com.sun.aas.installRoot}/modules/autostart/
-Dfelix.fileinstall.poll=5000
-Dfelix.fileinstall.log.level=2
-Dfelix.fileinstall.bundles.new.start=true
-Dfelix.fileinstall.bundles.startTransient=true
-Dfelix.fileinstall.disableConfigSave=false
-XX:NewRatio=2
-Dcom.ctc.wstx.returnNullForDefaultNamespace=true
debug端口9009,以及一些JVM相关的参数。发布的应用就是运行在这些参数下的JVM中。
2.6.1.10 network-config
首先是协议,配置了名为http-listener-1的协议和名为http-listener-2协议,还有一个admin-listener协议。前两个为发布的应用所用(8080端口和8181端口),而最后一个为__asadmin虚拟服务器所用(4848)。都没有启用文件缓存。http-listener-2还多了一个名为s1as的证书昵称,在keystore.jks和cacerts.jks配置时会用到这个昵称。
然后是网络监听,就是针对上面三个协议的监听:8080,8181,4848。还指定了使用的传输层协议tcp,线程池(前两个为http-thread-pool,后一个为admin-thread-pool),即应用的虚拟服务器server和管理端的虚拟服务器__asadmin之间的线程互不干扰。
最后定义的是传输层协议,即前面用到的tcp。
2.6.1.11 thread-pools
定义的是线程池,默认有三个:admin-thread-pool,http-thread-pool,thread-pool-1。前两个线程池在上面已经使用到。
...
...
...
...
...
...
...
...
...
...
...
...
default-config的参数配置都是立即生效的。
2.6.2.1 http-service
在虚拟服务器server 中指定了default-web.xml文件。
2.6.2.2 iiop-service
监听的端口没有写死,而是引用的变量IIOP_LISTENER_PORT,IIOP_SSL_LISTENER_PORT,IIOP_SSL_MUTUALAUTH_PORT
2.6.2.3 admin-service
在server-config中,类型为 das-and-server,这里类型为server。
2.6.2.4 web-container
空配置。
2.6.2.5 ejb-container
只指定了一个session存储位置。
2.6.2.6 mdb-container
2.6.2.7 jms-service
在server-config中没有的。
2.6.2.8 log-service
日志相关的配置。路径logs/server.log。
2.6.2.9 security-service
安全服务下同server-config一样有三个认证领域admin-realm,file和certificate;两个jacc-provider;一个audit-module;这里只有一个针对SOAP的message-security-config。
2.6.2.10 transaction-service
同前。
2.6.2.11 diagnostic-service
空。
2.6.2.12 java-config
-XX:MaxPermSize=192m
-server
-Djava.awt.headless=true
-Djdk.corba.allowOutputStreamSubclass=true
-XX:+UnlockDiagnosticVMOptions
-Djava.endorsed.dirs=${com.sun.aas.installRoot}/modules/endorsed${path.separator}${com.sun.aas.installRoot}/lib/endorsed
-Djava.security.policy=${com.sun.aas.instanceRoot}/config/server.policy
-Djava.security.auth.login.config=${com.sun.aas.instanceRoot}/config/login.conf
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as
-Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks
-Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/cacerts.jks
-Djava.ext.dirs=${com.sun.aas.javaRoot}/lib/ext${path.separator}${com.sun.aas.javaRoot}/jre/lib/ext${path.separator}${com.sun.aas.instanceRoot}/lib/ext
-Djdbc.drivers=org.apache.derby.jdbc.ClientDriver
-DANTLR_USE_DIRECT_CLASS_LOADING=true
-Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory
-XX:NewRatio=2
-Xmx512m
-Dorg.glassfish.additionalOSGiBundlesToStart=org.apache.felix.shell,org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.apache.felix.gogo.command,org.apache.felix.fileinstall
-Dosgi.shell.telnet.port=${OSGI_SHELL_TELNET_PORT}
-Dosgi.shell.telnet.maxconn=1
-Dosgi.shell.telnet.ip=127.0.0.1
-Dgosh.args=--noshutdown -c noop=true
-Dfelix.fileinstall.dir=${com.sun.aas.installRoot}/modules/autostart/
-Dfelix.fileinstall.poll=5000
-Dfelix.fileinstall.log.level=3
-Dfelix.fileinstall.bundles.new.start=true
-Dfelix.fileinstall.bundles.startTransient=true
-Dfelix.fileinstall.disableConfigSave=false
监听debug端口JAVA_DEBUGGER_PORT。
2.6.2.13 availability-service
2.6.2.14 network-config
...
...
...
network-config主要分为三部分:protocols,network-listeners和transports。
2.6.2.14.1 protocols
2.6.2.14.2 network-listeners
2.6.2.14.3 transports
2.6.2.15 thread-pools
2.6.2.17 group-management-service
server-config没有的。空。
2.6.2.18 system-property
配置了好些前面提到的端口
域名为G098_Domain。
这是在创建域G098_Domain时生成的一个ID,以及与主机名(本机为backup)相关的信息secure-admin-principal。
我测试环境配置文件,是在做了一些配置之后产生的,包括调整某些属性值,配置证书,发布应用,添加JDBC。
完整的文件见附录B。
这里我也只详细介绍新增的部分。
先来看个大概
与default domain.xml相比,
与default domain.xml同。
default domain.xml 没有此项。此处为空配置。
default domain.xml有此项,但为空。此处为新增。
在default domain.xml基础上新增
在原有的两条基础上新增。
新增
JVM选项就不比较了,自己看。
protocols下还新增了三条协议
admin-listener这条网络监听的协议做了修改。
传输层协议tcp也修改该了些属性
名为http-thread-pool的线程池的属性也做了修改
新增
基本差不多。
与default domain.xml同。
在原有两条基础上新增。
空配置。
发布应用后才会有的。应用下有多个模块,也可以发布多个应用。
-XX:MaxPermSize=192m
-client
-Djava.awt.headless=true
-Djdk.corba.allowOutputStreamSubclass=true
-Djavax.xml.accessExternalSchema=all
-Djavax.management.builder.initial=com.sun.enterprise.v3.admin.AppServerMBeanServerBuilder
-XX:+UnlockDiagnosticVMOptions
-Djava.endorsed.dirs=${com.sun.aas.installRoot}/modules/endorsed${path.separator}${com.sun.aas.installRoot}/lib/endorsed
-Djava.security.policy=${com.sun.aas.instanceRoot}/config/server.policy
-Djava.security.auth.login.config=${com.sun.aas.instanceRoot}/config/login.conf
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as
-Xmx512m
-Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks
-Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/cacerts.jks
-Djava.ext.dirs=${com.sun.aas.javaRoot}/lib/ext${path.separator}${com.sun.aas.javaRoot}/jre/lib/ext${path.separator}${com.sun.aas.instanceRoot}/lib/ext
-Djdbc.drivers=org.apache.derby.jdbc.ClientDriver
-DANTLR_USE_DIRECT_CLASS_LOADING=true
-Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory
-Dorg.glassfish.additionalOSGiBundlesToStart=org.apache.felix.shell,org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.apache.felix.gogo.command,org.apache.felix.shell.remote,org.apache.felix.fileinstall
-Dosgi.shell.telnet.port=6666
-Dosgi.shell.telnet.maxconn=1
-Dosgi.shell.telnet.ip=127.0.0.1
-Dgosh.args=--nointeractive
-Dfelix.fileinstall.dir=${com.sun.aas.installRoot}/modules/autostart/
-Dfelix.fileinstall.poll=5000
-Dfelix.fileinstall.log.level=2
-Dfelix.fileinstall.bundles.new.start=true
-Dfelix.fileinstall.bundles.startTransient=true
-Dfelix.fileinstall.disableConfigSave=false
-XX:NewRatio=2
-Dcom.ctc.wstx.returnNullForDefaultNamespace=true
-XX:MaxPermSize=192m
-server
-Djava.awt.headless=true
-Djdk.corba.allowOutputStreamSubclass=true
-XX:+UnlockDiagnosticVMOptions
-Djava.endorsed.dirs=${com.sun.aas.installRoot}/modules/endorsed${path.separator}${com.sun.aas.installRoot}/lib/endorsed
-Djava.security.policy=${com.sun.aas.instanceRoot}/config/server.policy
-Djava.security.auth.login.config=${com.sun.aas.instanceRoot}/config/login.conf
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as
-Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks
-Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/cacerts.jks
-Djava.ext.dirs=${com.sun.aas.javaRoot}/lib/ext${path.separator}${com.sun.aas.javaRoot}/jre/lib/ext${path.separator}${com.sun.aas.instanceRoot}/lib/ext
-Djdbc.drivers=org.apache.derby.jdbc.ClientDriver
-DANTLR_USE_DIRECT_CLASS_LOADING=true
-Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory
-XX:NewRatio=2
-Xmx512m
-Dorg.glassfish.additionalOSGiBundlesToStart=org.apache.felix.shell,org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.apache.felix.gogo.command,org.apache.felix.fileinstall
-Dosgi.shell.telnet.port=${OSGI_SHELL_TELNET_PORT}
-Dosgi.shell.telnet.maxconn=1
-Dosgi.shell.telnet.ip=127.0.0.1
-Dgosh.args=--noshutdown -c noop=true
-Dfelix.fileinstall.dir=${com.sun.aas.installRoot}/modules/autostart/
-Dfelix.fileinstall.poll=5000
-Dfelix.fileinstall.log.level=3
-Dfelix.fileinstall.bundles.new.start=true
-Dfelix.fileinstall.bundles.startTransient=true
-Dfelix.fileinstall.disableConfigSave=false
-Djava.awt.headless=true
-Djava.security.policy=${com.sun.aas.instanceRoot}/config/server.policy
-Dosgi.shell.telnet.maxconn=1
-Dfelix.fileinstall.disableConfigSave=false
-Dfelix.fileinstall.poll=5000
-Xms7168m
-Xmx7168m
-Djava.endorsed.dirs=${com.sun.aas.installRoot}/modules/endorsed${path.separator}${com.sun.aas.installRoot}/lib/endorsed
-Dosgi.shell.telnet.port=6666
-XX:+UnlockDiagnosticVMOptions
-Dcom.ctc.wstx.returnNullForDefaultNamespace=true
-Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory
-Djava.ext.dirs=${com.sun.aas.javaRoot}/lib/ext${path.separator}${com.sun.aas.javaRoot}/jre/lib/ext${path.separator}${com.sun.aas.instanceRoot}/lib/ext
-Djavax.xml.accessExternalSchema=all
-Dgosh.args=--nointeractive
-XX:PermSize=384m
-XX:MaxPermSize=768m
-Djavax.management.builder.initial=com.sun.enterprise.v3.admin.AppServerMBeanServerBuilder
-Djdk.corba.allowOutputStreamSubclass=true
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as
-Dfelix.fileinstall.bundles.startTransient=true
-Dfelix.fileinstall.bundles.new.start=true
-Dfelix.fileinstall.dir=${com.sun.aas.installRoot}/modules/autostart/
-Djava.security.auth.login.config=${com.sun.aas.instanceRoot}/config/login.conf
-Dosgi.shell.telnet.ip=127.0.0.1
-Dfelix.fileinstall.log.level=2
-XX:NewRatio=2
-Dorg.glassfish.additionalOSGiBundlesToStart=org.apache.felix.shell,org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.apache.felix.gogo.command,org.apache.felix.shell.remote,org.apache.felix.fileinstall
-server
-Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks
-Djdbc.drivers=org.apache.derby.jdbc.ClientDriver
-Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/cacerts.jks
-DANTLR_USE_DIRECT_CLASS_LOADING=true
-Dsocketio.sslPassword=123123
-Dsocketio.useSsl=true
-XX:MaxPermSize=192m
-server
-Djava.awt.headless=true
-Djdk.corba.allowOutputStreamSubclass=true
-XX:+UnlockDiagnosticVMOptions
-Djava.endorsed.dirs=${com.sun.aas.installRoot}/modules/endorsed${path.separator}${com.sun.aas.installRoot}/lib/endorsed
-Djava.security.policy=${com.sun.aas.instanceRoot}/config/server.policy
-Djava.security.auth.login.config=${com.sun.aas.instanceRoot}/config/login.conf
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as
-Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks
-Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/cacerts.jks
-Djava.ext.dirs=${com.sun.aas.javaRoot}/lib/ext${path.separator}${com.sun.aas.javaRoot}/jre/lib/ext${path.separator}${com.sun.aas.instanceRoot}/lib/ext
-Djdbc.drivers=org.apache.derby.jdbc.ClientDriver
-DANTLR_USE_DIRECT_CLASS_LOADING=true
-Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory
-XX:NewRatio=2
-Xmx512m
-Dorg.glassfish.additionalOSGiBundlesToStart=org.apache.felix.shell,org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.apache.felix.gogo.command,org.apache.felix.fileinstall
-Dosgi.shell.telnet.port=${OSGI_SHELL_TELNET_PORT}
-Dosgi.shell.telnet.maxconn=1
-Dosgi.shell.telnet.ip=127.0.0.1
-Dgosh.args=--noshutdown -c noop=true
-Dfelix.fileinstall.dir=${com.sun.aas.installRoot}/modules/autostart/
-Dfelix.fileinstall.poll=5000
-Dfelix.fileinstall.log.level=3
-Dfelix.fileinstall.bundles.new.start=true
-Dfelix.fileinstall.bundles.startTransient=true
-Dfelix.fileinstall.disableConfigSave=false