本章介绍有关 Sun Java System Application Server Enterprise Edition 8.2 软件的已知问题和相应的解决方法。如果汇总说明未指明特定平台,则所有平台都可能出现此问题。本部分信息按以下内容进行组织:
本节介绍已知的管理问题和相应的解决方法。
使用“安装期间自动配置”选项安装 Application Server 时,不支持负载平衡器功能。
解决方法: 可以在 Application Server 安装完成以后配置负载平衡器功能。
要配置负载平衡器功能,需要在系统中安装 Application Server 和 Web Server。
要配置负载平衡器功能,请执行以下步骤:
在注册表 HKEY_LOCAL_MACHINE -> Sun Microsystem -> EntSys -> Installer -> Application Server 中,将 IS_LB 的值设置为 true,将 Cfgr_LB 的值设置为 false。
转换至 setup 目录。
cd JavaES-Install-Dir\setup\
|
运行 ASConfigure.bat 批处理文件。
按照说明进行操作并提供适当的值。
对于 AS_LB 插件,键入 Sun Java System Web Server [Mandatory],因为这是 Java ES 5 下唯一支持的插件。
重新引导系统。
默认情况下,由 asenv.conf 指向的 domain1 的 AS_ACC_CONFIG 变量的硬编码值位于 JavaES-Install-Dir \lib\lib\package-appclient.xml 中。如果删除 domain1 并创建新域,将不会用新域名更新 AS_ACC_CONFIG 变量,从而导致 package-appclient 脚本失败。
执行以下操作之一:
保持 domain1 不变,围绕它创建其他域。
删除 domain1 并用新域名替换 JavaES-Install-Dir \lib\lib\package-appclient.xml 中用于 domain1 的硬编码值。如果 domain1 不存在,每次创建新域时请重复此步骤。
如果在已安装负载平衡器插件的 Application Server 版本(例如 7.1EE)上安装负载平衡插件,则 8.2EE 插件将无提示替换任何现有负载平衡器(即使已创建可在其中运行此插件的新服务器实例)。
默认情况下,插件文件将安装在 install_dir/plugins/lbplugin 目录下,这表示每个版本的 Application Server 仅可以使用一个版本的插件。请注意,控制台安装程序会显示消息,表明将进行卸载,但此消息容易被忽略。
并非任何用户都会遇到此问题。如果遇到此问题,请删除旧的 Application Server 版本并进行新安装而非升级安装。
与 Application Server 7 及其兼容版本相比,对 Application Server 8.2 中的 asadmin 命令进行了某些修改。例如, 对 Application Server 7 及其兼容版本来说,启动服务器实例的命令如下:
asadmin start-instance |
在 8.2 版本中,相应的命令如下:
asadmin start-domain --user admin domain1 |
有关最新的 asadmin 命令语法的完整信息,请参阅以下文档:
《Sun Java System Application Server Enterprise Edition 8.2 管理指南》
《Sun Java System Application Server Enterprise Edition 8.2 Reference Manual》
《Sun Java System Application Server Enterprise Edition 8.2 Upgrade and Migration Guide》
由于默认端口已更改,从 Java ES 2 Application Server 7 及其兼容版本向 Java ES 5 Application Server 8.2 升级时,可能会发生不兼容或错误。
无法使用 backup-domain 和 restore-domain 命令镜像同一 Application Server 安装上的域,这是由于使用不同于原始名称的其他名称不能恢复域,即使 asadmin restore-domain 命令提供了重命名域的选项。重命名备份域似乎已经成功,但尝试启动重命名的域却会失败,因为没有更改域配置中的条目,并且 startserv 和 stopserv 仍然使用原始域名来设置路径。
用于 restore-domain 的域名必须与用于原始 backup-domain 命令的域名相同。Application Server 8.2 中的 backup-domain 和 restore-domain 命令仅用于在同一台计算机上备份和恢复同一个域。
可以在 Application Server 上配置 J2SE 1.4.、5.0 及其兼容版本。J2SE 5.0 平台的完整功能是可以启动 JMX 代理。在服务器启动时,如果您明确设置了系统属性,此代理将被激活。
示例值包括以下内容:
name="com.sun.management.jmxremote" value="true" name="com.sun.management.jmxremote.port" value="9999" name="com.sun.management.jmxremote.authenticate" value="false" name="com.sun.management.jmxremote.ssl" value="false"
在配置了 JMX 属性并启动服务器之后,将在 Application Server VM 中启动新的 jmx-connector 服务器。此过程的副作用是会对管理功能造成不利影响,并且 Application Server 管理 GUI 和 CLI 可能会产生异常结果。之所以出现这样的结果,是因为内置 jmx-connector 服务器与新的 jmx-connector 服务器之间存在一些冲突。
如果使用 jconsole(或任何其他 JMX 兼容客户机),请考虑重新使用标准的 JMX Connector Server,它在 Application Server 启动时启动。
服务器启动时,在 server.log 中将出现一行文字,与下一段落中所显示的文字类似。您可以连接到其中指定的 JMXServiceURL,并在成功提供证书后执行相同的管理和配置操作,例如:
[#|2004-11-24T17:49:08.203-0800|INFO|sun-appserver-ee8.1|javax.enterprise. system.tools.admin|_ThreadID=10;|ADM1501: Here is the JMXServiceURL for the JMXConnectorServer: [service:jmx:rmi:///jndi/rmi://hostname:8686/management/ rmi-jmx-connector]. This is where the remote administrative clients should connect using the JSR 160 JMX Connectors.|#]
有关更多信息,请参阅《Sun Java System Application Server 8.2 Administration Guide》。
如果某个应用程序具有可导出 Web 服务 URL 的 EJB 模块,则在用该应用程序设置负载平衡器配置时,Web 服务环境中的超级用户不会包含在结果文件 loadbalancer.xml 中。
编辑 loadbalancer.xml 文件,按如下所示添加缺少的 Web 模块:
<web-module context-root="context-root-name" disable-timeout-in-minutes="30" enabled="true"/> |
用作为 EJB 提供的 Web 服务环境中的超级用户名称替换 context-root-name 的值。
Application Server 域和服务器未使用由相关配置的 java-config 元素的 java-home 属性指向的 JDK。
对于安装的给定服务器,appserver-installation-dir/config/asenv.conf 文件确定了 Application Server 进程针对所有域使用的 JDK 。该文件中的属性 AS_JAVA 确定了所使用的 JDK,此属性是在安装时设置的。如果安装完成后,Application Server 进程使用的是其他 JDK,则可以将该值改为指向所需的 JDK。请注意,安装的此服务器中的所有域均受此更改影响。
不会检查对 asenv.conf 文件手动更改的有效性,因此在更改时要小心。修改 AS_JAVA 的值时,请检查产品文档以了解最低的 JDK 版本要求。
此问题由错误的 %CONFIG_HOME% 值引起。
将现有 asant 重命名为 asant.bak。
将as_install/lib/install/templates/ee(适用于 SE 或 EE 版本)中的 asant.template 文件复制到 as_install/bin/ 目录中,并将其重命名为 asant。
编辑新复制的 as_install/bin/asant 文件,用 as_install/config 替换 %CONFIG_HOME% 标记。
如果对原始 asant.bak 文件进行了任何手动更改,请将其并入新的 asant 文件。
如果服务器管理员的 home 目录中不包含此文件,在升级该服务器上的某些应用程序时可能会出现严重错误。
如果可能,应该由安装服务器的用户运行 asadmin start-domain domain1 命令。
如果此命令不是由该用户运行的,应将 .asadmintruststore 从安装用户的 home 目录移动或复制到运行用户的 home 目录中。
请注意,如果将该文件从安装用户的 home 目录移动(而非复制)到运行用户的 home 目录,可能会出现错误 6309079、6310428 和 6312869 所述的应用程序升级问题。出现这些问题的原因是升级或安装用户的 home 目录中不再具有 .asadminstruststore 文件。
域的主密码包含百分比 (%) 字符时,域无法启动。
域的主密码不应包含百分比字符 (%)。创建新域或更改现有域的主密码时适用此解决方法。
创建安全的 http-listener 并安装 lbplugin 后,将修改 webserver_instance_dir/config 目录下的 magnus.conf 和 obj.conf 文件,并删除 lbplugin 的内容。
安装程序修改了 Application Server 上的 magnus.conf 和 obj.conf 配置文件,这些文件是负载平衡器安装程序插件的一部分。如果登录到 Application Server 管理控制台,并尝试为已安装负载平衡器的实例管理实例配置,则 Application Server 将发布警告消息,报告已检测到在配置中进行了手动编辑。事实上,此警告是指安装程序所做的更改。
验证安装程序所做的更改是否被覆写。
本节介绍已知的应用程序客户机问题和相应的解决方法。
如果在您的客户机 JAR 中具有顶层 JAR 文件(在此情况下,为 reporter.jar),则当您部署客户机 JAR 时,该 JAR 的 MANIFEST 文件将覆盖客户机 JAR 的 MANIFEST 文件。
无。
不再支持动态内容技术,例如 CGI-bin 和 SHTML。
请改为使用 JSP 和 Web 服务技术。
本节介绍已知的捆绑的 Sun JDBC 驱动程序问题和相应的解决方法。
运行两个并行事务时如果其中一个被回滚,则使用预处理更新语句时会遇到此问题。
设置连接的隔离级别,并在同一隔离级别创建相应的连接池。有关配置连接池的更多信息,请参见《Sun Java System Application Server Enterprise Edition 8.2 管理指南》。
如果应用程序在一个事务中生成超过 3000 个 PreparedStatement 对象,DB2 可能会出现以下错误:
[sunm][DB2 JDBC 驱动程序] 无更多可用语句。请重新创建具有较大 dynamicSections 值的软件包。
将以下属性添加到连接池定义中,确保驱动程序可以重新绑定具有较大动态段值的 DB2 软件包:
createDefaultPackage=true replacePackage=true dynamicSections=1000
有关配置连接池的详细信息,请参见《Sun Java System Application Server Enterprise Edition 8.2 管理指南》。
可能抛出的与 PreparedStatement 错误相关的另一条错误消息为:
[sunm][DB2 JDBC 驱动程序][DB2] 虚拟存储或数据库资源不可用。
增大 DB2 服务器的配置参数 APPLHEAPSZ。例如,使用 4096。
隔离级别为 TRANSACTION_SERIALIZABLE。如果应用程序使用隔离级别 TRANSACTION_SERIALIZABLE 并使用前面建议的某个参数,该应用程序可能会在获取连接时挂起。
要设置连接隔离级别,必须以同一隔离级别创建相应的连接池。有关说明,请参见《Sun Java System Application Server Enterprise Edition 8.2 管理指南》。
本节介绍已知的 J2EE 连接器体系结构问题和相应的解决方法。
此方案中,已在 DAS 和连接器连接池中部署了独立或嵌入式连接器模块,并且已为该部署的模块创建了资源。在重新启动 DAS 实例后,如果将 cascade 设置为 false,取消部署连接器模块的操作将失败并且会出现以下异常:
[#|2004-10-31T19:52:23.049-0800|INFO|sun-appserver-ee8.1|javax.enterprise.system .core|_ThreadID=14;|CORE5023:卸载应用程序时出错 [foo]|#]
重新启动 DAS 实例。使用级联的取消部署(设置级联选项为 true)来取消部署独立连接器和嵌入式连接器。
由于在命令行中使用 asadmin create-jms-resource 命令创建新的 JMS 资源时无法指定最小池大小和最大池大小,因此 asadmin 命令应使用默认池大小的值(最小值为 8,最大值为 32)来创建资源。相反,从命令行结果创建资源将导致最小池大小和最大池大小的默认值分别为 1 和 250。
通过命令行创建 JMS 资源后,使用管理控制台修改最小池大小和最大池大小的值。
本节介绍已知的文档问题和相应的解决方法。
缺少多个 AMX 接口和方法的 Javadoc 或该 Javadoc 不正确:
ConnectorConnectionPoolStats 和 AltJDBCConnectionPoolStats 中缺少用于获取 NumConnAcquired 和 NumConnReleased 统计信息的 getter 方法。
在 EJBCacheStats 中调用以下方法时将抛出异常: getPassivationSuccesses()、getExpiredSessionsRemoved()、 getPassivationErrors() 和 getPassivations()。
服务器启动后,可能需要几秒钟才能注册和使用所有的 AMX MBean。
常数 XTypes.CONNNECTOR_CONNECTION_POOL_MONITOR 拼写错误 ("NNN")。
线程 "main" 中会抛出以下异常:java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher。
建议不要使用捆绑的 ANT 执行 Application Server 外的任务。
《Sun Java System Application Server Enterprise Edition 8.2 Performance Tuning Guide》错误地介绍了有关日志选项的以下内容:
管理 GUI 提供了以下两个日志记录选项:
选项 1-将 stdout (System.out.print) 内容记录到事件日志中
选项 2-将 stderr (System.err.print) 内容记录到事件日志中
Application Server Enterprise Edition 8.2 中不再存在这些日志选项。
Application Server Enterprise Edition 8.2 的文档《Sun Java System Application Server Enterprise Edition 8.2 Performance Tuning Guide》中的“HTTP File Cache”一节介绍了 HTTP 文件高速缓存功能。但是,Application Server Enterprise Edition 8.2 中不包括此功能。请注意,已在 Application Server 9.0 中重新引入了此功能。
本节介绍已知的高可用性数据库 (HADB) 问题和相应的解决方法。
使用 hadbm set 命令增加设备或缓冲区大小时,管理系统将在创建数据库或添加节点时检查资源的可用性。不过,设备或主内存缓冲区大小发生变化时,系统不检查是否可以提供足够的资源。
在增大 devicesize 或 buffersize 配置属性之前,确认所有主机上都有足够的可用磁盘空间或内存空间。
同一软件包不能在不同主机上的不同位置使用同一名称注册。例如:
hadbm registerpackage test --packagepath=/var/install1 --hosts europa11 Package successfully registered. hadbm registerpackage test --packagepath=/var/install2 --hosts europa12 hadbm:Error 22171: A software package has already been registered with the package name test. |
HADB 不支持数据库群集中节点之间的异构路径。确保 HADB 服务器的安装目录 (--packagepath) 在所有参与的主机上都相同。
在具有多个网络接口的主机上运行管理代理时,如果所有网络接口不是在同一子网中,则 createdomain 命令可能会失败:
hadbm:Error 22020: The management agents could not establish a domain, please check that the hosts can communicate with UDP multicast. |
如果没有配置,管理代理将使用 UDP 多址广播的“首个”接口。“首个”由 java.net. NetworkInterface.getNetworkInterfaces() 的结果定义。
最佳解决方法是告知管理代理使用哪个子网 (在配置文件中设置 ma.server.mainternal.interfaces 。例如,ma.server.mainternal.interfaces=10.11.100.0 )。此外,也可以配置子网之间的路由器,以便路由多址广播数据包(管理代理使用多址广播地址 228.8.8.8)。
在重试管理代理的新配置之前,可能需要清除管理代理系统信息库。停止域中的所有代理,并删除系统信息库目录(由管理代理配置文件中的 repository.dr.path 标识)中的所有文件和目录。必须先在所有主机上执行此清除,然后才能用新配置文件重新启动代理。
删除 HADB 实例后,尝试使用 configure-ha-cluster 命令创建新实例失败。此问题在于保留了原始 HADB 实例的旧目录 ha_install_dir/rep/* 和 ha_install_dir/config/hadb/instance_name。
请确保在删除 HADB 实例后手动删除这些目录。
在 Red Hat Enterprise Linux 3.0 的 64 位版本中有一个错误,使 clu_trans_srv 进程在执行异步 I/O 时进入不可中断模式。这意味着 kill -9 命令不起作用,必须重新引导操作系统。
使用 Red Hat Enterprise Linux 3.0 的 32 位版本。
当密码存储在 hadb 中时,其中的大写字母会转换成小写字母。
请勿使用包含大写字母的密码。
服务器上的资源争用问题有时会导致管理客户机断开连接。重新连接时,可能会返回以下误导性错误消息“hadbm:错误 22184:必须提供密码才能连接到管理代理”。
检查服务器上是否发生资源问题,并采取适当的措施(例如,添加更多资源),然后再尝试重新操作。
IP 地址类似于 0.0.0.0 的特殊用途的接口不应注册为可供管理代理中的 HADB 节点使用的接口。如果用户使用主机名称而不是 IP 地址发出 hadbm create 命令,将 HADB 节点设置到这些接口上,则注册这些接口可能会导致出现此问题。此后,节点将无法通信,从而导致 create 命令挂起。
在具有多个接口的主机上使用 hadbm create 时,始终明确使用 DDN 表示法来指定 IP 地址。
在具有某些配置和负载的 Windows 平台上,操作系统中可能会出现大量的重汇编失败。已经发现 20 多个节点的配置在并行运行多个表扫描 (select *) 时有此问题。可能的症状包括:在系统的各个部分发生频繁的事务异常终止、修复或恢复耗时过长以及频繁超时。
要修复此问题,可将 Windows 注册表变量 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 设置为高于默认值 100 的值。为了达到最佳效果,可以将该值增加到 0x1000 ( 4096)。有关更多信息,请参见来自 Microsoft 支持页面的文章 811003。
机器过载时,屏蔽机制失效,已键入密码的某些字符可能会暴露出来。这种暴露会带来次要安全风险。密码应始终保持屏蔽。
将密码置于其自身的密码文件中(此方法推荐用于 Application Server 8.1 版和更高版本),并通过 --adminpassword 或 --dbpasswordfile 选项来引用这些文件。
本节介绍已知的安装问题和相应的解决方法。
Apache 和 IIS 不能通过 Java ES 5 安装程序进行配置。需要在 Windows 平台上手动配置 Aapche 和 IIS。
要配置负载平衡器 Apache 或 IIS,请执行以下步骤:
配置 Apache 2.x:
安装 Apache 2.x。
Apache 安装在 APDIR=C:\Apache2\Apache2 目录中
使用最小安装安装 JES5。
取消选定除负载平衡器之外的所有组件。Java ES 5 安装在 JES5DIR=C:\Program Files\Sun\JavaES5 目录中。
在 Apache2 目录中创建 resource 和 errorpages 目录。
mkdir %APDIR%\modules\resource
mkdir %APDIR%\modules\errorpages
将资源文件复制到 resource 目录。
cd %APDIR%\modules\resource
copy %JES5DIR%\appserver\lib\webserver-plugin\windows\apache2\LBPlugin*.res
将负载平衡器 DLL 复制到 modules 目录。
cd %APDIR%\modules
copy %JES5DIR%\appserver\lib\webserver-plugin\windows\apache2\mod_loadbalancer.dll
将模板 errorpages 复制到 errorpages 目录。
cd %APDIR%\modules\errprpages
copy %JES5DIR%appserver\lib\webserver-plugin\windows\iws\errorpages
将负载平衡器模板和其他 DTD 复制到 Apache config 目录。
cd %APDIR%\config
copy %JES5DIR%\appserver\lib\install\templates\loadbalancer.xml.template
copy %JES5DIR%\appserver\lib\dtds\sun-loadbalancer*
创建 httpd.conf 文件的备份。
cd %APDIR%\config
copy httpd.conf httpd.conf.orig
编辑 httpd.conf 文件。
将下列行附加到 httpd.conf 文件:
##BEGIN EE LB Plugin Parameters LoadModule apachelbplugin_module modules/mod_loadbalancer.dll <IfModule mod_apache2lbplugin.cpp> config-file "C:\Apache2\Apache2/conf/loadbalancer.xml" locale en </IfModule> <VirtualHost 10.12.8.107> DocumentRoot "C:\Apache2\Apache2/htdocs" ServerName vm07 </VirtualHost> ##END EE LB Plugin Parameters
将 C:\Apache2\Apache2 替换为实际的 %APDIR% 目录。
此外还需替换 IP、ServerName 和 DocumentRoot 目录。
在 %APDIR% 中创建新的 sec_db_files 目录。
cd %APDIR%
mkdir sec_db_files
将 NSS 密钥存储复制到 %APDIR%\sec_db_files 目录。
cd %APDIR%\sec_db_files
copy %JES5DIR%\appserver\lib\webserver-plugin\windows\iis\*.db
设置包含所需库的 PATH。
并将下列附加路径添加到其前面:
PATH %JES5DIR%\share\lib;%JES5DIR%\appserver\lib;%JES5DIR%\appserver\bin
将 %JES5DIR% 替换为实际的 Java ES 5 目录。
在系统环境中添加 NSPR_NATIVE_THREADS_ONLY 变量(其值为 1)。
重新引导并测试 Apache 2(配置完 loadbalancer.xml 后)。
配置 IIS LBPlugin:
在 c:\inetpub\wwwroot 目录中创建 sun-passthrough 目录。
cd c:\inetpub\wwwroot
mkdir sun-passthrough
在 c:\inetpub\wwwroot\sun-passthrough 目录中创建 errorpages、resource 和 sec_db_files 目录。
cd c:\inetpub\wwwroot\sun-passthrough
mkdir errorpages
mkdir resources
mkdir sec_db_files
将 DLL 文件复制到 sun-passthrough 目录。
copy <as_install_dir>/appserver/lib/webserver-plugin/iis/*.dll c:\inetpub\wwwroot\sun-passthrough\
将 DTD 复制到 sun-passthrough 目录。
copy <as_install_dir>/appserver/lib/dtds/sun-loadbalancer*.dtd c:\inetpub\wwwroot\sun-passthrough\
将 sun-passthrough.properties 文件复制到 sun-passthrough 目录。
copy <as_install_dir>/appserver/lib/webserver-plugin/iis c:\inetpub\wwwroot\sun-passthrough\
将安全性 DB 文件复制到 sun-passthrough 目录。
copy <as_install_dir>/appserver/lib/webserver-plugin/iis/*.db c:\inetpub\wwwroot\sun-passthrough\sec_db_files\
将资源文件复制到 sun-passthrough 目录。
copy <as_install_dir>/appserver/lib/webserver-plugin/iws/*.res c:\inetpub\wwwroot\sun-passthrough\resource\
将错误页面复制到 sun-passthrough 目录。
copy <as_install_dir>/appserver/lib/webserver-plugin/iws/errorpages/*.html c:\inetpub\wwwroot\sun-passthrough\errorpages\
将 loadbalancer.xml.example 模板复制到 sun-passthrough 目录。
copy <as_install_dir>/appserver/lib/install/templates/loadbalancer.xml.example c:\inetpub\wwwroot\sun-passthrough\
编辑 sun-passthrough.properties 文件。
##BEGIN EE LB Plugin Parameters log-file = C:\InetPub\wwwroot\sun-passthrough\lb.log ### The valid options for different logging levels are FATAL, SEVERE, WARNING, INFO and FINE. log-level = INFO lb-config-file = C:\InetPub\wwwroot\sun-passthrough\loadbalancer.xml ##END EE LB Plugin Parameters
如果正在配置 IIS6,请确保按照 AS82 文档所述设置权限并执行附加步骤。 可能还需将 IIS6 隔离模式设置为 IIS5 兼容。
在 Windows 平台上,在 Application Server Enterprise Edition 安装完成后,紧接着会发生 Message Queue 代理启动失败。显示的错误消息表明目录 drive:\as\domains\domain1\imq 并不存在。
请注意,如果在启动 domain1 后启动该代理,则 Application Server 将创建该目录,因此不会出现上述问题。
在创建代理之前创建 var_home_dir_location:
$imqbrokerd -varhome var_home_dir_location |
例如:
$imqbrokerd -varhome D:\as\domains\domain1\imq |
要在 Sun Java System Application Server Enterprise Edition 8.2 上运行 J2EE 1.4 Tutorial,请执行以下任务:
按照“关于本教程”一章的“关于示例”一节中的描述编辑文件示例 /common/build.properties 时,还要将端口 4848 更改为 4849。
使用 Deploytool 时,在部署示例之前添加服务器 localhost:4849。
使用管理控制台创建资源时,使用“目标”选项卡将服务器指定为目标。如果使用命令行或 asant 目标,则该服务器为默认目标,且无需其他操作。
本节介绍已知的生命周期管理问题和相应的解决方法。
将 ejb-timer-service 属性 minimum-delivery-interval 设置为 9000 之后,如果尝试将 ejb-timer-service 属性 redelivery-interval-in-mills 设置为 7000,会导致 set 命令失败。将显示以下错误消息:
[echo] Doing admin task set [exec] [Attribute(id=redelivery-interval-internal-in-millis) : Redelivery- Interval (7,000) should be greater than or equal to Minimum-delivery- interval-in-millis (9,000)] [exec] CLI137 Command set failed.
minimum-delivery-interval 是传送相同周期计时器之间的最小时间间隔。
redelivery-interval-in-mills 是计时器服务在 ejbTimeout 失败后再次尝试传送之前等待的时间。
问题在于描述重新传送时间间隔属性与最小传送时间间隔属性之间关系的逻辑不正确,使您无法使用 GUI 或 CLI 来设置使最小传送时间间隔大于重新传送时间间隔的任何值。
必须始终将 minimum-delivery-interval-in-millis 设置为等于或大于 ejb-timer-service 属性 redelivery-interval-in-millis。Application Server 在确认 redelivery-interval-in-millis 的值是否大于 minimum-delivery-interval-in-millis 的值时使用了错误的验证检查,这是产生上述问题的原因。
使用这些属性的默认值,如下所示:
minimum-delivery-interval(default)=7000 redelivery-interval-in-millis(default)=5000
使用其他的值将导致产生错误。
本节介绍已知的日志记录问题和相应的解决方法。
为 JVM 设置 java.security.debug 选项会导致服务器实例的启动停止并死锁;例如,在 domain.xml 中进行以下设置将导致出现此问题:
<jvm-options\>-Djava.security.debug=access,failure</jvm-options\>
无。避免设置此标志。
与版本 7 及其兼容版本相比,Sun Java System 8.2 中的默认日志记录和服务器实例位置已更改。
有关更多信息,请参阅《Sun Java System Application Server Enterprise Edition 8.2 管理指南》或《Sun Java System Application Server Enterprise Edition 8.2 Upgrade and Migration Guide》。
本节介绍已知的 Java Message Queue 问题和相应的解决方法。
多种问题均可导致在与时间相关的情况下重新连接失败。
可以通过以下方法解决这些问题:
重新启动相关的代理
重新启动相关的 Application Server 实例
由于最近的更改,当异步消息侦听器是 app-client 容器中唯一的活动线程时,其余 appclient 虚拟机将作为守护进程存在。对于以前在 ACC 中执行异步接收的应用程序,此行为是一种退化。此问题将影响设置 JMS 消息侦听器并退出主线程的应用程序客户机。
不退出主线程。等待消息侦听器通知主线程,然后再终止主线程。
本节介绍已知的监视问题和相应的解决方法。
在 Application Server Beta 版中,默认情况下不支持监视框架。
解决方法
要为 Application Server 集成监视框架,请执行以下步骤:
编辑 <Install_dir>\appserver\lib\install\templates\ee\com.sun.cmm.as.xml 文件。
将 ${InstalledLocation} 更新为 Application Server 安装位置,将 ${InstalledDate} 更新为当前日期。
将 <Install_dir>\appserver\lib\install\templates\ee\com.sun.cmm.as.xml 文件复制到 <Install_dir>\appserver\lib。
执行 <MFWK_Install_location>\bin\mfwksetup.bat -r <Install_dir>\appserver\lib\com.sun.cmm.as.xml 命令。
${InstalledLocation} 值为 Application Server 安装位置,即 c:\Sun\JavaES5\appserver。对于 $InstalledDate,需要将时间设置为毫秒数,即从 1970 年算起到当前时间的毫秒数。
本节介绍与 Application Server 8.2 产品附带的样例代码相关的已知问题和相应的解决方法。
在 Windows 平台上,mqfailover 命令要求按 Ctrl+C 组合键才能退出挂起进程。必须重新运行 setup-one-machine-cluster 进程。
从 install_dir\samples\ee-samples\failover\apps\mqfailover\docs\index.html 运行以下命令:
控制台 1
cd install_dir\samples\ee-samples asant start-mq-master-broker1 |
控制台 2
cd install_dir\samples\ee-samples asant start-mq-cluster-broker1 |
控制台 3
cd install_dir\samples\ee-samples asant start-mq-cluster-broker2 |
控制台 4
cd install_dir\samples\ee-samples asadmin start-domain domain1 |
如果已对任何其他 Enterprise Edition 样例执行 asant setup-one-machine-cluster-without-ha 或 asant setup-one-machine-cluster-with-ha,请执行 asant configure-mq。否则,请执行 asant setup-one-machine-cluster-and-configure-mq。在这种情况下,命令显示为成功:
start_nodeagent: [echo] Start the node agent cluster1-nodeagent [exec] Command start-node-agent executed successfully. |
但随后系统将无限期挂起。
无。此问题同样会影响在 Windows 上使用此 ant 目标的所有 Enterprise Edition 样例。一个解决方法是按 Ctrl+C 组合键退出挂起的进程,然后重新运行它。
完成 asadmin 部署指令并运行 Message Queue 故障转移样例应用程序后,显示以下错误消息:
/opt/SUNWappserver/domains/domain1/config/sun-acc.xml -name MQFailoverTestClient -textauth -user j2ee -password j2ee Nov 18, 2004 10:50:17 PM com.sun.enterprise.naming.NamingManagerImpl bindObjects SEVERE: NAM0006: JMS Destination object not found: jms/durable/TopicA Nov 18, 2004 10:50:18 PM com.sun.enterprise.naming.NamingManagerImpl bindObjects SEVERE: javax.naming.NameNotFoundException javax.naming.NameNotFoundException |
文档并没有明确说明在使用 asadmin deploy 命令执行手动部署情况下必须手动创建 JMS 资源。文档也没有提到应使用所提供的 ant 目标来部署样例应用程序。
将 asant deploy 目标用于 build.xml 脚本,该脚本用于创建运行应用程序所需的 JMS 资源。
本节介绍与 Application Server 及 Web 应用程序安全性和证书相关的已知问题和相应的解决方法。
WebServiceSecurity 应用程序无法与 J2SE 5.0 共同运行,原因如下:
J2SE 5.0 PKCS11 不支持 UNWRAP 模式
J2SE 5.0 PKCS11 不支持使用 PKCS11 的 RSA/ECB/OAEPWithSHA1AndMGF1Padding
使用带有任何其他 JCE 提供者(而不是默认包含的提供者)的 J2SE 1.4.2。请注意,此配置中将不提供对硬件加速器的支持。
如果为 SSL 终止配置了负载平衡器(硬件),则 Application Server 会在重定向过程中将协议从 https 更改为 http。
在硬件负载平衡器与 Application Server 之间添加软件负载平衡器。
本节介绍已知的升级实用程序问题和相应的解决方法。
对于此错误,存在两个方面:
运行使用 Derby 数据库的样例应用程序安装脚本时,Derby 数据库在它的当前目录中或在 <install_root>/bin 中创建。
样例 build Ant 脚本在当前目录下创建存储管理员密码文件的 password.txt 文件,在非超级用户以及稀疏区域的情况下,此目录不可写入。
Derby 数据库位置-使用 --dbhome 选项和 start-database 命令在为 --dbhome 指定的值处创建数据库。例如,以下是 start-database 的 asadmin 命令语法。
start-database [--dbhost 0.0.0.0] [--dbport 1527] [--dbhome db_directory] [--echo=false] [--verbose=false] |
password.txt 文件的位置-由于所有构建命令均会在样例目录中创建 password.txt 文件,因此根据设计,此目录应是可写入的。请确保在可写入的位置安装样例的工作副本。
Application Server Enterprise Edition 8.2 安装不允许管理员用户名中使用特殊字符。如果使用了任何特殊字符,域创建会失败。但是,请注意,管理员密码可以包含特殊字符。
从 Application Server 7 升级到 Application Server 8.2 时,请验证管理员用户名是否不包含任何特殊字符。
本节介绍已知的 Web 容器问题和相应的解决办法。
Sun Java ES 5 Application Server 不支持将 Apache 和 IIS(非 Sun Web 容器)用作负载平衡器插件。Sun Java ES 安装了 Sun Java System Web Server 作为负载平衡器插件配置。
在 Windows 平台上,如果您在部署应用程序时要求预编译 JSP,则以后尝试取消部署该应用程序或重新部署该应用程序(或任何具有相同模块 ID 的应用程序)的操作将不会按预期进行。JSP 预编译会打开应用程序中的 JAR 文件,但不能关闭这些文件,Windows 将禁止执行取消部署或重新部署操作以避免删除或覆盖它们。
请注意,取消部署在某种程度上是成功的,因为应用程序会从 Application Server 中被逻辑删除。另外请注意,asadmin 实用程序不会返回任何错误消息,但应用程序的目录以及锁定的 jar 文件会保留在服务器中。服务器的日志文件将包含用于说明未能删除文件和应用程序的目录的消息。
在取消部署后尝试重新部署应用程序的操作会失败,这是由于服务器尝试删除现有文件和目录,而这些尝试也失败了。如果您尝试部署的应用程序所使用的模块 ID 与最初部署的应用程序的模块 ID 相同,会出现这种情况,这是由于服务器在选择目录名来保存应用程序的文件时会使用模块 ID。
如果没有先取消部署应用程序而尝试重新部署该应用程序,也将会由于同样的原因而失败。
诊断
如果尝试重新部署应用程序或在取消部署后部署它,asadmin 实用程序将返回一个类似如下的错误。
An exception occurred while running the command. The exception message is: CLI171 Command deploy failed : Deploying application in domain failed; Cannot deploy. Module directory is locked and can't be deleted. |
如果在部署应用程序时指定 --precompilejsps=false(默认设置),则不会出现此问题。请注意,第一次使用应用程序时会触发 JSP 编译,因此第一个请求的响应时间会长于随后的请求的响应时间。
另外,请注意,如果您确实进行了预编译,则在取消部署或重新部署应用程序之前,应先停止并重新启动服务器。关闭服务器后将释放锁定的 JAR 文件,这样在重新启动服务器后,取消部署或重新部署便可以成功。
web.xml 文件中的可选 load-on-startup servlet 元素表示相关的 servlet 将在启动对其进行声明的 Web 应用程序期间被加载和初始化。
此元素的可选内容是一个整数,用于表示该 servlet 相对于 Web 应用程序的其他 servlet 而被装入和初始化的顺序。只要该 servlet 在包含它的 Web 应用程序启动期间被加载和初始化,空的 <load-on-startup> 元素就表示顺序无关紧要。
web.xml 的 Servlet 2.4 模式不再支持空的 <load-on-startup>,这意味着在使用基于 Servlet 2.4 的 web.xml 文件时,必须指定一个整数。如果像在 <load-on-startup/> 中那样指定空 <load-on-startup>,则 web.xml 文件会无法通过依照 Servlet 2.4 模式对其进行的验证,从而导致 Web 应用程序的部署失败。
向下兼容性问题。指定空的 <load-on-startup> 在基于 Servlet 2.3 的 web.xml 中仍起作用。
在使用基于 Servlet 2.4 的 web.xml 时,指定 <load-on-startup>0</load-on-startup>,以表明 servlet 的装入顺序无关紧要。
已访问 JSP 页面但是无法对其进行编译,并且服务器日志包含错误消息“无法执行命令”和以下堆栈跟踪:
at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher. exec(Execute.java:655) at org.apache.tools.ant.taskdefs.Execute. launch(Execute.java:416) at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:427) at org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter. executeExternalCompile(DefaultCompilerAdapter.java:448) at org.apache.tools.ant.taskdefs.compilers.JavacExternal.execute (JavacExternal.java:81) at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:842) at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:682) at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:396) |
将 JSP 编译开关 "fork" 设置为 "false"。
可以使用以下两种方式之一激活此设置:
在全局范围内,通过将 ${S1AS_HOME}/domains/domain1/config/default-web.xml 中 JspServlet 的 fork 初始化参数设置为 false:
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> .... <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> .... </servlet> |
在每个 Web 应用程序基础上,通过将 sun-web.xml 中的 fork JSP 配置属性设置为 false:
<sun-web-app> <jsp-config> <property name="fork" value="false" /> </jsp-config> </sun-web-app> |
以上任何一种设置都将阻止 Ant 生成用于 javac 编译的新进程。
Sun Java System Application Server Enterprise Edition 8.2 添加了对 Sun Java System Application Server Enterprise Edition 7.1 附带的 auth-passthrough 插件函数所提供功能的支持。但是,在 Application Server Enterprise Edition 8.2 中,auth-passthrough 插件功能的配置有所不同。
Application Server Enterprise Edition 7.1 中的 auth-passthrough 插件功能已经在两层部署方案中带来很大帮助,并附带如下约束条件:
Application Server 实例受公司防火墙之后的第二层防火墙的保护。
不允许客户机直接连接到 Application Server 实例。
在这种网络体系架构中,客户机连接到前端 Web 服务器,而该 Web 服务器配置有 service-passthrough 插件功能,会将 HTTP 请求转发到代理的 Application Server 实例以供处理。Application Server 只能从 Web 服务器代理接收请求,而决不会从任何客户机主机接收请求。因此,当部署在代理的 Application Server 实例上的任何应用程序查询客户机信息时,该应用程序将收到代理主机的信息(例如,当该应用程序查询客户机 IP 地址时,会收到代理主机的 IP),这是因为代理主机才是中继请求的真正发出主机。
在 Application Server Enterprise Edition 7.1 中,auth-passthrough 插件功能可在代理的 Application Server 实例上配置,以便使远程客户机信息能够直接提供给该实例上部署的任何应用程序,就像代理的 Application Server 实例直接接收了请求,而不是通过运行 service-passthrough 插件的中间 Web 服务器接收请求。
在 Application Server Enterprise Edition 8.2 中,可以通过将 domain.xml 中 <http-service> 元素的 authPassthroughEnabled 属性设置为 TRUE 来启用 auth-passthrough 功能,如下所示:
<property name="authPassthroughEnabled" value="true"/> |
Application Server Enterprise Edition 7.1 中 auth-passthrough 插件功能的安全注意事项也同样适用于 Application Server Enterprise Edition 8.2 中的 authPassthroughEnabled 属性。这是由于 authPassthroughEnabled 可以启用信息重写,而信息重写可用于验证目的(例如发起请求的 IP 地址或 SSL 客户机证书)。因此,只应允许可信赖客户机或服务器连接到 Application Server Enterprise Edition 8.2 实例(通过将 authPassthroughEnabled 设置为 TRUE)。为防万一,应该只将企业防火墙后的服务器的 authPassthroughEnabled 设置为 TRUE。而不要将可通过 Internet 访问的服务器的 authPassthroughEnabled 设置为 TRUE。
请注意,当代理 Web 服务器已配置了 service-passthrough 插件并且将请求转发到将 authPassthroughEnabled 设置为 TRUE 的 Application Server 8.1 Update 2 实例时,Web 服务器代理上可能启用了 SSL 客户机验证,而在代理的 Application Server 8.1 Update 2 实例上却禁用了该验证。在这种情况下,代理的 Application Server 8.1 Update 2 仍会将请求当作通过了 SSL 验证,并向部署在其上的发出请求的所有应用程序提供客户机 SSL 证书。
使用 --enabled=false 标志创建 httplistener 时,侦听器无法禁用。创建侦听器时使用标志 --enabled 不起任何作用。
在启用状态下创建侦听器,之后再手动禁用它。