how to resolve spring no bean named 'dataSource' is defined?

16,256

Rename the datasource bean id with name="dataSource" and you have to import dao-context.xml inside security-context.xml in order to use dataSource bean.

Share:
16,256
Ayman S
Author by

Ayman S

Updated on June 04, 2022

Comments

  • Ayman S
    Ayman S almost 2 years

    my 'dataSource' bean is defined in dao-context.xml, like this

    <bean name="hcpDS" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
                    <property name="driverClassName" value="${hcp.connection.driver_class}" />
                    <property name="username" value="${hcp.connection.username}" />
                    <property name="password" value="${hcp.connection.password}" />
                    <property name="url" value="${hcp.connection.url}" />
                    <property name="maxIdle" value="${hcp.minPoolSize}" />
                    <property name="maxActive" value="${hcp.maxPoolSize}" />
                </bean>
    

    in security-context.xml i'm trying to use it like this:

    <beans:bean class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl" id="userDetailsService">
            <beans:property name="rolePrefix" value="ROLE_"/>
            <beans:property name="dataSource" ref="dataSource"/>
            <beans:property name="usersByUsernameQuery" value="SELECT username,password,enabled FROM Users WHERE username = ?"/>
            <beans:property name="authoritiesByUsernameQuery" value="SELECT u.username, a.authorityname FROM Users u JOIN Users_Authorities ua on u.id = ua.user_id JOIN Authorities a on ua.authorities_id = a.id WHERE u.username = ?"/>
        </beans:bean>
    

    And have error in logs:

    2014-06-08 16:10:06,683 ERROR [localhost-startStop-1] ContextLoader - Context initialization failed
    
        org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authentication.ProviderManager#0': Cannot create inner bean '(inner bean)' of type [org.springframework.security.config.authentication.AuthenticationManagerFactoryBean] while setting bean property 'parent'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authenticationManager': Cannot resolve reference to bean 'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0' while setting bean property 'providers' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0': Cannot resolve reference to bean 'userDetailsService' while setting bean property 'userDetailsService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDetailsService' defined in class path resource [HCP-security-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
    

    this is my applicationContext.xml in the WEB-INF Folder:

    <?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:tx="http://www.springframework.org/schema/tx" 
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:jee="http://www.springframework.org/schema/jee" 
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/aop
          http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
          http://www.springframework.org/schema/tx
          http://www.springframework.org/schema/tx/spring-tx-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/jee
          http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">
    
        <import resource="classpath:HCP-security-context.xml" />
        <import resource="classpath:HCP-service-context.xml" />
        <import resource="classpath:HCP-dao-context.xml" />
    
    </beans>
    

    and this is my 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_2_5.xsd" version="2.5">
      <display-name></display-name>
      <listener>
        <listener-class>
                org.springframework.web.context.request.RequestContextListener
            </listener-class>
      </listener>
      <listener>
        <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
      </listener>
      <filter>
            <description>
                generated-spring-security-session-integration-filter
            </description>
            <filter-name>
                SpringSecuritySessionIntegrationFilter
            </filter-name>
            <filter-class>
                org.springframework.security.web.context.SecurityContextPersistenceFilter
            </filter-class>
        </filter>
        <filter>
            <description>generated-spring-security-filter</description>
            <filter-name>springSecurityFilterChain</filter-name>
            <filter-class>
                org.springframework.web.filter.DelegatingFilterProxy
            </filter-class>
        </filter>
        <filter-mapping>
            <filter-name>
                SpringSecuritySessionIntegrationFilter
            </filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>springSecurityFilterChain</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
      <filter>
        <description>generated-persistence-filter</description>
        <filter-name>hcpFilter</filter-name>
        <filter-class>
                org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
            </filter-class>
        <init-param>
          <param-name>entityManagerFactoryBeanName</param-name>
          <param-value>hcp</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>hcpFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
      </context-param>
      <context-param>
        <param-name>com.sun.faces.expressionFactory</param-name>
        <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
      </context-param>
     <context-param>
                    <param-name>primefaces.THEME</param-name>
                    <param-value>sunny</param-value>
    </context-param>
      <welcome-file-list>
        <welcome-file>template.xhtml
                </welcome-file>
      </welcome-file-list>
      <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet>
        <description>servlet</description>
        <servlet-name>HCP Servlet</servlet-name>
        <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:HCP-web-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet>
        <description>resources-servlet</description>
        <servlet-name>Resource Servlet</servlet-name>
        <servlet-class>
                org.springframework.js.resource.ResourceServlet
            </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>
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>Resource Servlet</servlet-name>
        <url-pattern>/resources/*</url-pattern>
      </servlet-mapping>
    </web-app>