tomcat切换到weblogic注意事项
今天公司要求将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的问题了。
相当不错,感谢无私分享精神! 沒有激情的亲吻,哪來床上的翻滾? 支持一下:lol 我抢、我抢、我抢沙发~ 我妈常说,我们家要是没有电话就不会这么穷。 爱护环境,人人有病。
页:
[1]