问题情境:现在有一套tomcat7下正常运行的工程,本地jdk版本是jdk1.7。现在要把这个套工程转换为weblogic工程运行在Weblogic11g上。需要注意的事项有:
==============================
1.不要依赖容器特有类库
现象:interface接口中使用了org.apache.catalina.tribes.util.Arrays.equals(byte[],byte[]) API,导致在weblogic中运行时报错。抛出异常,异常信息为:null.
原因:catalina为apache tomcat项目名,即包org.apache.catalina下的API都为tomcat环境下的类库,weblogic lib下不含有此类库,导致出现异常。
方案:项目编译时不要依赖web容器中的类库,以便于项目可以跨web容器
2.在WEB-INF下增加weblogic.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic--web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-810-web-jar.dtd">
<weblogic-web-app>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
原因:上述xml文件可以使得WebLogic优先加载项目web-inf下的jar包,防止WebLogic加载自身的jar包导致版本冲突。
3./WEB-INF/lib需要删除xml-apis-1.0.b2.jar
现象:出现
weblogic.xml.jaxp.RegistrySAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory
错误
原因:weblogic使用jdk自带的javax.xml.parsers.SAXParserFactory接口来解析配置,项目中的xml-apis-x.jar中也有这个接口,根据上述的weblogic.xml中的配置,首选加载xml-apis-x中的接口,由于加载两者的classLoader不同,所以无法转换。
4.在web.xml中将servlet版本改为2.5
原因:weblogic 11g不支持servlet3.0及以上的版本。只兼容servlet及以下版本。
5.把项目部署到weblogic服务器的时候提示:The server does not support version 3.0 of the J2EE Web module specification
原因:weblogic11g最多支持Servlet 2.5,而现在要import的项目是3.0版本的。
解决方法:
在项目根目录下有一个.settings的文件夹,该文件夹下有一个org.eclipse.wst.common.project.facet.core.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<fixed facet="java"/>
<fixed facet="jst.web"/>
<fixed facet="wst.jsdt.web"/>
<installed facet="java" version="1.6"/>
<installed facet="jst.web" version="3.0"/>
<installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
把
<installed facet="jst.web" version="3.0"/>
改为
<installed facet="jst.web" version="2.5"/>
即可
6.weblogic启动报:weblogic.application.ModuleException:Failed to load webapp
问题解决:
工程启动在weblogic后台打出这样的LOG:weblogic.application.ModuleException:Failed to load webapp 你部署的web项目
找了很久问题没找出来,最后发现原因是,在删除废旧代码的时候,把servlet删掉了,但是web.xml里面仍然有servlet “Axis2”的描述,导致这个描述找不到,装载失败,遇到这种没有log的情况,有可能是web.xml有问题。