1

我们有一个使用 Spring 3 的 Web 应用程序。我们必须将它从 Tomcat 7 迁移到 Weblogic 10。

这个应用程序的结构是:

  • 一个核心模块,其中包含所有应用程序逻辑。这个模块被打包成一个jar。
  • 一个 web 模块,它定义了所有的 web 服务。这个模块包含前一个作为依赖项,并通过在“contextConfigLocation”参数中包含核心模块上下文来使用它的bean。

我正在使用 maven,这就是在 web 模块中定义依赖项的方式:

<dependency>
    <groupId>com.example</groupId>
    <artifactId>module-core</artifactId>
    <version>${project.version}</version>
    <classifier>${environment}</classifier>
</dependency>

该应用程序在 tomcat 中运行良好,但无法在 Weblogic 中部署,因为 Spring 无法创建任何依赖于 core-module.jar 中的 bean 的 bean。对于来自核心模块的所有 bean,错误总是相同的:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'xxxBean' is defined

'xxxBean' 是 core-module.jar 中定义的任何 bean。如果我删除 ref 以避免该 bean 的问题,则下一个引用的 bean 将再次引发错误。我的意思是 Spring 找到了在 web-module 本身中定义的所有 bean,但没有在 core-module 中定义。

在错误的跟踪中,我可以看到 weblogic 正在使用这个:

com.oracle.weblogic.wsee.wrapper.org.springframework.web.context.ContextLoaderListener.contextInitialized

所以这个问题可能与Weblogic为spring应用程序引入的包装器有关。

有关可以解决此问题的配置的任何想法?谢谢!

4

2 回答 2

1

最后,问题与如何在 web.xml 中定义不同的 xml 文件有关。在 tomcat 中运行良好的原始配置是:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:core-context.xml
        classpath:spring-web-security.xml 
    </param-value>
</context-param>

和新的:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:core-context.xml,classpath:spring-web-security.xml</param-value>
</context-param>

它们必须声明为逗号分隔而不是新行。由于weblogic并没有抱怨xml的格式,所以找到问题有点复杂。我希望这可以避免人们花时间在这种迁移上。问候和感谢!!

于 2013-01-09T08:28:46.483 回答
0

一个contextConfigLocationclasspath:core-module-applicationContext.xml任何实际文件被调用应该可以工作。

您可以尝试使用此内容将 weblogic.xml 定义到 WEB-INF/ 中吗

<?xml version="1.0" encoding="UTF-8"?> <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic- web-app.xsd"> <container-descriptor> <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor> </weblogic-web-app>

为Weblogic 10修改它,本质上我们要设置prefer-web-inf-classes为true

于 2013-01-08T11:56:19.943 回答