2010-01-28 4 views
2

У меня возникла проблема с настройкой JDBCTemplate Spring для правильной работы. Я пытаюсь ввести источник данных, но кажется, что он всегда равен нулю. Вот пример кода:Spring JDBCTemplate IllegalArgumentException: требуется источник данных

  1. applicationContext.xml:

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" /> 
    <property name="url" 
        value="jdbc:derby:c:\\Derby\\MyDB\\jsfkickstart;create=true" /> 
    <property name="username" value="admin" /> 
    <property name="password" value="admin" /> 
    </bean> 
    
    <bean id="employeeDoa" class="com.kickstart.employeeapp.doa.EmployeeDoa"> 
        <property name="dataSource" ref="dataSource" /> 
    </bean> 
    
  2. web.xml

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml</param-value> 
    

    <listener> 
         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <listener> 
         <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 
    
  3. EmployeeDoa.java

    public class EmployeeDoa implements IEmployeeDoa, IDepartmentDoa { 
    private DataSource dataSource; 
         public List<Employee> getAllEmployees() { 
         JdbcTemplate select = new JdbcTemplate(dataSource); 
         return select.query(
           "SELECT "+ 
            "e.ID as empId, "+ 
            "e.FIRSTNAME as empFirstName, "+ 
            "e.LASTNAME as empLastName, "+ 
            "d.ID as depId, "+ 
            "d.NAME as depName, "+ 
            "d.LOCATION as depLocation "+ 
           "FROM jsfkickstart.Employee e, jsfkickstart.Department d", 
           new EmployeeMapper()); 
         } 
    } 
    
    class EmployeeMapper implements RowMapper { 
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException { 
         Employee emp = new Employee(); 
         emp.setId(rs.getInt("empId")); 
         emp.setFirstName(rs.getString("empFirstName")); 
         emp.setLastName(rs.getString("empLastName")); 
         Department dep = new Department(); 
         dep.setId(rs.getShort("depId")); 
         dep.setLocation(rs.getString("depLocation")); 
         dep.setName(rs.getString("depName")); 
         emp.setDepartment(dep); 
         return emp; 
        } 
    } 
    
  4. Исключение Метательное:

    Exception in thread "main" java.lang.IllegalArgumentException: Property 'dataSource' is required 
    at org.springframework.jdbc.support.JdbcAccessor.afterPropertiesSet(JdbcAccessor.java:134) 
    at org.springframework.jdbc.core.JdbcTemplate.<init>(JdbcTemplate.java:142) 
    at com.kickstart.employeeapp.doa.EmployeeDoa.addEmployee(EmployeeDoa.java:29) 
    

Кто-нибудь знает, как я могу решить эту проблему? Если мне не хватает какой-либо важной информации в вопросе, пожалуйста, дайте мне знать.

спасибо.

+0

введите код com.kickstart.employeeapp.doa.EmployeeDoa (по крайней мере, декларация класса) – Bozho

+0

Добавлено! Спасибо Бажо. – fouad

ответ

2

Я был на самом деле очень глупым исключением. Тело setDataSource() было пустым, т. Е. Я не присвоил dataSource никому, поэтому он всегда был нулевым.

Глупо меня !!!

+0

Я собирался сказать, что вообще не видел метод setDataSource(). – Matt

+0

Да, очень глупо;) – Mils

Смежные вопросы