I am trying to create a registration page by integrating Struts 2 & Hibernate. But when I am running the below code , I am getting a null pointer exception when I click
You misunderstand the DAO/DTO pattern. DAO/DTOs should not be static. And the sessionFactory
better build normally only once per application, because it's time consuming procedure.
Better for you to implement a session per thread pattern. Write the class HibernateUtil
to build the sessionFactory
and get the session.
Then your DAO will look like
public class UserDao {
public Session getSession() {
return HibernateUtil.getSession();
}
public void closeSession() {
HibernateUtil.closeSession();
}
public void addUser(User u) {
Session session = getSession();
Transaction t = session.beginTransaction();
int i = (Integer)session.save(u);
t.commit();
closeSession();
}
}
in the action you write
private UserDao userDao = new UserDao();
public String execute() throws Exception {
User u = new User();
u.setAddress(address);
u.setEmail(email);
u.setName(name);
u.setPhno(phno);
u.setPwd(pwd);
userDao.addUser(u);
return "success";
}
In the class RegisterAction
, you called the static method UserDao.addUser(u)
. The sf
field of the UserDao
class is only initialized when you call the constructor of UserDao
, but in your case, the constructor is never called => the sf
is never initialized thats why calling sf.openSession();
throws a NullPointerException()
;
You should initialize sf
before calling one of its method.
Note that it is a very bad practice to initialize a static field in a no static and/or a no synchronized method.