0

Spring アプリ (Spring 2.5.6) を Tomcat (6.0) にデプロイすると、起動に失敗します。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateSessionFactory' defined in class path resource [C.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' is defined

私の web.xml は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="[snip]" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>[snip]</display-name>
<welcome-file-list>
   [snip]
</welcome-file-list>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:All.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>[snip]</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>[snip]</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

All.xml は、いくつかの構成ファイルをインポートします。

<import resource="A.xml"/>
<import resource="B.xml"/>
<import resource="C.xml"/>
...

B.xml はデータ ソースを定義します。

<jee:jndi-lookup id="dataSource" jndi-name="[snip]"/>

C.xml は、B.xml からのデータ ソースを参照して、休止状態のセッション ファクトリを作成します。

<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="mappingResources">
        <list>
            <value>[snip]</value>
            <value>[snip]</value>
        </list>
    </property>
    <property name="hibernateProperties">
  <props>
       [snip]
  </props>
</property>
<property name="dataSource" ref="dataSource" />
</bean>

WAR ファイルをデプロイすると、上記の例外が発生します。私の質問は次のとおりです。

  1. なんで?
  2. Spring 構成の有効性をテストするために作成した JUnit テストで同じ例外が発生しないのはなぜですか? テストは次のとおりです。

    @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "/All.xml" }) public class ImfSpringConfigurationTest { [中略]] }

注: JUnit テストでは、次のように、別の All.xml ファイルを使用して B.xml を、jndi ルックアップなしでデータ ソースを定義するファイルに置き換えます。

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName = "oracle.jdbc.driver.OracleDriver"
    [snip] />

**

結局のところ、この構成は正しいです。例外をスローしたのは、このデプロイ プロセスではなく、一部の同じ構成ファイルで動作する別のモジュールのデプロイでした。

4

1 に答える 1

0

ワイルドカード演算子を使用して最上位のコンテキストを取得してみてください:

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/classes/spring*.xml</param-value>
</context-param>
于 2012-05-10T09:24:49.977 に答える