2010-09-29 56 views
2

在此处有一个奇怪的Glassfish问题。以下是如何重现它:如何在脚本内更改Glassfish上的管理端口

(1)安装GlassFish v3的
(2)启动默认域:

$GLASSFISH_HOME/bin/asadmin start-domain domain1 

(3)变更管理端口(您需要输入管理员UID &密码,在我们的脚本中,我们使用-u & -W参数):

$GLASSFISH_HOME/bin/asadmin set configs.config.server-config.network-config.network-listeners.network-listener.admin-listener.port=34848 

(4)关闭域:

$GLASSFISH_HOME/bin/asadmin stop-domain domain1 

你会看到这是行不通的。你得到:

CLI306 Warning - server is not running. 
Command stop-domain executed successfully. 

但是你的Glassfish进程仍在运行。更糟糕的是,当您尝试启动该过程时,您会收到警告,表明您的一些端口已被使用。当然,他们是,旧的过程仍然有他们的!你唯一的出路就是killall -9 java

虽然一些配置的变化是动态的,看来这个人是不是,但域停止假定它动态,并使用新的端口,试图执行命令。

可能的解决方案是:

(1)使用seddomain.xml - 宁愿不要,因为它很复杂&风险grepping通过XML的代码。我已经看到Glassfish在这个文件中改变了属性的顺序,所以我们不能只用于port="4848"
(2)使用脚本安装程序而不是zip文件并将参数作为答案文件提供给安装程序 - 对我们的安装脚本来说是有问题的,这些脚本必须是同等强大的。
(3)使用已经更改了domain.xml的GlassFish安装存档的自定义制作zip文件 - 这不是一个选项,因为我们设置的端口可能会在将来发生变化。

这几乎是角落案件的定义,但我们需要解决。现在我们要sed domain.xml,但很高兴知道是否有通过CLI可行的方式。

回答

1

你可能想要做,而不是下面...

  1. 通过解压
  2. 删除域1
  3. 创建使用您喜欢的端口的新DOMAIN1安装V3。 man page for the create-domain subcommand将有所有的细节
  4. 开始这个新的领域...

无需额外的启动或停止必需的(你可以跳过步骤2,如果你愿意要记得说“的asadmin启动域MYDOMAIN”而不是“的asadmin启动域”

+0

咄...谢谢-您! – 2010-10-01 12:46:34

0

桑达不是那么糟糕,因为我想这可能是,这里就是我所做的:

cd $GLASSFISH_HOME 
sed -i.bak '/<network-listener[^>]*name="admin-listener"/s/port="4848"/port="34848"/g' glassfish/domains/domain1/config/domain.xml 

它仍然是asadmin的认为该端口的变化是动态的,当它不是,但我能活一个bug与此黑客。