Ich bin noch neu in der Entwicklung von Spring und arbeite mich hier gerad durch JDBC Spring durch.
Mein Programm sieht wie folgt aus:
Person.java
[DUKE]
package springjdbc;
public class Person {
private Long id;
private String name;
private int age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "[" + this.id + "] " + this.name + " (" + this.age + ")";
}
}
[/DUKE]
PersonDAO.java
[DUKE]
package springjdbc;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
public class PersonDao {
private SimpleJdbcTemplate jdbcTemplate;
public PersonDao(SimpleJdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public Person findPerson(long id) {
String sql = "select id, name, age from people where id = ?";
ParameterizedRowMapper<Person> mapper = new ParameterizedRowMapper<Person>() {
public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
Person person = new Person();
person.setId(rs.getLong("id"));
person.setName(rs.getString("name"));
person.setAge(rs.getInt("age"));
return person;
}
};
return this.jdbcTemplate.queryForObject(sql, mapper, id);
}
}
[/DUKE]
Main.java
[DUKE]
package springjdbc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// Hole Person DAO
ApplicationContext ac =
new ClassPathXmlApplicationContext("classpath:**/dbconfig.xml");
PersonDao pDao = (PersonDao)ac.getBean("personDao");
// Suche
Person p = pDao.findPerson(1);
System.out.println("Person gefunden: " + p);
}
}
[/DUKE]
dbconfig.xml
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/my_app" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="simpleJdbcTemplate"
class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
<bean id="personDao" class="com.gruenschnabel.cheapter_4.PersonDao">
<constructor-arg ref="simpleJdbcTemplate" />
</bean>
</beans>
[/XML]
folgendende Bibliotheken sind eingebunden
Beim Compilieren erhalte ich aber die Fehlermeldung:
Weis jemand von euch wo hier das Problem liegt?
Mein Programm sieht wie folgt aus:
Person.java
[DUKE]
package springjdbc;
public class Person {
private Long id;
private String name;
private int age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "[" + this.id + "] " + this.name + " (" + this.age + ")";
}
}
[/DUKE]
PersonDAO.java
[DUKE]
package springjdbc;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
public class PersonDao {
private SimpleJdbcTemplate jdbcTemplate;
public PersonDao(SimpleJdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public Person findPerson(long id) {
String sql = "select id, name, age from people where id = ?";
ParameterizedRowMapper<Person> mapper = new ParameterizedRowMapper<Person>() {
public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
Person person = new Person();
person.setId(rs.getLong("id"));
person.setName(rs.getString("name"));
person.setAge(rs.getInt("age"));
return person;
}
};
return this.jdbcTemplate.queryForObject(sql, mapper, id);
}
}
[/DUKE]
Main.java
[DUKE]
package springjdbc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// Hole Person DAO
ApplicationContext ac =
new ClassPathXmlApplicationContext("classpath:**/dbconfig.xml");
PersonDao pDao = (PersonDao)ac.getBean("personDao");
// Suche
Person p = pDao.findPerson(1);
System.out.println("Person gefunden: " + p);
}
}
[/DUKE]
dbconfig.xml
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/my_app" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="simpleJdbcTemplate"
class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
<bean id="personDao" class="com.gruenschnabel.cheapter_4.PersonDao">
<constructor-arg ref="simpleJdbcTemplate" />
</bean>
</beans>
[/XML]
folgendende Bibliotheken sind eingebunden
- commons-dbcp.jar
- commons-logging.jar
- spring.jar
- mysql-connector-java-5.1.24-bin.jar
- spring-jdbc.jar
- spring-dao.jar
- spring-core.jar
Beim Compilieren erhalte ich aber die Fehlermeldung:
Nov 21, 2013 8:04:34 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@16a38b5: display name [org.springframework.context.support.ClassPathXmlApplicationContext@16a38b5]; startup date [Thu Nov 21 20:04:34 CET 2013]; root of context hierarchy
Nov 21, 2013 8:04:34 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from file [F:\projekte\java\SpringDao\bin\springjdbc\dbconfig.xml]
Nov 21, 2013 8:04:34 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@16a38b5]: org.springframework.beans.factory.support.DefaultListableBeanFactory@16c1857
Nov 21, 2013 8:04:34 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@16c1857: defining beans [dataSource,simpleJdbcTemplate,personDao]; root of factory hierarchy
Nov 21, 2013 8:04:34 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@16c1857: defining beans [dataSource,simpleJdbcTemplate,personDao]; root of factory hierarchy
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [F:\projekte\java\SpringDao\bin\springjdbc\dbconfig.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:54)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:752)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:717)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:291)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:122)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:66)
at springjdbc.Main.main(Main.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 17 more
Weis jemand von euch wo hier das Problem liegt?