2

問題

sessionFactoryプロジェクトで正しい Bean を定義できず、 Web アプリケーションの初期化に失敗します。

ログ出力

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webServiceTest' defined in ServletContext resource [/WEB-INF/
classes/appcontext-spring.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate
' is required
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1336)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:471)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
        ... 50 more
Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
        at org.springframework.orm.hibernate3.support.HibernateDaoSupport.checkDaoConfig(HibernateDaoSupport.java:117)
        at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1367)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1333)
        ... 60 more

xmlマッピングと pojosを使用して maven で ORM ライブラリを作成しました。プロジェクトにインポートしましたが、DDBB にアクセスするように構成できません。

  • jdbc.propertiesファイルは、DDBB 接続 ( 、 など) で明確に定義されていdb.urlますdb.properties
  • ライブラリ内のすべての POJO はHibernateDaoSupportを拡張し、基本的な op インターフェイス (CRUD) を実装します。テストを行うためにDaoBaseを拡張するサービスwebServiceTestを使用しています。
  • 私はORMライブラリでJUnitテストを行い、良い結果を得ました。

appcontext -persistance.xmlファイルのdataSourcesessionFactoryなどの定義は次のとおりです。

    <!-- PERSISTENCE SETUP -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName">
        <value>${db.driver}</value>
    </property>
    <property name="url">
        <value>${db.url}</value>
    </property>
    <property name="username">
        <value>${db.username}</value>
    </property>
    <property name="password">
        <value>${db.password}</value>
    </property>

    <property name="maxActive">
        <value>${db.maxActive}</value>
    </property>

    <!-- Maximum number of idle dB connections to retain in pool. Set 
        to 0 for no limit -->
    <property name="maxIdle">
        <value>${db.maxIdle}</value>
    </property>

    <!-- Maximum time to wait for a dB connection to become available 
        in ms, in this example 10 seconds. An Exception is thrown if this timeout 
        is exceeded. Set to -1 to wait indefinitely. -->
    <property name="maxWait">
        <value>${db.maxWait}</value>
    </property>

    <!-- Autocommit setting. This setting is required to make Hibernate 
        work. Or you can remove calls to commit(). -->
    <property name="defaultAutoCommit">
        <value>true</value>
    </property>

    <!-- Recover abandoned connections -->
    <property name="removeAbandoned">
        <value>true</value>
    </property>

    <!-- Set the number of seconds a dB connection has been idle before 
        it is considered abandoned. -->
    <property name="removeAbandonedTimeout">
        <value>11</value>
    </property>

    <!-- Log a stack trace of the code which abandoned the dB connection 
        resources. -->
    <property name="logAbandoned">
        <value>true</value>
    </property>

</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref local="sessionFactory" />
    </property>
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="lobHandler">
        <ref bean="oracleLobHandler" />
    </property>
    <property name="dataSource" ref="dataSource" />

    <!-- configura la fuente de los mappings -->
    <property name="configLocation" value="classpath:hibernate.cfg.xml" />

    <property name="hibernateProperties">
        <props>

            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</prop>
            <prop key="hibernate.generate_statistics">true</prop>

        </props>
    </property>
</bean>

質問:

  • Spring 構成は、ORM jar からhibernate.cfg.xmlをロードする必要がありますか? これどうやってするの ?
  • Spring ORM プロジェクトから別のプロジェクトに構成をロードするにはどうすればよいですか?
  • ORM でマッピングを定義しますが、jar に含めるアプリケーション コンテキストが ORM で定義されていません。
4

1 に答える 1

1

ビーンズ タグの属性を使用してこの問題を解決し、 appcontext-spring.xmldefault-autowire="byName"で必要なオブジェクト インジェクションのすべての構成を読み込みます。

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
    default-lazy-init="true" default-autowire="byName">

そして、sessionFactory を作成します。

于 2011-11-23T09:05:19.100 に答える