在我的项目中使用OpenEntityManagerInViewFilter?

时间:2012-02-15 22:25:26

标签: spring jsf java-ee entitymanager

由于hibernate的延迟加载问题我尝试设置弹簧OpenEntityManagerInViewFilter。

但是我不能让它与我已经在工作的应用程序一起工作。 还有什么可以添加到web.xml并创建一个applicationContext.xml,以便使用Open EM?

由于

我已添加到web.xml:

    <filter>
        <filter-name>
            OpenEntityManagerInViewFilter
        </filter-name>
            <filter-class>
                org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
            </filter-class>
            <init-param>
                <param-name>singleSession</param-name>
                <param-value>true</param-value>
            </init-param>
            <init-param>
                <param-name>flushMode</param-name>
                <param-value>AUTO</param-value>
            </init-param>
    </filter>
    <!-- Include this if you are using Hibernate -->
    <filter-mapping>
        <filter-name>OpenEntityManagerInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

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

    <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>

和applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    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-3.0.xsd
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">

</beans>

我已经可以部署我的应用程序,但是当我尝试启动它时会抛出ex:

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

2 个答案:

答案 0 :(得分:0)

由于错误提示您没有在spring配置文件中定义entityManagerFactory。或者用其他名称定义。尝试将此init参数添加到web.xml中的配置

<init-param>
    <param-name>entityManagerFactoryBeanName</param-name>
    <param-value>entityManagerFactory</param-value>
</init-param>

答案 1 :(得分:0)

在applicationContext.xml中创建一个entityManagerFactory,如下所示:

<!-- Add JPA support -->
 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="loadTimeWeaver">
        <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
    </property>
 </bean>

 <!-- Add Transaction support -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
相关问题