2012-12-18 44 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