Weblogic 10.3.5覆盖Spring版本
我正在使用Oracle的OEPE发行版开发一个web应用程序,包括Weblogic server 10.3.5。WLS包括它自己的Spring版本,看起来是2.5.6.SEC01。但是,我们正在尝试使用Spring和3.1版本特有的Spring安全特性 Maven POM将Spring版本定义为3.1.1.RELEASE的属性(该属性插入到章节中,即:Weblogic 10.3.5覆盖Spring版本,spring,weblogic,Spring,Weblogic,我正在使用Oracle的OEPE发行版开发一个web应用程序,包括Weblogic server 10.3.5。WLS包括它自己的Spring版本,看起来是2.5.6.SEC01。但是,我们正在尝试使用Spring和3.1版本特有的Spring安全特性 Maven POM将Spring版本定义为3.1.1.RELEASE的属性(该属性插入到章节中,即: <dependency> <groupId>org.springframework</groupId>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
org.springframework
弹簧芯
${spring.version}
我在weblogic.xml中尝试了两种不同的方法来排除内置的Spring(下面有一种方法被注释掉了,但请放心,我已经尝试了这两种方法):
com.oracle.ojdbc16*
antlr*
javax.persistence*
org.apache.commons*
org.springframework*
org.hibernate*
org.apache.xerces*
要使用我自己版本的Spring,我到底需要做些什么?我也遇到了同样的问题。解决方案是将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>
org.apache*
org.springframework*
可能您的问题是,您在WAR项目中使用了weblogic.xml,而不是在EAR项目中使用weblogic-application.xml
希望有帮助。选项1:将Spring 3.x应用程序部署到未安装JRF的域中的wls服务器上。这对我很有用 选项2:在weblogic.xml中使用首选web inf类,并作为war部署。这在wls 10.3.6、JRF domain、Spring 3.2.2中对我有效。我无法让首选应用程序包正常工作,但首选web inf类 注意:对于一个安装了JRF的域,我尝试了war/weblogic.xml/preference-application-packages和ear/weblogic-application.xml/preference-application-packages两种方法,但两种方法都没有效果。我有一个输出org.springframework.core.SpringVersion.getVersion()的测试jsp尽管我付出了努力,它还是坚持报告2.5.6.SEC01(这是oracle_common/modules文件夹中捆绑的Spring版本)
不过,在非JRF域中部署相同的应用程序,org.springframework.core.SpringVersion.getVersion()将报告与应用程序捆绑的spring的任何版本。如果您使用的是spring Framework,您很可能会在WAR而不是EAR中部署spring Bean,即使是在spring集成项目中。 高达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框架是由类加载器选择的
在多服务器域中,不将JRF部署到给定的服务器实例并不能解决问题,但是一个没有JRF的整个域可以解决问题
取而代之的技巧是在部署描述符web-inf/weblogic.xml中使用preference 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域中享受SpringFramework4.2的好处。
当然,不要忘记将Spring core 4.2和相关依赖项包含到WAR文件程序集中(即检查build.WAR以包含WEB-INF/lib/Spring*.jar)。我们确定不需要JRF,诅咒Oracle,继续我们的业务。
<?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>