2013-01-04 1 views
0

인터넷을 검색하고 몇 시간 동안 디버깅했지만 무슨 일이 잘못되었는지 찾아야합니다. 부두 web.xml에 8.1.0.v20120127 봄-ORM 3.1.2.RELEASE 스프링 웹 3.1.2.RELEASE 최대 절전 모드 코어 4.1.7 - 최종최대 절전 모드 sessionFactory를 찾을 수 없지만 빈을로드했습니다.

: 은 내가 follwng의 웹 어플리케이션 설정을

XmlWebApplicationContext이 : 응용 프로그램이 다음과 같은 오류를 시작하지 않으며 보여줍니다 동안 hibernateSessionFactory

: sessionFactoryBeanName 초기화-PARAM를 통해 정의 applicationContext.xml ClassPathXmlApplicationContext에서 몇 콩을로드 : ApplicationContext를-hibernate.xml에서 몇 콩을로드 (또한 hibernateSessionFactory)

페이지를로드 할 때 (요청) OpenSessionInViewFilter이 활성화 얻고 있습니다

다음 : DefaultListableBeanFactory.java:553에 디버깅하는 동안

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'hibernateSessionFactory' is defined 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:553) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1102) 
at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.lookupSessionFactory(OpenSessionInViewFilter.java:156) 
at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.lookupSessionFactory(OpenSessionInViewFilter.java:141) 
at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:105) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1336) 
at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:172) 
at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:267) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1336) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:483) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:521) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:412) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) 
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111) 
at org.eclipse.jetty.server.Server.handle(Server.java:351) 
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:451) 
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:916) 
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:634) 
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230) 
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76) 
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609) 
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534) 
at java.lang.Thread.run(Thread.java:722) 

가 beanDefinitionMap가 XmlWebApplicationContext이로드만을 콩 키 집합을 보여줍니다 . 따라서 applicationContext-hibernate.xml 파일의 빈들은 보이지 않는다.

빈 정의 (LocalSessionFactoryBean의의 세터 중 하나에 중단 점은 콩이 만들어 내게 방송) :

<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
<property name="configLocations" ref="hibernateConfigLocations"/> 
<property name="dataSource" ref="hibernateDatasource"/> 
<property name="namingStrategy" ref="hibernateNamingStrategy"/> 
<property name="hibernateProperties" ref="hibernateProperties"/> 

내가 XmlWebApplicationContext이와 ClassPathXmlApplicationContext 모두에서 모든 콩을 찾기 위해 기다리고 있었다 . 아무도 내 문제를 일으키는 원인을 알 수 있으며 문제를 찾는 데 필요한 정보가 누락되었을 때 알려주실 수 있습니까?

의 web.xml :

<display-name>webshop-cms</display-name> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:applicationContext.xml</param-value> 
</context-param> 

<context-param> 
    <param-name>configuration</param-name> 
    <param-value>deployment</param-value> 
</context-param> 

<filter> 
    <filter-name>webshop-cms</filter-name> 
    <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> 
    <init-param> 
     <param-name>applicationClassName</param-name> 
     <param-value>nl.name.webshop.cms.CmsApplication</param-value> 
    </init-param> 
    <init-param> 
     <param-name>ignorePaths</param-name> 
     <param-value>/assets</param-value> 
    </init-param> 
</filter> 

<filter> 
    <filter-name>openSessionInView</filter-name> 
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> 
    <init-param> 
     <param-name>sessionFactoryBeanName</param-name> 
     <param-value>hibernateSessionFactory</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>webshop-cms</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<filter-mapping> 
    <filter-name>openSessionInView</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

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

applicationContext.xml :

<context:component-scan base-package="nl.name.webshop.model" /> 
<context:component-scan base-package="nl.name.webshop.service" /> 
<context:component-scan base-package="nl.name.webshop.dao" /> 

<bean id="webshop.context" class="org.springframework.context.support.ClassPathXmlApplicationContext"> 
    <constructor-arg> 
     <list> 
      <value>classpath:applicationContext-hibernate.xml</value> 
     </list> 
    </constructor-arg> 
</bean> 

애플리케이션 컨텍스트-hibernate.xml :

<bean id="hibernateNamingStrategy" class="org.hibernate.cfg.DefaultComponentSafeNamingStrategy" /> 

<bean id="hibernateConfigLocations" class="java.util.ArrayList"> 
    <constructor-arg> 
     <list> 
      <value>classpath:hibernate.cfg.xml</value> 
     </list> 
    </constructor-arg> 
</bean> 

<bean id="jndiDatasourceName" class="java.lang.String"> 
    <constructor-arg value="java:comp/env/jdbc/webshop"/> 
</bean> 

<jee:jndi-lookup id="hibernateConfig" jndi-name="jdbc/webshop-hibernate-config"/> 
<jee:jndi-lookup id="hibernateDatasource" jndi-name="jdbc/webshop-datasource"/> 

<bean id="hibernatePropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="properties" ref="hibernateConfig"/> 
</bean> 

<bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="properties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
     </props> 
    </property> 
</bean> 

<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="configLocations" ref="hibernateConfigLocations"/> 
    <property name="dataSource" ref="hibernateDatasource"/> 
    <property name="namingStrategy" ref="hibernateNamingStrategy"/> 
    <property name="hibernateProperties" ref="hibernateProperties"/> 
</bean> 
01,235,

+1

스프링 컨텍스트 파일을로드하기위한 구성을 표시 할 수 있습니까? – JamesB

+0

죄송합니다. 첫 번째 게시물이며 코드 블록을 제대로 가져올 수 없습니다. 다시 시도하겠습니다. – user1947973

+0

Oké는 파일을 추가했습니다 .. 잘하면 그것은 분명히 시작합니다. xml 태그도 사라졌습니다. 파일 당 마지막 닫는 태그입니다. – user1947973

답변

0

은 빈의 정의는 있어야하지 :

<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 

즉 사용 ID를 대신 이름의 속성.

[편집] 사실, ApplicationContext를-hibernate.xml 파일이 방법으로로드 할 이유가 :

<bean id="webshop.context" class="org.springframework.context.support.ClassPathXmlApplicationContext"> 
    <constructor-arg> 
     <list> 
      <value>classpath:applicationContext-hibernate.xml</value> 
     </list> 
    </constructor-arg> 
</bean> 

난 당신이 단순히 applicationContext.xml에서 다음을 가질 수 있다고 생각 :

<import resource="/path/relative/to/application/context/applicationContext-hibernate.xml"/> 
+0

JamesB 대답 해줘서 고마워요. 스프링이 id와 name 속성을 처리하는 방법을 정확히 모르겠습니다. 그러나 나는 이드에게 그것을 바꾸었고 불행히도 내 문제를 해결하지 못했다. 나는 왜이 bean에 대해서만 name 속성을 사용했는지 모른다. 그래서 나는 지금 일관성있게 유지하기 위해 ID를 사용하고있다. – user1947973

+0

@ user1947973 좋아, 대답을 편집했습니다. – JamesB