CXF项目部署weblogic9.2终极解决方案

文章为本人部署项目时的遇到的问题及解决办法。
为了兼容性的问题,搞了有一个月,幸好最终解决了。

第一中方案我也提到过就是让webapp 的lib优先加载,这种方式我就不说了,如果jar包很多我
不建议用此方式,因为解决jar冲突是头痛而又繁琐的事

那么我采用第二种方案即不让lib优先加载。
使用这种方案的时候遇到了一个棘手问题,cxf的客户端不能使用。其他的访问方式好用,只有
  JaxWsDynamicClientFactory 出现下面这个错误。
[error] IOException during exec() of compiler "javac". Check your path environment variable
javax.xml.bind.JAXBException: "" doesnt contain ObjectFactory.class or index
   起初只关注了后面的错误,以为jar冲突,结果劳心费神也没发现哪错了。后来才注意到前面的异常,这才是关键啊,网上搜了一大圈,这个问题提得人不少可是没有一个人解决。当然异常的信息是不准确的,javac的环境是有的。没办法只能跟源码,可是代码页太多了,实在跟不下去。仔细看了一下错误,应该是路径的问题,因为客户端使用 JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();所以想问题还是在JaxWsDynamicClientFactory,发现了setupclasspath这个方法,于是设了断点,最后定为到错误,代码为compiler.java中 internalCompile方法 p = Runtime.getRuntime().exec(cmdArray);出错可是心想为什么在tomcat下好用呢。将cmdArray的内容考了出来,坑爹啊,怎么这么长。既然是这出现问题那么就拷出来自己在cmd运行一下,果然出错,怎么回事,原来是命令太长,bat脚本执行的长度是有限的。不能算cxf的bug,但是起码apache没考虑到啊,好了问题找到了就容易了。
在这里发发牢骚,因为这个问题折磨坏我了~~

以下是我所有遇到weblogic问题的解决方案,基本囊括了所有的错误,指定会对大家有所帮助的:
1、 新增配置文件weblogicManagement.properties 分别配置了,weblogic的server、common以及weblogic 拷贝项目包所在的目录,一定是绝对路径。注意不要用\而用/。
2、 自定义CXFServiceServlet.java类作为servlet。
3、 需要在在web.xml中配置CXFServiceServlet的初始化参数,
<init-param>
<param-name>webloicProperties</param-name>
<param-value>*/weblogicManagement.properties</param-value>
</init-param>
<init-param>
<param-name>isWeblogic</param-name>
<param-value>true</param-value>
</init-param>
其中webloicProperties的参数值为weblogicManagement.properties绝对路径,
4、 需要将项目中wstx-asl-3.2.9.jar包考到weblogic/server/lib目录下
5、 Sunjdk需要将geronimo-ws-metadata_2.0_spec-1.1.2.jar,jaxb-api-2.1.jar,geronimo-jaxws_2.1_spec-1.0.jar包考到jre/lib/endorsed下
6、 如果jrockit jdk 则在第五步的基础上还要增加neethi-2.0.4.jar
7、 如果数据源是db2或者sqlserver 需要将antrl.jar和javax.persistence.jar加入jre/lib/endorsed下
8、 在jrockit jdk下,发布的CXF webservice都要在方法前加入注解
@webMethod(operationName=”方法名”)
9、 在配置自定义数据源时需要在内容中注明属性值需要加上属性:user="内容"、url=“内容”
10、部署连接池用如下方式,<bean id="defaultDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
          <property name="jndiName">
          <value>java:comp/env/TBSystemDataSource</value>
          </property>
</bean>
用此方式部署
11、 不同的环境下要对 nativeJdbcExtractor做不同的修改,weblogic如下
org.springframework.jdbc.support.nativejdbc.WebLogicNativeJdbcExtractor"

12、修改cxf的源码compiler.java,重新编译一下,在考回到jar包中。

附件是我修改的文件,如果还有什么问题欢迎大家留言。我用的是cxf2.2.12版本

猜你喜欢

转载自wanghuanqiu.iteye.com/blog/1500183