tomcat切换到weblogic注意事项

来源:互联网 发布:it培训课程 编辑:程序博客网 时间:2024/05/20 14:25

今天公司要求将tomcat服务器切换到weblogic,折腾了一天,发现了一些必须注意的地方。

1、classes里面文件读取问题:

在tomcat里面,WAR包是被完全解压到webapps下面的,包括WEB-INF/classes下面的所有文件都被解压出来,意即可以通过绝对路径D:/tomcat/webapps/asd/WEB-INF/classes/config.xml来进行访问,但是再weblogic里面就不一样了。

在weblogic里面,如果是WAR包的方式部署,那么服务器同样会将内容解压到一个临时目录(/home/weblogic/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_user/wcity/v2s20e/war/),但是我们进去后会发现WEB-INF/classes里面空空如也,所以这个时候我们还想通过绝对路径来访问classes下面的文件的话就不可能了。

那么这里面的东西跑哪了呢?weblogic会将这类的东西打包成一个jar包,放在WEB-INF/lib/_wl_cls_gen.jar下面,所以我们要想再访问classes里面的文件,就必须采用读取jar包的方式来完成了。

举个例子,我在classes下面有一个config.xml文件,在tomcat下面,就可以通过绝对路径来访问:

FileReader fr = new FileReader(Config.class.getResource("/").getPath() + "config.xml");
在weblogic下面就只能这样访问:

InputStream in = Config.class.getResourceAsStream("/config.xml"); 

2、struts2多配置文件无法加载问题:

由于有多个struts文件,所以在主配文件里面进行了如下引入

<include file="struts/struts-*.xml" />

在tomcat里面正常,但是再weblogic里面就会报异常:unable to attain an URLClassLoader,Error loading configuration file struts.xml等,因为weblogic不支持通配符引入文件,所以在这里老老实实的奖引入文件都写入就行了

<include file="struts/struts-client.xml" /><include file="struts/struts-public.xml" />

3、hibernate异常问题ClassNotFoundException: org.hibernate.hql.ast.HqlToken:

weblogic和hibernate的antlr之冲突已经司空见惯了,该类问题网上已有很多解决办法,在此不重复了。

4、slf4j和log4j适配问题:

我的应用中使用了slf4j和log4j,并且也使用了slf4j-log4j12-1.6.1.jar进行适配,在tomcat下正常,在weblogic下面就只能打印log4j的日志,由此看来应该是weblogic的问题,网上查了下,得知由于weblogic是个企业级产品,所以集成了很多的jar包,这些jar包的默认加载顺序是大于应用里面lib中的jar包顺序的,此原因也直接导致了刚才说的hibernate的问题,所以现在需要解决的就是优先加载WEB-INF/lib下面的jar问题了。

在项目的WEB-INF目录下新建weblogic.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>  <wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">      <!-- 为了解决slf4j和log4j的兼容问题,不然slf4j打印的日志就不出来了 -->    <wls:container-descriptor>          <wls:prefer-application-packages>              <wls:package-name>org.slf4j</wls:package-name>          </wls:prefer-application-packages>      </wls:container-descriptor>      <wls:container-descriptor>    <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes></wls:container-descriptor></wls:weblogic-web-app> 

这样即解决了优先加载jar包以及slf4j的问题了。


4、java.lang.ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration

删除weblogic自带的xerces相关jar包,使用项目自身的即可。

/home/weblogic/modules/com.bea.core.apache.xerces.resolver_2.8.2.jar
/home/weblogic/modules/org.apache.ant_1.7.1/lib/xercesImpl.jar
/home/weblogic/modules/com.bea.core.apache.xerces.xml-apis_2.8.2.jar
/home/weblogic/modules/com.bea.core.apache.xercesImpl_2.8.2.jar

原创粉丝点击