Posted on 2006-09-08 11:01
Kerwin Weng 阅读(1235)
评论(0) 编辑 收藏 所属分类:
Java EE
终于还是要部署到Weblogic上的
经过一下午的调试,总结出要改两个地方
1:Spring的servlet装载顺序
Tomcat是标准的Servlet2.4规范的容器,能够很好的维持servlet加载的顺序,
但是Weblogic9.x不是,因此加载的时候需要换用Spring的另一个Servlet来保证加载的顺序正确
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springfromword.context.ContextLoclageServlet</servlet-class>
</servlet>
2.Acegi的filter也需要改变装载的类:
<filter>
<filter-name>acegifilter</filter-name>
<filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<!--<param-value>net.sf.acegisecurity.util.FilterChainProxy</param-value>-->
<param-value>net.sf.acegisecurity.context.HttpSessionContextIntegrationFilter</param-value>
</init-param>
</filter>
3.更换两个包antlr和cglib
Spring要求antlr 2.7.5 的支持,但是Weblogic9的Weblogic.jar中集成的版本不够高,所以启动会报错
修改启动weblogic启动的环境变量,将这个包加在weblogic.jar包之前(注意一定要加在前面)。
weblogic 8中修改:bea\weblogic81\common\bin\commEnv.cmd(.sh)这个文件。
weblogic 9中修改:bea\weblogic90\common\bin\commEnv.cmd(.sh)这个文件,
修改后大体如下所示:
set WEBLOGIC_CLASSPATH=%PATCH_CLASSPATH%;%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\antlr-2.7.5.jar;%WL_HOME%\server\lib\weblogic_sp.jar;%WL_HOME%\server\lib\weblogic.jar
就可以解决在weblogic server 上部署spring应用程序的问题了。
如果在加载中还碰到java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)这个问题出现,则必须将cglib-nodep-2.1_2.jar也加到classpath中weblogic.jar之前。
或者对于weblogic server 9在weblogic.xml中使用
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
优先使用web-inf中使用的class而不是用先使用weblogic.jar包中的ClassVisitor这个类。(针对weblogic server 9)