JBoss IPv6网络环境下,实现对IPv6的支持主要包括一下几个要求:
1. Linux系统支持IPv6;
2. Java虚拟机支持IPv6;
3. JBoss应用服务器支持IPv6;
解决以上3部分的要求就能保证应用程序对IPv6的支持。
目前第一个问题已经解决,Linux系统内核已能保证对IPv6的支持。
对于第二个问题,考虑到JDK1.5版本在Linux环境下,对IPv6的支持存在一个严重bug(具体可以搜索jdk IPv6 bug),所以JDK的版本必须满足1.6+。这种情况下可以实现java虚拟机对IPv6的支持。
对于第三个问题,由于JBoss4.2.2GA的目标(target)JDK版本为1.5.,而根据之前所述的JDK1.5与IPv6的bug,JBoss无法完全支持IPv6,若通过JDK1.6启动JBoss,将导致很多模块启动异常不能正常工作。目前JBoss5.0.0.Beta4的开发已经结束,但是JBoss5.0.0对整个JBoss的核心改动较大,虽然在某种程度上说JBoss5.0.0可以支持IPv6,但这并不完全,且JBoss5.0.0并没正式发布,存在较多bug。鉴于此无法完全实现JBoss IPv6的支持。
虽然无法提供完全的JBoss IPv6支持,但是运行之上的纯网络程序还是可以实现IPv6的(除了Web容器中的JSP和servlet,JMS JNDI等还是使用IPv4)。所以解决的方法是将JDK升级为1.6,并启动JBoss4.2.2GA。由于之前所述中通过JDK1.6启动时会出现JBoss的模块启动异常,所以需要解决JDK1.6和JBoss4.2.2GA的兼容问题。
主要兼容问题包括:
1. jaxb-api.jar 与JDK1.6中默认自带的java.xml.binding包出现版本冲突。
2. saaj-api.jar 与JDK1.6中默认自带的java.xml.soap包出现版本冲突。
3. saaj-api.jar本身与JBoss自带的JBoss-saaj.jar存在冲突。
解决以上问题的方法如下:
1. 将程序依赖的jaxb-api.jar包放到JBoss目录下lib\endorsed\包中,覆盖掉JDK1.6中默认自带的java.xml.binding。
2. 第二个问题与第三个问题实际上是同一个问题,解决方法是,裁剪JDK1.6,具体步骤是,将jdk目录下jdk\jre\lib\下的rt.jar包中的java.xml.soap包删掉。然后在JBoss安装目录下的bin文件夹中,修改run.conf文件,设定JAVA_HOME变量指向裁剪的JDK。如:
- JAVA_HOME="/home/wangwei/jboss-4.2.2.GA-IPv6Test/jdk1.6.0_06"
【编辑推荐】