2016-04-25 4 views
1

Dies ist die Bohne mit dieser ID in meiner Feder-servlet.xml Datei definiertKann nicht Bezug auf Bohne ‚datasource‘ lösen, während Bean-Eigenschaft ‚Datasource‘ .factory.NoSuchBeanDefinitionException Einstellung:

<bean id="dataSource" 
     class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" 
     p:password="${jdbc.password}" /> 

Dies ist die komplette stacktrace

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [META-INF/spring/hibernate-context.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' is defined 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 

diese Datei meine Anwendungskontext ist in meinem WEB-INF-Ordner definiert

<?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:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
     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"> 
</beans> 

dies ist meine komplette Datei web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>YummyFoods</display-name> 
    <welcome-file-list> 
    <welcome-file>/JSP/welcome.jsp</welcome-file> 
    </welcome-file-list> 
    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 
    <servlet> 
    <servlet-name>imageServlet</servlet-name> 
    <servlet-class>com.yummyfoods.spring.servlet.ImageServlet</servlet-class> 
</servlet> 
    <servlet-mapping> 
    <servlet-name>imageServlet</servlet-name> 
    <url-pattern>/image/*</url-pattern> 
</servlet-mapping> 
<error-page> 
    <error-code>404</error-code> 
    <location>/error</location> 
</error-page> 
</web-app> 

dies ist mein feder servlet.xml Datei

<mvc:resources location="/resources/" mapping="/resources/**"/> 
    <mvc:default-servlet-handler/>   
    <bean id="jspViewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix" value="/JSP/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

     <bean id="messageSource" 
     class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basename" value="classpath:messages" /> 
     <property name="defaultEncoding" value="UTF-8" /> 
    </bean> 


    <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
     p:location="classpath:jdbc.properties" /> 

    <bean id="dataSource" 
     class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" 
     p:password="${jdbc.password}" /> 


    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="configLocation"> 
      <value>classpath:hibernate-cfg.xml</value> 
     </property> 
     <property name="configurationClass"> 
      <value>org.hibernate.cfg.AnnotationConfiguration</value> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${jdbc.dialect}</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.connection.SetBigStringTryClob">true</prop> 
       <prop key="hibernate.jdbc.batch_size">0</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="multipartResolver" 
     class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 

     <!-- one of the properties available; the maximum file size in bytes --> 
     <property name="maxUploadSize" value="10000000" /> 
    </bean> 

    <tx:annotation-driven /> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 
</beans> 

Bitte helfen Sie mir meinen Weg zu finden.

+1

Zeigen Sie Ihre Spring-Anwendungskontextdateien an. Aus der Sicht der Dinge definieren Sie eine dataSource in einer DispatcherServlet-Kontextkonfigurationsdatei. Und die EntityManagerFactory in einer Stammanwendungskontextdatei. Beans im Stammanwendungskontext können nicht auf die in der Servlet-Anwendungskontextdatei verweisen. Sie müssen Ihre DataSource-Bean in die andere XML-Konfigurationsdatei verschieben. –

+0

Wenn Sie eine 'web.xml' haben, geben Sie diese ein ... –

+0

Ja. Ich mache. Zeige ich es – Blaze

Antwort

1

Aus der Sicht der Dinge definieren Sie eine Datenquelle in einer DispatcherServlet Kontextkonfigurationsdatei, d. H. spring-servlet.xml, wie Sie angegeben haben. Und die entityManagerFactory in einem Root-Anwendungskontext Datei. Beans im Stammanwendungskontext können nicht auf die in der Servlet-Anwendungskontextdatei verweisen. Sie müssen Ihre dataSource Bean in die Datei hibernate-context.xml verschieben.

+0

Ich habe meine Anwendungskontextdatei gezeigt – Blaze

+0

Was ist mit META-NF/Feder/Hibernate-context.xml. Wie ich sagte definiere dataSource in dieser Datei und nicht spring-servlet.xml –

+0

Ich habe nur spring-servlet.xml Datei und applicationContext.xml in meinem WEB-INF Ordner – Blaze

-1

Was kommt mit Ihren Abhängigkeiten? Ich denke, Sie sollten Ihre Datenquelle def in applicationContext.xml aufnehmen und dann sollte das Winterschlaf-Ding glücklich sein.

So ... die

<bean id="dataSource" 
     class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" 
     p:password="${jdbc.password}" /> 

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="configLocation"> 
      <value>classpath:hibernate-cfg.xml</value> 
     </property> 
     <property name="configurationClass"> 
      <value>org.hibernate.cfg.AnnotationConfiguration</value> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${jdbc.dialect}</prop> 
       <prop key="hibernate.show_sql">true</prop> 
        <prop key="hibernate.connection.SetBigStringTryClob">true</prop> 
       <prop key="hibernate.jdbc.batch_size">0</prop> 
      </props> 
     </property> 
    </bean> 
<tx:annotation-driven /> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 

in applicationContext.xml geht und von spring-servlet.xml

entfernt Dann wird der Hibernate-cfg.xml wich in der Session-Fabrik def eingebettet ist, sollte es Datenquelle finden und Sei glücklich beim Laden.

Es ist besser, Servlet-Mapping und MVC-Definitionen aus Back-End-Zeug (Bohnenfabrik etc ...) zu isolieren, wie es einfacher ist, es in der Zukunft bei Bedarf zu ändern.

Mit was bauen Sie Ihre App?

+0

Bitte, wenn Sie einen Kommentar haben, kommentieren Sie. Dies ist keine Antwort –

+0

Ich glaube nicht, geben vollen Code, um dies zu beantworten, wird hilfreich sein, aber es kann getan werden. – Nemesis

+0

Veröffentlichen Sie Snippets, wenn Sie denken – Blaze