Weblogic 10.3.5覆盖Spring版本

时间:2012-07-13 19:11:17

标签: spring weblogic

我正在使用Oracle的OEPE发行版开发Web应用程序,包括Weblogic服务器10.3.5。 WLS包含自己的Spring版本,似乎是2.5.6.SEC01。但是,我们正在尝试使用特定于3.1版本的Spring和Spring Security功能。

Maven POM将Spring Version定义为3.1.1.RELEASE属性(将该属性插入到各个部分,即:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>

我在weblogic.xml中尝试了两种不同的方法来排除内置的Spring(一个在下面注释掉,但请放心,我已经尝试了两种方法):

<wls:container-descriptor>
    <wls:prefer-application-packages>
        <wls:package-name>com.oracle.ojdbc16.*</wls:package-name>
        <wls:package-name>antlr.*</wls:package-name>
        <wls:package-name>javax.persistence.*</wls:package-name>
        <wls:package-name>org.apache.commons.*</wls:package-name>
        <wls:package-name>org.springframework.*</wls:package-name>
        <wls:package-name>org.hibernate.*</wls:package-name>
        <wls:package-name>org.apache.xerces.*</wls:package-name>
    </wls:prefer-application-packages>
    <!-- <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> -->
</wls:container-descriptor>

使用我自己的Spring版本,我需要做什么?

3 个答案:

答案 0 :(得分:6)

我遇到了同样的问题。解决方案是将weblogic-application.xml创建到EAR项目的META-INF文件夹中。这是代码。

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application>
    <prefer-application-packages>
        <package-name>org.apache.*</package-name>
        <package-name>org.springframework.*</package-name>
    </prefer-application-packages>
</weblogic-application>

也许你的问题是你将weblogic.xml用于WAR项目而不是weblogic-application.xml进入EAR项目。

希望它有所帮助。

答案 1 :(得分:4)

OPTION1:将Spring 3.x应用程序部署到未安装JRF的域中的wls服务器。这对我有用。

OPTION2:在weblogic.xml中使用prefer-web-inf-classes并将其部署为战争。这适用于wls 10.3.6,JRF域,Spring 3.2.2。我无法让prefer-application-packages工作,但是更喜欢web-inf-classes。

注意:对于安装了JRF的域,我已经尝试了war / weblogic.xml / prefer-application-packages和ear / weblogic-application.xml / prefer-application-packages方法,但似乎都没有效果。我有一个输出org.springframework.core.SpringVersion.getVersion()的测试jsp,尽管我付出了努力(这是捆绑在oracle_common / modules文件夹中的Spring版本),它仍然存在于报告2.5.6.SEC01中。

在非JRF域中部署相同的应用程序,org.springframework.core.SpringVersion.getVersion()将报告您与应用程序捆绑的任何版本的spring。

答案 2 :(得分:1)

如果您使用的是Spring Framework,那么即使是在Spring Integration项目中,您也很可能将Spring bean部署在 WAR 而不是EAR中。 在没有任何特定配置的情况下,最多12c(包括12.2.1),您最多只能停留在Spring framework 3.0.5和Spring Integration 2.2.6上。任何使用更高Spring版本的尝试都可能在部署时产生:

weblogic.application.ModuleException: java.lang.NoSuchMethodError: org.springframework.core.MethodParameter.getNestedParameterType()Ljava/lang/Class;

因为类加载器选择了Oracle-JRF嵌入式Spring Framework。

在多服务器域中,不将JRF部署到给定服务器实例将无法解决问题,但是没有JRF的整个域都可以解决问题。

相反,技巧是在 WEB-INF / weblogic.xml 部署描述符中使用prefer-web-inf-classes参数,如下所示:

<?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/web-app_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.8/weblogic-web-app.xsd">
    <wls:container-descriptor>
        <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
    </wls:container-descriptor>
</wls:weblogic-web-app>

您可以在具有JRF工具的WebLogic域中享受Spring Framework 4.2带来的好处。 当然,不要忘记将Spring核心4.2和相关的依赖项包含到WAR文件程序集中(即检查构建的.war以包含WEB-INF / lib / spring * .jar)。