2012-12-18 213 views
0

所以我有一個巨大的更新。我終於讓我的sessionFactory初始化,而不是null。我仍然有(希望)最後一個問題。BeanCreationException春季休眠jsf

當我將數據存儲在DAO文件中時,我得到以下堆棧跟蹤。

javax.faces.el.EvaluationException: org.hibernate.HibernateException: No Session found for current thread 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    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:931) 
    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$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: org.hibernate.HibernateException: No Session found for current thread 
    at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) 
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:941) 
    at com.scott.common.CustomerDAO.saveToDb(CustomerDAO.java:25) 
    at com.scott.common.CustomerBackingBean.save(CustomerBackingBean.java:65) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:278) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    ... 24 more 


    <?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <bean id="backingBean" class="com.scott.common.CustomerBackingBean" 
     scope="request"> 
     <property name="customer" ref="customerPojo" /> 
     <property name="customerDao" ref="customerDao" /> 
    </bean> 

    <bean id="customerPojo" class="com.scott.common.Customer"></bean> 


    <bean id="customerDao" class="com.scott.common.CustomerDAO"> 
     <property name="sessionFactory" ref="mySessionFactory" /> 
    </bean> 

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

    <bean id="mySessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="annotatedClasses"> 
      <list> 
       <value>com.scott.common.Customer</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="mySessionFactory" /> 
    </bean> 
</beans> 




    package com.scott.common; 

import org.hibernate.SessionFactory; 

public class CustomerDAO 
{ 
    private SessionFactory sessionFactory; 

    /** 
    * @return the sessionFactory 
    */ 
    public SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 

    /** 
    * @param sessionFactory the sessionFactory to set 
    */ 
    public void setSessionFactory(SessionFactory sessionFactory) { 
     this.sessionFactory = sessionFactory; 
    } 

    public void saveToDb(Customer customer) 
    { 
     getSessionFactory().getCurrentSession().save(customer); 
    } 


} 
+1

在見到異常跟蹤,我覺得有些休眠依賴缺失。 _Caused by:java.lang.NoClassDefFoundError:org/hibernate/cache/CacheProvider._因此,相應的類不能被實例化,並導致bean創建異常 – om39a

+0

你是否也可以發佈其他配置文件?沒有查看實際配置,很難告訴問題在哪裏。 – SRy

+0

感謝您的回覆。我更新了我的文章,包括我的pom.xml – scotttty

回答

0

你目前的POM文件只使用hibernate-core依賴,似乎沒有被添加緩存擴展名。

嘗試添加的Hibernate的Ehcache依賴於你的POM文件:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-ehcache</artifactId> 
    <version>4.1.7.Final</version> 
</dependency> 
+0

謝謝,我把這個依賴關係,但仍然有同樣的問題。我在堆棧跟蹤中看到它在抱怨noclassdeffound緩存的東西,所以我搜索了這個,並告訴我將mySessionFactory bean類更改爲class =「org.springframework.orm.hibernate4.LocalSessionFactoryBean」>。我這樣做,然後有一個錯誤,說我沒有一個ID爲我的@Entity。我解決了這個問題(因爲我不知道它做了什麼,我只是在宣佈它之前遵循教程)。服務器終於跑了,但現在我有一個空指針異常。我調試...我的sessionfactory變量未設置 – scotttty