ela1109
Mar 1st, 2012, 02:48 AM
I am trying to create an app with the Spring MVC but struggling with controller, service and dao classes.
I want to use HSQLDB, I do not want to use Hibernate or any framework, the JDBC will be adequate on it's own.
I have pasted the details shown below in the CoffeeShop-servlet.xml and applicationContext.xml files, classes and error message. I am not sure if I am missing something simple!
CoffeeShop-servlet.xml:
<bean name="/person.htm" class="net.jdj.coffee.web.PersonController">
<property name="personService" ref="myPersonService"/>
</bean>
applicationContext.xml:
< bean id="myPersonDAO" class=" net.jdj.coffee.dao.Jdbc_PersonDAO">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="myPersonService" class="net.jdj.coffee.service.Simple_PersonService">
<property name="personDAO" ref="myPersonDAO"/>
</bean>
Person.java
...
@Entity
@Table(name="PERSON")
public class Person implements Serializable {
// This a unique number that will be used during serialization
private static final long serialVersionUID = 210120121345L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column private String name;
@Column private String address;
...
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);}
//setters & getters
public int getId() {
return id;}
public void setId(int i) {
id = i; }
getter and setter for all columns
PersonDAO and Jdbc_PersonDAO
package net.jdj.coffee.dao;
...
public interface PersonDAO {
public List<Person> listAll(int startPage, int pageSize);
public int PersonCount();
}
package net.jdj.coffee.dao;
...
public class Jdbc_PersonDAO implements PersonDAO {
/** Logger for this class and subclasses */
protected final Log logger = LogFactory.getLog(getClass());
private SimpleJdbcTemplate simpleJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);}
public List<Person> listAll(int startPage, int pageSize) {
int temp = startPage * pageSize;
String upit = "select id, name, address, gender, dob, email, mobile, phone from PERSON " +
"where id >= " + startPage + " and id < " + temp;
List<Person> persons = new ArrayList<Person>();
List<Map<String, Object>> rows = simpleJdbcTemplate.queryForList(upit);
for (Map<String, Object> row : rows){
Person person = new Person();
person.setId((Integer)(row.get("ID")));
person.setName((String)(row.get("NAME")));
person.setAddress((String)(row.get("ADDRESS")));
person.setGender((String)(row.get("GENDER")));
person.setDob((Date)(row.get("DOB")));
person.setEmail((String)(row.get("EMAIL")));
person.setMobile((String)(row.get("MOBILE")));
person.setPhone((String)(row.get("PHONE")));
persons.add(person); }
return persons;}
public int PersonCount() {
return 5;}
}
PersonService
package net.jdj.coffee.service;
public interface PersonService extends Serializable{ ...}
Simple_PersonService
package net.jdj.coffee.service;
public class Simple_PersonService implements PersonService {
/** Logger for this class and subclasses */
protected final Log logger = LogFactory.getLog(getClass());
// This a unique number that will be used during serialization
private static final long serialVersionUID = 130220121406L;
private PersonDAO personDAO;
public void setpersonDAO(PersonDAO personDAO) {
this.personDAO = personDAO; }
@Transactional
public List<Person> getPersonAll(int startPage, int pageSize) {
return personDAO.listAll(startPage, pageSize); }
@Transactional
public int getPersonCount() {
return personDAO.PersonCount(); }
}
PersonPagedView
package net.jdj.coffee.service;
public class PersonPagedView {
protected final Log logger = LogFactory.getLog(getClass());
@Autowired
private NavigationInfo navInfo = new NavigationInfo();
public NavigationInfo getNavigationInfo() {
return navInfo; }
public void setNavigationInfo(NavigationInfo navInfo) {
this.navInfo = navInfo; }
private List<Person> persons;
public List<Person> getPersons() {
return persons; }
public void setPersons(List<Person> persons) {
this.persons = persons; }
public Person getPerson(int i) {
return (Person) persons.get(i); }
public void setCentralniPlan(int i, Person person) {
this.persons.add(i, person); }
}
PersonController
package net.jdj.coffee.web;
@Controller
public class PersonController {
protected final Log logger = LogFactory.getLog(getClass());
private PersonService personService;
public void setpersonService(PersonService personService) {
this.personService = personService; }
@RequestMapping("/person.htm")
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Date now = new java.util.Date();
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String formatiranNow = sdf.format(now);
Map<String, Object> myModel = new HashMap<String, Object>();
myModel.put("now", formatiranNow);
PersonPagedView pv = new PersonPagedView();
int brojRedova = this.personService.getPersonCount();
pv.getNavigationInfo().setRowCount(brojRedova);
String page = (String)request.getParameter("page");
if (null == page)
pv.getNavigationInfo().setCurrentPage(0);
else
pv.getNavigationInfo().setCurrentPage(Integer.pars eInt(page));
pv.setPersons(this.personService.getPersonAll(
pv.getNavigationInfo().getCurrentPage(), pv.getNavigationInfo().getPageSize()));
request.getSession().setAttribute("pagedPerson", pv);
myModel.put("pagedPerson", pv);
return new ModelAndView("Person", "model", myModel); }
}
NavigationInfo is example from internet:
package net.jdj.coffee.navigation;
public class NavigationInfo {
protected final Log logger = LogFactory.getLog(getClass());
private int currentPage;
private int pageSize;
private int rowCount;
private int maxIndices;
public NavigationInfo() {
currentPage = 0;
rowCount = 0;
maxIndices= 5;
pageSize = 5;
}
public int getCurrentPage() { }
public void setCurrentPage(int currentPage) { }
public int getPageSize(){ }
public void setPageSize(int pageSize) { }
public int getRowCount(){ }
public void setRowCount(int rowCount) { }
public int getMaxIndices(){ }
public void setMaxIndices(int maxIndices) { }
public int getPageCount(){ }
public int getPrevIndex(){ }
public int getNextIndex(){ }
public boolean isFirstPage(){ }
public boolean isLastPage{ }
public int[] getIndexList{ }
public int[] getIndexRange(){ }
Error:
HTTP Status 500 -
________________________________________
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletExceptio n: Request processing failed; nested exception is java.lang.NullPointerException
org.springframework.web.servlet.FrameworkServlet.p rocessRequest(FrameworkServlet.java:656)
org.springframework.web.servlet.FrameworkServlet.d oGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet .java:617)
javax.servlet.http.HttpServlet.service(HttpServlet .java:717)
root cause
java.lang.NullPointerException
net.jdj.coffee.web.PersonController.handleRequest( PersonController.java:47)
sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
org.springframework.web.bind.annotation.support.Ha ndlerMethodInvoker.invokeHandlerMethod(HandlerMeth odInvoker.java:176)
org.springframework.web.servlet.mvc.annotation.Ann otationMethodHandlerAdapter.invokeHandlerMethod(An notationMethodHandlerAdapter.java:426)
org.springframework.web.servlet.mvc.annotation.Ann otationMethodHandlerAdapter.handle(AnnotationMetho dHandlerAdapter.java:414)
org.springframework.web.servlet.DispatcherServlet. doDispatch(DispatcherServlet.java:790)
org.springframework.web.servlet.DispatcherServlet. doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.p rocessRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.d oGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet .java:617)
javax.servlet.http.HttpServlet.service(HttpServlet .java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.35 logs.
In PersonController.java 47 is int brojRedova = this.personService.getPersonCount();
What is wrong with this.personService?
Please, I am new in web, Spring and Java, I worked in Delphi, C#, Oracle but this example is very important for me. I am trying with examples from internet for last two months and everything seams ok but something is uncorrect. Sorry for my English.
Thanks, Ela
I want to use HSQLDB, I do not want to use Hibernate or any framework, the JDBC will be adequate on it's own.
I have pasted the details shown below in the CoffeeShop-servlet.xml and applicationContext.xml files, classes and error message. I am not sure if I am missing something simple!
CoffeeShop-servlet.xml:
<bean name="/person.htm" class="net.jdj.coffee.web.PersonController">
<property name="personService" ref="myPersonService"/>
</bean>
applicationContext.xml:
< bean id="myPersonDAO" class=" net.jdj.coffee.dao.Jdbc_PersonDAO">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="myPersonService" class="net.jdj.coffee.service.Simple_PersonService">
<property name="personDAO" ref="myPersonDAO"/>
</bean>
Person.java
...
@Entity
@Table(name="PERSON")
public class Person implements Serializable {
// This a unique number that will be used during serialization
private static final long serialVersionUID = 210120121345L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column private String name;
@Column private String address;
...
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);}
//setters & getters
public int getId() {
return id;}
public void setId(int i) {
id = i; }
getter and setter for all columns
PersonDAO and Jdbc_PersonDAO
package net.jdj.coffee.dao;
...
public interface PersonDAO {
public List<Person> listAll(int startPage, int pageSize);
public int PersonCount();
}
package net.jdj.coffee.dao;
...
public class Jdbc_PersonDAO implements PersonDAO {
/** Logger for this class and subclasses */
protected final Log logger = LogFactory.getLog(getClass());
private SimpleJdbcTemplate simpleJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);}
public List<Person> listAll(int startPage, int pageSize) {
int temp = startPage * pageSize;
String upit = "select id, name, address, gender, dob, email, mobile, phone from PERSON " +
"where id >= " + startPage + " and id < " + temp;
List<Person> persons = new ArrayList<Person>();
List<Map<String, Object>> rows = simpleJdbcTemplate.queryForList(upit);
for (Map<String, Object> row : rows){
Person person = new Person();
person.setId((Integer)(row.get("ID")));
person.setName((String)(row.get("NAME")));
person.setAddress((String)(row.get("ADDRESS")));
person.setGender((String)(row.get("GENDER")));
person.setDob((Date)(row.get("DOB")));
person.setEmail((String)(row.get("EMAIL")));
person.setMobile((String)(row.get("MOBILE")));
person.setPhone((String)(row.get("PHONE")));
persons.add(person); }
return persons;}
public int PersonCount() {
return 5;}
}
PersonService
package net.jdj.coffee.service;
public interface PersonService extends Serializable{ ...}
Simple_PersonService
package net.jdj.coffee.service;
public class Simple_PersonService implements PersonService {
/** Logger for this class and subclasses */
protected final Log logger = LogFactory.getLog(getClass());
// This a unique number that will be used during serialization
private static final long serialVersionUID = 130220121406L;
private PersonDAO personDAO;
public void setpersonDAO(PersonDAO personDAO) {
this.personDAO = personDAO; }
@Transactional
public List<Person> getPersonAll(int startPage, int pageSize) {
return personDAO.listAll(startPage, pageSize); }
@Transactional
public int getPersonCount() {
return personDAO.PersonCount(); }
}
PersonPagedView
package net.jdj.coffee.service;
public class PersonPagedView {
protected final Log logger = LogFactory.getLog(getClass());
@Autowired
private NavigationInfo navInfo = new NavigationInfo();
public NavigationInfo getNavigationInfo() {
return navInfo; }
public void setNavigationInfo(NavigationInfo navInfo) {
this.navInfo = navInfo; }
private List<Person> persons;
public List<Person> getPersons() {
return persons; }
public void setPersons(List<Person> persons) {
this.persons = persons; }
public Person getPerson(int i) {
return (Person) persons.get(i); }
public void setCentralniPlan(int i, Person person) {
this.persons.add(i, person); }
}
PersonController
package net.jdj.coffee.web;
@Controller
public class PersonController {
protected final Log logger = LogFactory.getLog(getClass());
private PersonService personService;
public void setpersonService(PersonService personService) {
this.personService = personService; }
@RequestMapping("/person.htm")
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Date now = new java.util.Date();
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String formatiranNow = sdf.format(now);
Map<String, Object> myModel = new HashMap<String, Object>();
myModel.put("now", formatiranNow);
PersonPagedView pv = new PersonPagedView();
int brojRedova = this.personService.getPersonCount();
pv.getNavigationInfo().setRowCount(brojRedova);
String page = (String)request.getParameter("page");
if (null == page)
pv.getNavigationInfo().setCurrentPage(0);
else
pv.getNavigationInfo().setCurrentPage(Integer.pars eInt(page));
pv.setPersons(this.personService.getPersonAll(
pv.getNavigationInfo().getCurrentPage(), pv.getNavigationInfo().getPageSize()));
request.getSession().setAttribute("pagedPerson", pv);
myModel.put("pagedPerson", pv);
return new ModelAndView("Person", "model", myModel); }
}
NavigationInfo is example from internet:
package net.jdj.coffee.navigation;
public class NavigationInfo {
protected final Log logger = LogFactory.getLog(getClass());
private int currentPage;
private int pageSize;
private int rowCount;
private int maxIndices;
public NavigationInfo() {
currentPage = 0;
rowCount = 0;
maxIndices= 5;
pageSize = 5;
}
public int getCurrentPage() { }
public void setCurrentPage(int currentPage) { }
public int getPageSize(){ }
public void setPageSize(int pageSize) { }
public int getRowCount(){ }
public void setRowCount(int rowCount) { }
public int getMaxIndices(){ }
public void setMaxIndices(int maxIndices) { }
public int getPageCount(){ }
public int getPrevIndex(){ }
public int getNextIndex(){ }
public boolean isFirstPage(){ }
public boolean isLastPage{ }
public int[] getIndexList{ }
public int[] getIndexRange(){ }
Error:
HTTP Status 500 -
________________________________________
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletExceptio n: Request processing failed; nested exception is java.lang.NullPointerException
org.springframework.web.servlet.FrameworkServlet.p rocessRequest(FrameworkServlet.java:656)
org.springframework.web.servlet.FrameworkServlet.d oGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet .java:617)
javax.servlet.http.HttpServlet.service(HttpServlet .java:717)
root cause
java.lang.NullPointerException
net.jdj.coffee.web.PersonController.handleRequest( PersonController.java:47)
sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
org.springframework.web.bind.annotation.support.Ha ndlerMethodInvoker.invokeHandlerMethod(HandlerMeth odInvoker.java:176)
org.springframework.web.servlet.mvc.annotation.Ann otationMethodHandlerAdapter.invokeHandlerMethod(An notationMethodHandlerAdapter.java:426)
org.springframework.web.servlet.mvc.annotation.Ann otationMethodHandlerAdapter.handle(AnnotationMetho dHandlerAdapter.java:414)
org.springframework.web.servlet.DispatcherServlet. doDispatch(DispatcherServlet.java:790)
org.springframework.web.servlet.DispatcherServlet. doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.p rocessRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.d oGet(FrameworkServlet.java:549)
javax.servlet.http.HttpServlet.service(HttpServlet .java:617)
javax.servlet.http.HttpServlet.service(HttpServlet .java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.35 logs.
In PersonController.java 47 is int brojRedova = this.personService.getPersonCount();
What is wrong with this.personService?
Please, I am new in web, Spring and Java, I worked in Delphi, C#, Oracle but this example is very important for me. I am trying with examples from internet for last two months and everything seams ok but something is uncorrect. Sorry for my English.
Thanks, Ela