Ajout des transactions dans ConferenceManagerBean
Ajout des conferenceCreationToken
Corrections diverses
This commit is contained in:
2008-02-15 10:08:51 +00:00
parent 46f144e03e
commit 21ee0e7096
7 changed files with 415 additions and 128 deletions

View File

@@ -229,8 +229,8 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
.setParameter("article", article) .setParameter("article", article)
.setParameter("referee", referee) .setParameter("referee", referee)
.setParameter("pcMember", PCMember); .setParameter("pcMember", PCMember);
@SuppressWarnings("unused")
int affectedRows = query.executeUpdate(); int affectedRows = query.executeUpdate();
System.out.println("Affected Rows :"+affectedRows);
ut.commit(); ut.commit();
} catch (Exception e) { } catch (Exception e) {
try{ try{

View File

@@ -10,13 +10,16 @@ import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType; import javax.persistence.GenerationType;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal; import javax.persistence.Temporal;
import javax.persistence.TemporalType; import javax.persistence.TemporalType;
import org.yacos.core.article.Article; import org.yacos.core.article.Article;
import org.yacos.core.evaluation.Criterion; import org.yacos.core.evaluation.Criterion;
import org.yacos.core.users.Role; import org.yacos.core.users.Role;
import org.yacos.core.users.User;
@Entity @Entity
@@ -44,40 +47,37 @@ public class Conference implements Serializable{
/** /**
* Roles of users for this conference * Roles of users for this conference
*/ */
@OneToMany(targetEntity=Role.class,mappedBy="conference") @OneToMany(targetEntity=Role.class,mappedBy="conference",cascade={CascadeType.ALL})
private List<Role> roles; private List<Role> roles;
/* @OneToOne(targetEntity=User.class,optional=true) @OneToOne(targetEntity=User.class,optional=false)
@JoinColumn(name="chairman_id",nullable=true) @JoinColumn(name="chairman_id",nullable=false)
private User chairman; private User chairman;
*/
@OneToMany(targetEntity=Article.class,mappedBy="conference") @OneToMany(targetEntity=Article.class,mappedBy="conference")
private List<Article> articles; private List<Article> articles;
@OneToMany(targetEntity=Criterion.class,mappedBy="conference",cascade=CascadeType.ALL) @OneToMany(targetEntity=Criterion.class,mappedBy="conference",cascade=CascadeType.ALL)
private List<Criterion> criterions; private List<Criterion> criterions;
/*
/** /**
* @return the chairman * @return the chairman
*/ */
/*
@OneToOne(targetEntity=User.class,optional=true) @OneToOne(targetEntity=User.class,optional=true)
@JoinColumn(name="chairman_id",nullable=true) @JoinColumn(name="chairman_id",nullable=true)
public User getChairman() { public User getChairman() {
return chairman; return chairman;
} }
*/
/** /**
* @param chairman the chairman to set * @param chairman the chairman to set
*/ */
/*
@OneToOne(targetEntity=User.class,optional=true) @OneToOne(targetEntity=User.class,optional=true)
@JoinColumn(name="chairman_id",nullable=true) @JoinColumn(name="chairman_id",nullable=true)
public void setChairman(User chairman) { public void setChairman(User chairman) {
this.chairman = chairman; this.chairman = chairman;
} }
*/
@Temporal(TemporalType.DATE) @Temporal(TemporalType.DATE)
public Date getDateAbstract() { public Date getDateAbstract() {
return dateAbstract; return dateAbstract;
@@ -179,12 +179,12 @@ public class Conference implements Serializable{
/* /*
* roles * roles
*/ */
@OneToMany(targetEntity=Role.class,mappedBy="conference") @OneToMany(targetEntity=Role.class,mappedBy="conference",cascade={CascadeType.ALL})
public List<Role> getRoles() { public List<Role> getRoles() {
return roles; return roles;
} }
@OneToMany(targetEntity=Role.class,mappedBy="conference") @OneToMany(targetEntity=Role.class,mappedBy="conference",cascade={CascadeType.ALL})
public void setRoles(List<Role> roles) { public void setRoles(List<Role> roles) {
this.roles = roles; this.roles = roles;
} }

View File

@@ -3,14 +3,17 @@ package org.yacos.core.conferences;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import javax.annotation.Resource;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.Query; import javax.persistence.Query;
import javax.transaction.UserTransaction;
import org.yacos.core.evaluation.Criterion; import org.yacos.core.evaluation.Criterion;
import org.yacos.core.exceptions.ConferenceDoesntExistException; import org.yacos.core.exceptions.ConferenceDoesntExistException;
import org.yacos.core.exceptions.NoConferenceCreationTokenLeftException;
import org.yacos.core.system.InvitationToken; import org.yacos.core.system.InvitationToken;
import org.yacos.core.system.InvitationTokenPK; import org.yacos.core.system.InvitationTokenPK;
import org.yacos.core.users.Role; import org.yacos.core.users.Role;
@@ -20,14 +23,42 @@ import org.yacos.core.users.Role.RoleType;
@Stateless @Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class ConferenceManagerBean implements IConferenceManager { public class ConferenceManagerBean implements IConferenceManager {
@PersistenceContext @PersistenceContext
EntityManager em; EntityManager em;
@Resource
UserTransaction ut;
public Conference addConference(String titre, String descirption, String infoComplementray, Date dataAbstract, Date dateArticle, Date dateEvaluation, Date dateStart, Date dateEnd) { public Conference addConference(
Conference conf = new Conference(titre, descirption, infoComplementray, dataAbstract, dateArticle, dateEvaluation, dateStart, dateEnd); String titre,
String chairmanLogin,
String description,
String complementaryInfo,
Date dataAbstract,
Date dateArticle,
Date dateEvaluation,
Date dateStart,
Date dateEnd) throws NoConferenceCreationTokenLeftException {
Conference conf = new Conference(titre, description, complementaryInfo, dataAbstract, dateArticle, dateEvaluation, dateStart, dateEnd);
if( ! canCreateConference(chairmanLogin)){
throw new NoConferenceCreationTokenLeftException();
}
try {
ut.begin();
User chairman = em.find(User.class, chairmanLogin);
em.persist(conf); em.persist(conf);
em.flush(); conf.setChairman(chairman);
chairman.setConferenceCreationTokens(chairman.getConferenceCreationTokens()-1);
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
return conf; return conf;
} }
@@ -36,14 +67,40 @@ public class ConferenceManagerBean implements IConferenceManager {
} }
public void remove(Integer conferenceId) { public void remove(Integer conferenceId) {
try {
ut.begin();
Conference persistedConf = em.find(Conference.class, conferenceId); Conference persistedConf = em.find(Conference.class, conferenceId);
em.remove(persistedConf); em.remove(persistedConf);
em.flush(); ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} }
public void update(Conference conf) { public void update(Conference conf) {
em.merge(conf); try {
em.flush(); ut.begin();
Conference persistedConf = em.find(Conference.class, conf.getId());
persistedConf.setDateAbstract(conf.getDateAbstract());
persistedConf.setDateArticle(conf.getDateArticle());
persistedConf.setDateEnd(conf.getDateEnd());
persistedConf.setDateEvaluation(conf.getDateEvaluation());
persistedConf.setDateStart(conf.getDateStart());
persistedConf.setOtherInformations(conf.getOtherInformations());
persistedConf.setTitle(conf.getTitle());
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -73,30 +130,80 @@ public class ConferenceManagerBean implements IConferenceManager {
* */ * */
public Role addRole(Role.RoleType roleType, String login, Integer confId) { public Role addRole(Role.RoleType roleType, String login, Integer confId) {
try {
ut.begin();
User user = em.find(User.class, login); User user = em.find(User.class, login);
Conference conf = em.find(Conference.class, confId); Conference conf = em.find(Conference.class, confId);
Role role = new Role(roleType, user, conf); Role role = new Role(roleType, user, conf);
em.persist(role); em.persist(role);
em.flush(); ut.commit();
return role; return role;
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
return null;
} }
public void removeRole(Role role) { public void removeRole(Role role) {
em.remove(role); try {
em.flush(); ut.begin();
RolePK rolePk = new RolePK(
role.getUser(),
role.getType(),
role.getConference());
Role rolePersisted = em.find(Role.class, rolePk);
em.remove(rolePersisted);
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} }
public void removePCMemberForConf(Integer confId) { public void removePCMemberForConf(Integer confId) {
try {
ut.begin();
Conference conf = em.find(Conference.class, confId); Conference conf = em.find(Conference.class, confId);
Query query = em.createQuery("delete from Role where conference=? and type=?"); Query query = em.createQuery("delete from Role where conference=? and type=?");
query.setParameter(1, conf); query.setParameter(1, conf);
query.setParameter(2, RoleType.PCMEMBER); query.setParameter(2, RoleType.PCMEMBER);
query.executeUpdate(); query.executeUpdate();
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} }
public void updateRole(Role role){ public void updateRole(Role role){
em.merge(role); try {
em.flush(); ut.begin();
RolePK rolePk = new RolePK(
role.getUser(),
role.getType(),
role.getConference());
Role rolePersisted = em.find(Role.class, rolePk);
rolePersisted.setUser(role.getUser());
rolePersisted.setType(role.getType());
rolePersisted.setConference(role.getConference());
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -148,20 +255,40 @@ public class ConferenceManagerBean implements IConferenceManager {
InvitationToken newToken = em.find(InvitationToken.class, tokenPK); InvitationToken newToken = em.find(InvitationToken.class, tokenPK);
if(newToken == null){ if(newToken == null){
try {
ut.begin();
newToken = new InvitationToken(); newToken = new InvitationToken();
newToken.setEmail(email); newToken.setEmail(email);
newToken.setRole(role); newToken.setRole(role);
newToken.setConference(conf); newToken.setConference(conf);
em.persist(newToken); em.persist(newToken);
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} }
return newToken; return newToken;
} }
public void removeInvitationToken(InvitationToken token) { public void removeInvitationToken(InvitationToken token) {
try {
ut.begin();
token = em.find(InvitationToken.class, token.getId()); token = em.find(InvitationToken.class, token.getId());
em.remove(token); em.remove(token);
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} }
public InvitationToken getInvitationToken(InvitationTokenPK tokenId) { public InvitationToken getInvitationToken(InvitationTokenPK tokenId) {
@@ -178,26 +305,57 @@ public class ConferenceManagerBean implements IConferenceManager {
public void addCriterionToConference(Integer conferenceId, String name, public void addCriterionToConference(Integer conferenceId, String name,
Integer minRating, Integer maxRating) { Integer minRating, Integer maxRating) {
Conference conf = getConference(conferenceId); try {
ut.begin();
Conference conf = em.find(Conference.class, conferenceId);
Criterion criterion = new Criterion(name,minRating,maxRating,conf); Criterion criterion = new Criterion(name,minRating,maxRating,conf);
em.persist(criterion); em.persist(criterion);
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} }
public void removeCriterionToConference(Integer conferenceId) { public void removeCriterionToConference(Integer conferenceId) {
try {
ut.begin();
Conference conf = em.find(Conference.class, conferenceId); Conference conf = em.find(Conference.class, conferenceId);
Query query = em.createQuery("delete from Criterion where conference=?"); Query query = em.createQuery("delete from Criterion where conference=?");
query.setParameter(1, conf); query.setParameter(1, conf);
query.executeUpdate(); query.executeUpdate();
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} }
public void removeOneCriterionToConference(Criterion criterion) { public void removeOneCriterionToConference(Criterion criterion) {
try {
ut.begin();
em.remove(criterion); em.remove(criterion);
em.flush(); ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} }
public void addPCMemberToConference(Integer conferenceId, String userLogin) { public void addPCMemberToConference(Integer conferenceId, String userLogin) {
Conference conf = getConference(conferenceId); try {
ut.begin();
Conference conf = em.find(Conference.class,conferenceId);
User member = em.find(User.class, userLogin); User member = em.find(User.class, userLogin);
// First checks if the role already exists, if not create it // First checks if the role already exists, if not create it
@@ -209,6 +367,73 @@ public class ConferenceManagerBean implements IConferenceManager {
memberRole.setConference(conf); memberRole.setConference(conf);
em.persist(memberRole); em.persist(memberRole);
} }
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} }
public void addConferenceCreationToken(String userLogin) {
try {
ut.begin();
User user = em.find(User.class,userLogin);
if(user != null){
user.setConferenceCreationTokens(
user.getConferenceCreationTokens()+1);
}
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public boolean canCreateConference(String userLogin) {
return conferenceCreationTokens(userLogin)>0;
}
public Integer conferenceCreationTokens(String userLogin) {
User user = em.find(User.class,userLogin);
if(user == null){
return 0;
}
return user.getConferenceCreationTokens();
}
public void useConferenceCreationToken(String userLogin) throws NoConferenceCreationTokenLeftException {
try {
ut.begin();
User user = em.find(User.class,userLogin);
if(user != null){
Integer tokensLeft = user.getConferenceCreationTokens();
if(tokensLeft>0){
user.setConferenceCreationTokens(tokensLeft-1);
} else {
throw new NoConferenceCreationTokenLeftException();
}
}
ut.commit();
} catch (NoConferenceCreationTokenLeftException e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
throw e;
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
} }

View File

@@ -7,6 +7,7 @@ import javax.ejb.Remote;
import org.yacos.core.evaluation.Criterion; import org.yacos.core.evaluation.Criterion;
import org.yacos.core.exceptions.ConferenceDoesntExistException; import org.yacos.core.exceptions.ConferenceDoesntExistException;
import org.yacos.core.exceptions.NoConferenceCreationTokenLeftException;
import org.yacos.core.system.InvitationToken; import org.yacos.core.system.InvitationToken;
import org.yacos.core.system.InvitationTokenPK; import org.yacos.core.system.InvitationTokenPK;
import org.yacos.core.users.Role; import org.yacos.core.users.Role;
@@ -17,7 +18,16 @@ import org.yacos.core.users.Role.RoleType;
public interface IConferenceManager { public interface IConferenceManager {
// CRUD methods // CRUD methods
public Conference addConference(String titre, String descirption, String infoComplementray, Date dataAbstract, Date dateArticle, Date dateEvaluation, Date dateStart, Date dateEnd); public Conference addConference(
String titre,
String chairmanLogin,
String description,
String complementaryInfo,
Date dataAbstract,
Date dateArticle,
Date dateEvaluation,
Date dateStart,
Date dateEnd) throws NoConferenceCreationTokenLeftException;
public Conference getConference(Integer id); public Conference getConference(Integer id);
public void addCriterionToConference(Integer conferenceId,String name,Integer minRating, Integer maxRating); public void addCriterionToConference(Integer conferenceId,String name,Integer minRating, Integer maxRating);
public void removeCriterionToConference(Integer conferenceId); public void removeCriterionToConference(Integer conferenceId);
@@ -52,4 +62,26 @@ public interface IConferenceManager {
public List<InvitationToken> getInvitationTokensForConference(Integer conferenceId); public List<InvitationToken> getInvitationTokensForConference(Integer conferenceId);
public InvitationToken addInvitationToken(String email, RoleType role, Integer conferenceId) throws ConferenceDoesntExistException; public InvitationToken addInvitationToken(String email, RoleType role, Integer conferenceId) throws ConferenceDoesntExistException;
public void removeInvitationToken(InvitationToken tokenId); public void removeInvitationToken(InvitationToken tokenId);
// Conference creation tokens handling methods
/**
* @return True if the given user has a conference creation token left, false otherwise
*/
public boolean canCreateConference(String userLogin);
/**
* Use (remove) a conference creation token for the given user
* @param userLogin The user from which to remove a token
*/
public void useConferenceCreationToken(String userLogin) throws NoConferenceCreationTokenLeftException;
/**
* Gets the number of conference creation token left for a given user
* @param userLogin The user
* @return The number of token the user has left
*/
public Integer conferenceCreationTokens(String userLogin);
/**
* Adds a conference creation token to the given user
* @param userLogin The user to which we grant the token
*/
public void addConferenceCreationToken(String userLogin);
} }

View File

@@ -3,6 +3,8 @@ package org.yacos.core.users;
import java.util.List; import java.util.List;
import javax.ejb.Remote; import javax.ejb.Remote;
import org.yacos.core.exceptions.NoConferenceCreationTokenLeftException;
import org.yacos.core.exceptions.PKAlreadyUsedException; import org.yacos.core.exceptions.PKAlreadyUsedException;
import org.yacos.core.exceptions.UserEMailAlreadyExistsException; import org.yacos.core.exceptions.UserEMailAlreadyExistsException;
import org.yacos.core.system.InvitationToken; import org.yacos.core.system.InvitationToken;

View File

@@ -79,6 +79,12 @@ public class User implements Serializable{
@OneToMany(cascade=CascadeType.ALL, targetEntity=Role.class,mappedBy="user") @OneToMany(cascade=CascadeType.ALL, targetEntity=Role.class,mappedBy="user")
private List<Role> roles; private List<Role> roles;
/**
* How many conference can this user create ?
*/
@Column(nullable=false)
private Integer conferenceCreationTokens;
/*@OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="user") /*@OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="user")
private List<Delegation> delegation; private List<Delegation> delegation;
*/ */
@@ -91,10 +97,12 @@ public class User implements Serializable{
this.lastName = lastName; this.lastName = lastName;
this.organization = organization; this.organization = organization;
this.email = email; this.email = email;
this.conferenceCreationTokens = 0;
} }
public User() { public User() {
this.roles = new ArrayList<Role>(); this.roles = new ArrayList<Role>();
this.conferenceCreationTokens = 0;
} }
@Id @Id
@@ -234,6 +242,23 @@ public class User implements Serializable{
this.specialities = specialities; this.specialities = specialities;
} }
/**
* How many conferences can this user create ?
* @return The number of conferences this user can create
*/
@Column(nullable=false)
public Integer getConferenceCreationTokens() {
return conferenceCreationTokens;
}
/**
* Sets the number of conferences this user can create
* @param conferenceCreationTokens The number of conferences this user can create
*/
@Column(nullable=false)
public void setConferenceCreationTokens(Integer conferenceCreationTokens) {
this.conferenceCreationTokens = conferenceCreationTokens;
}
/* /*
@OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="user") @OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="user")
public List<Delegation> getDelegation() { public List<Delegation> getDelegation() {

View File

@@ -5,7 +5,6 @@ package org.yacos.core.users;
import java.util.List; import java.util.List;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.ejb.TransactionManagement; import javax.ejb.TransactionManagement;
@@ -54,19 +53,12 @@ public class UserManagerBean implements IUserManager{
if(this.getByEmail(email) != null){ if(this.getByEmail(email) != null){
throw new UserEMailAlreadyExistsException(email); throw new UserEMailAlreadyExistsException(email);
} }
User user = null;
try{ try{
ut.begin(); ut.begin();
User user = new User(login, password, firstName, lastName, organization, email); user = new User(login, password, firstName, lastName, organization, email);
em.persist(user); em.persist(user);
ut.commit(); ut.commit();
// Existing InvitationToken handling
List<InvitationToken> tokens = getInvitationTokensForEmail(user.getEmail());
for(InvitationToken token : tokens){
useInvitationTokenOnUser(login, token.getId());
}
return user;
} catch (Exception e) { } catch (Exception e) {
try { try {
ut.rollback(); ut.rollback();
@@ -76,9 +68,16 @@ public class UserManagerBean implements IUserManager{
} }
} }
// Existing InvitationToken handling
List<InvitationToken> tokens = getInvitationTokensForEmail(email);
for(InvitationToken token : tokens){
useInvitationTokenOnUser(login, token.getId());
}
return user;
} }
else{ throw new PKAlreadyUsedException(); } else{ throw new PKAlreadyUsedException(); }
return null;
} }
/** /**
@@ -134,6 +133,7 @@ public class UserManagerBean implements IUserManager{
updatedUser.setLastName(user.getLastName()); updatedUser.setLastName(user.getLastName());
updatedUser.setOrganization(user.getOrganization()); updatedUser.setOrganization(user.getOrganization());
updatedUser.setPassword(user.getPassword()); updatedUser.setPassword(user.getPassword());
updatedUser.setConferenceCreationTokens(user.getConferenceCreationTokens());
ut.commit(); ut.commit();
} catch (Exception e) { } catch (Exception e) {
try { try {
@@ -344,12 +344,16 @@ public class UserManagerBean implements IUserManager{
public void useInvitationTokenOnUser(String userLogin, public void useInvitationTokenOnUser(String userLogin,
InvitationTokenPK tokenId) { InvitationTokenPK tokenId) {
InvitationToken token = em.find(InvitationToken.class,tokenId); User user = getUserByEmail(tokenId.email);
addRoleForConference(userLogin, token.getRole(), token.getConference().getId()); if(user==null){
return;
}
try { try {
ut.begin(); ut.begin();
InvitationToken token = em.find(InvitationToken.class,tokenId);
Role role = new Role(token.getRole(),user,token.getConference());
em.remove(token); em.remove(token);
em.persist(role);
ut.commit(); ut.commit();
} catch (Exception e) { } catch (Exception e) {
try { try {
@@ -379,6 +383,7 @@ public class UserManagerBean implements IUserManager{
} }
public User getUserByEmail(String email) { public User getUserByEmail(String email) {
email = email.toLowerCase();
Query query = em.createQuery("from User where email=?"); Query query = em.createQuery("from User where email=?");
query.setParameter(1, email); query.setParameter(1, email);
try{ try{
@@ -388,6 +393,4 @@ public class UserManagerBean implements IUserManager{
return null; return null;
} }
} }
} }