修改was强制使用IPv4监听协议

今天在一台新Linux上安装websphere 7.0,管理控制台无法正常启动。 检查网络状态

netstat -ntl  
tcp6       0      0 :::9060                 :::*                    LISTEN  

发现was监听在IPv6上,而不是通常的IPv4。初步怀疑由于操作系统开启了IPv6,导致java默认监听在IPv6上。google一下很快找到两篇文章:

Networking IPv6 User Guide for JDK/JRE 5.0 http://docs.oracle.com/javase/6/docs/technotes/guides/net/ipv6_guide/index.html#ipv6-networking

Networking Properties http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html

看来只要设置 -Djava.net.preferIPv4Stack=true 参数即可。

但这时遇到了困难,不知道什么原因,设置setupCmdLine.sh竟然无效,各种find + grep以及google无果。最后用了终极大法,删除 /opt/IBM/WebSphere/AppServer/java/bin/java 文件,新建了一个名为java的shell

#!/bin/sh  
exec /opt/IBM/WebSphere/AppServer/java/jre/bin/java -Djava.net.preferIPv4Stack=true $@  

问题终于解决,很奇怪was为何不提供个类似tomcat JAVA_OPTS的环境变量,真是太折腾人了。另外就算只监听IPv6应该也没什么问题的,不知道was有什么bug导致 dmgr 无法启动。

后记:真是孤陋寡闻,其实java有个环境变量可以设置该特性的

_JAVA_OPTIONS=-Djava.net.preferIPv4Stack=true