在Weblogic9.x上部署Spring和acegi的应用

终于还是要部署到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)

你可能感兴趣的:(在Weblogic9.x上部署Spring和acegi的应用)