今天在一台新Linux上安装websphere 7.0,管理控制台无法正常启动。
发现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=ture 参数即可。
但这时遇到了困难,不知道什么原因,设置setupCmdLine.sh竟然无效,各种find + grep以及google无果。最后用了终极大法,删除 /opt/IBM/WebSphere/AppServer/java/bin/java 文件,新建了一个名为java的shell
问题终于解决,很奇怪was为何不提供个类似tomcat JAVA_OPTS的环境变量,真是太折腾人了。另外就算只监听IPv6应该也没什么问题的,不知道was有什么bug导致 dmgr 无法启动。
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=ture 参数即可。
但这时遇到了困难,不知道什么原因,设置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 无法启动。