I need when I click on "Log out" to close the session of the user connected, so for That I was thinking about improving my bean and improving my closeSession()
method which I will invoke it when I click on "Log out".
this is my profile.xhtml :
<h:html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<div>
<h:form>
<p:row>
<p:column>
<p:menuButton value="#{user.name}">
<p:menuitem value="log out" action="#{user.closeSession}"/>
</p:menuButton>
</p:column>
</p:row>
</h:form>
</div>
</h:body>
</h:html>
This is my Bean User :
@ManagedBean(name="user")
@RequestScoped
public class User {
private int id;
private String name;
@Column(unique=true)
private String email;
private String password;
private String confirmationPass;
// private image
public User() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getConfirmationPass() {
return confirmationPass;
}
public void setConfirmationPass(String confirmationPass) {
this.confirmationPass = confirmationPass;
}
public User(int id, String name, String email, String password,
String confirmationPass) {
super();
this.id = id;
this.name = name;
this.email = email;
this.password = password;
this.confirmationPass = confirmationPass;
}
public User(int id, String name, String email, String password) {
super();
this.id = id;
this.name = name;
this.email = email;
this.password = password;
}
public User(String name, String email, String password) {
super();
this.name = name;
this.email = email;
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", Name=" + name + ", email=" + email
+ ", password=" + password + "]";
}
public String save(){
UserBusiness userBusiness = new UserBusinessImp();
userBusiness.add(new User(name, email,password));
return "profile";
}
public void closeSession(){
//I would like to close the session of the user when he click on Log out
}
And my business Layer consitute of :
UserBusiness interface :
public interface UserBusiness {
**public void add(User user);**
}
And UserBusinessImp which implements UserBusiness interface :
public class UserBusinessImp implements UserBusiness{
public void add(User user) {
UserDao userDao = new UserDaoMysql();
userDao.insert(user);
}
}
And DAO layer constitute of :
UserDao interface :
public interface UserDao {
public void insert(User user);
}
And UserDaoMysql class which implements UserDao interface :
public class UserDaoMysql implements UserDao {
private Session session;
private void openSession(){
SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
session.beginTransaction();
}
private void closeSession(){
session.getTransaction().commit();
session.close();
}
public void insert(User user) {
try {
openSession();
User p = new User(user.getName(), user.getEmail(), user.getPassword());
session.save(p);
System.out.println("sauvegarde reussi");
closeSession();
}
catch (ConstraintViolationException e) {
System.out.println("> email is already used");
FacesMessage msg = new FacesMessage("Your email is already used !");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
}
This is one class util which called HibernateUtil :
public class HibernateUtil {
private static SessionFactory sessionFactory = buildSessionFactory();
private static ServiceRegistry serviceRegistry;
private static SessionFactory buildSessionFactory() {
try {
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
getSessionFactory().close();
}
}
Remark : I am using MySQL as a database.
Anyone could help me please ! Thanks in advance.