2013-04-22 102 views
3

我有一个web项目,我正在使用Spring来管理我的EntityManager,并且我遇到了与LazyInitialization有关的问题。我正在使用openEntityManagerInView,但它不能正常工作。LazyInitialization不起作用

我认为这是与我的pom.xml中的某个库冲突。请问谁能告诉我我的项目有什么问题?

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    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"> 
    <filter> 
    <filter-name> 
     openEntityManagerInViewFilter 
    </filter-name> 
    <filter-class> 
     org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter 
    </filter-class> 
    </filter> 

    <!-- Include this if you are using Hibernate --> 
    <filter-mapping> 
    <filter-name>openEntityManagerInViewFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
    </filter-mapping> 

    <filter> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name>  
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
    </filter> 

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml</param-value> 
    </context-param> 

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

    <context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
    </context-param> 

    <servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 

    <session-config> 
    <session-timeout>30</session-timeout> 
    </session-config> 

    <welcome-file-list> 
    <welcome-file>faces/index.xhtml</welcome-file> 
    </welcome-file-list> 

    <context-param> 
    <param-name>primefaces.THEME</param-name> 
    <param-value>bootstrap</param-value> 
    </context-param> 
</web-app> 

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven- 4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.labcon</groupId> 
    <artifactId>projetoCongresso</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>projetoCongresso</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencies> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.1.6</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-impl</artifactId> 
     <version>2.1.10</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.persistence</groupId> 
     <artifactId>persistence-api</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>3.2.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-expression</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context-support</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>3.1.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate</artifactId> 
     <version>3.2.6.ga</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-annotations</artifactId> 
     <version>3.3.1.GA</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>3.3.2.GA</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.15</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.6.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-simple</artifactId> 
     <version>1.6.1</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-collections</groupId> 
     <artifactId>commons-collections</artifactId> 
     <version>3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>ejb3-persistence</artifactId> 
     <version>1.0.1.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.sql</groupId> 
     <artifactId>jdbc-stdext</artifactId> 
     <version>2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.transaction</groupId> 
     <artifactId>jta</artifactId> 
     <version>1.0.1B</version> 
    </dependency> 
    <dependency> 
     <groupId>org.primefaces</groupId> 
     <artifactId>primefaces</artifactId> 
     <version>3.4.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.primefaces.themes</groupId> 
     <artifactId>all-themes</artifactId> 
     <version>1.0.9</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-fileupload</groupId> 
     <artifactId>commons-fileupload</artifactId> 
     <version>1.2.3-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>2.5-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>rome</groupId> 
     <artifactId>rome</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi</artifactId> 
     <version>3.7</version> 
    </dependency> 
    <dependency> 
     <groupId>com.lowagie</groupId> 
     <artifactId>itext</artifactId> 
     <version>2.0.7</version> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>6.0</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>6.0</version> 
     <type>jar</type> 
    </dependency> 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
      <compilerArguments> 
      <endorseddirs>${endorsed.dir}</endorseddirs> 
      </compilerArguments> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.1.1</version> 
     <configuration> 
      <failOnMissingWebXml>false</failOnMissingWebXml> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.1</version> 
     <executions> 
      <execution> 
      <phase>validate</phase> 
      <goals> 
       <goal>copy</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${endorsed.dir}</outputDirectory> 
       <silent>true</silent> 
       <artifactItems> 
       <artifactItem> 
        <groupId>javax</groupId> 
        <artifactId>javaee-endorsed-api</artifactId> 
        <version>6.0</version> 
        <type>jar</type> 
       </artifactItem> 
       </artifactItems> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <repositories> 
    <repository> 
     <url>http://download.java.net/maven/2/</url> 
     <id>jsf20</id> 
     <layout>default</layout> 
     <name>Repository for library Library[jsf20]</name> 
    </repository> 
    <repository> 
     <url>http://repo1.maven.org/maven2/</url> 
     <id>jstl11</id> 
     <layout>default</layout> 
     <name>Repository for library Library[jstl11]</name> 
    </repository> 
    <repository> 
     <id>prime-repo</id> 
     <name>PrimeFaces Maven Repository</name> 
     <url>http://repository.primefaces.org</url> 
     <layout>default</layout> 
    </repository> 
    <repository> 
     <releases> 
     <enabled>false</enabled> 
     </releases> 
     <snapshots> 
     <enabled>true</enabled> 
     </snapshots> 
     <id>apache.snapshots</id> 
     <name>Apache Snapshot Repository</name> 
     <url>https://repository.apache.org/content/repositories/snapshots</url> 
    </repository> 
    </repositories> 
</project> 

错误消息:

SEVERE: failed to lazily initialize a collection of role: com.catalogor3e.entity.Sistema.relacionamentoZonaEtiquetaSistema, no session or session was closed 
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.catalogor3e.entity.Sistema.relacionamentoZonaEtiquetaSistema, no session or session was closed 
    Sistema 2 
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(Abs tractPersistentCollection.java:358) 
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350) 
at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection .java:97) 
at org.hibernate.collection.PersistentBag.size(PersistentBag.java:225) 
at javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:110) 
at javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:185) 
at javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java:220) 
at javax.faces.model.ListDataModel.<init>(ListDataModel.java:79) 
at javax.faces.component.UIData.getDataModel(UIData.java:1804) 
at    javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484) 
at javax.faces.component.UIData.setRowIndex(UIData.java:473) 
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81) 
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820) 
at javax.faces.component.UIData.encodeBegin(UIData.java:1118) 
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:52) 
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43) 
at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51) 
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59) 
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43) 
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:57) 
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43) 
at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51) 
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59) 
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43) 
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:57) 
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43) 
at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51) 
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) 
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757) 
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewConte xtImpl.java:518) 
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183) 
at javax.faces.component.UIForm.visitTree(UIForm.java:354) 
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java: 376) 
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:297) 
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java :183) 
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:981) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757) 
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:409) 
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:147) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:722) 

的applicationContext.xml

<?xml version="1.0" encoding="windows-1252"?> 
<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" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    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/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 

    <!-- Seta anotaçoes para serem <context:annotation-config />usadas pelo Spring --> 
    <context:annotation-config /> 

    <!-- Define o pacote onde o Spring vai procurar por beans anotados --> 
    <context:component-scan base-package="com.labcon.projetocongresso.dao, com.labcon.projetocongresso.service" /> 

    <!-- define que as transaçoes irao ser anotadas --> 
    <tx:annotation-driven /> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
    <property name="url" value="jdbc:mysql://localhost:3306/bancodedados"/> 
    <property name="username" value="root"/> 
    <property name="password" value="852456"/> 
    </bean> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="projetoCongressoPU" /> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
     <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" /> 
     <property name="showSql" value="true" /> 
     </bean> 
    </property> 
    </bean> 

    <!-- Configuracao do gerente de transacoes do Spring --> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 
</beans> 

DAO的配置是这样的:

@Repository("sistemasDAO") 
public class SistemasDAO { 

    @PersistenceContext 
    private EntityManager entityManager; 

    public SistemasDAO() { 

    } 

    public List<Sistema> getTodosOsSistemas() { 

    Query query = entityManager.createQuery("select sistemas from Sistema sistemas"); 
    List<Sistema> sistemas = query.getResultList(); 

    return sistemas; 
    } 

    //methods hidden 
} 
+0

什么是实际的错误信息? – acdcjunior 2013-04-22 22:40:52

+0

''完全像这样吗? – acdcjunior 2013-04-22 22:46:19

+0

不,它没有分离..我会发布错误 – 2013-04-22 22:50:38

回答

1

由于@gerrytan建议,这很可能是因为你没有访问某事务的集合。在尝试访问集合时,数据库会话已关闭。

您可以尝试将@Transactional添加到SistemasDao类中,以通过此方式启用事务管理。