Correction de updateArticle :

Passage de tout article en transactions
This commit is contained in:
2008-02-07 18:03:06 +00:00
parent 1740c0275b
commit 6b17649c08
2 changed files with 570 additions and 443 deletions

View File

@@ -3,7 +3,6 @@ package org.yacos.core.article;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.EnumType; import javax.persistence.EnumType;
@@ -16,10 +15,8 @@ import javax.persistence.JoinTable;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import org.yacos.core.conferences.Conference; import org.yacos.core.conferences.Conference;
import org.yacos.core.evaluation.Report; import org.yacos.core.evaluation.Report;
import org.yacos.core.users.Role;
import org.yacos.core.users.User; import org.yacos.core.users.User;
@Entity @Entity
@@ -183,17 +180,17 @@ public class Article implements Serializable {
public void setPcMembers(List<User> pcMembers) { public void setPcMembers(List<User> pcMembers) {
this.pcMembers = pcMembers; this.pcMembers = pcMembers;
} }
public void addPCMember(User pcMember){ // public void addPCMember(User pcMember){
if(! pcMembers.contains(pcMember)){ // if(! pcMembers.contains(pcMember)){
pcMembers.add(pcMember); // pcMembers.add(pcMember);
} // }
} // }
//
public void removePCMember(User pcMember){ // public void removePCMember(User pcMember){
if(pcMembers.contains(pcMember)){ // if(pcMembers.contains(pcMember)){
pcMembers.remove(pcMember); // pcMembers.remove(pcMember);
} // }
} // }
public void delegateTo(User referee, User pcMember) { public void delegateTo(User referee, User pcMember) {
/* if(pcMembers.contains(pcMember)){ /* if(pcMembers.contains(pcMember)){

View File

@@ -4,6 +4,7 @@ import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
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.TransactionManagement;
import javax.ejb.TransactionManagementType; import javax.ejb.TransactionManagementType;
@@ -11,15 +12,24 @@ import javax.persistence.EntityManager;
import javax.persistence.NoResultException; import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.Query; import javax.persistence.Query;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import org.yacos.core.article.Article.State; import org.yacos.core.article.Article.State;
import org.yacos.core.article.Preference.PreferenceType; import org.yacos.core.article.Preference.PreferenceType;
import org.yacos.core.conferences.Conference; import org.yacos.core.conferences.Conference;
import org.yacos.core.exceptions.ConferenceDoesntExistException; import org.yacos.core.exceptions.ConferenceDoesntExistException;
import org.yacos.core.users.Role;
import org.yacos.core.users.RolePK;
import org.yacos.core.users.User; import org.yacos.core.users.User;
import org.yacos.core.users.Role.RoleType;
@Stateless @Stateless
@TransactionManagement(TransactionManagementType.CONTAINER) @TransactionManagement(TransactionManagementType.BEAN)
public class ArticleManagerBean implements IArticleManager, Serializable { public class ArticleManagerBean implements IArticleManager, Serializable {
/** /**
@@ -30,35 +40,82 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
@Resource
private UserTransaction ut;
public ArticleManagerBean() { public ArticleManagerBean() {
} }
public Article addArticle(String title, String topic,String url_article, public Article addArticle(String title, String topic,String url_article,
String mainAuthorLogin, ArrayList<String> secondaryAuthors, State state,Integer conferenceId) { String mainAuthorLogin, ArrayList<String> secondaryAuthors, State state,Integer conferenceId) {
Article a = new Article();
a.setTitle(title); try {
a.setTopic(topic); ut.begin();
a.setURL_article(url_article); Article a = new Article();
User mainAuthor = em.find(User.class,mainAuthorLogin); a.setTitle(title);
a.setMainAuthor(mainAuthor); a.setTopic(topic);
a.setSecondaryAuthors(secondaryAuthors); a.setURL_article(url_article);
a.setState(state); User mainAuthor = em.find(User.class,mainAuthorLogin);
Conference conference = em.find(Conference.class, conferenceId); a.setMainAuthor(mainAuthor);
a.setConference(conference); a.setSecondaryAuthors(secondaryAuthors);
em.persist(a); a.setState(state);
return a; Conference conference = em.find(Conference.class, conferenceId);
a.setConference(conference);
em.persist(a);
ut.commit();
addRoleForConference(mainAuthorLogin,RoleType.AUTHOR,conferenceId);
return a;
} catch (Exception e) {
try {
ut.rollback();
e.printStackTrace();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return null;
} }
public void updateArticle(Article article) { public void updateArticle(Article article) {
em.merge(article); try {
em.flush(); ut.begin();
Article persistentArticle = em.find(Article.class, article.getId());
persistentArticle.setTitle(article.getTitle());
persistentArticle.setTopic(article.getTopic());
persistentArticle.setMainAuthor(article.getMainAuthor());
persistentArticle.setURL_article(article.getURL_article());
persistentArticle.setState(article.getState());
persistentArticle.setSecondaryAuthors(article.getSecondaryAuthors());
ut.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ut.rollback();
} catch (Exception e) {
e.printStackTrace();
}
}
} }
public void removeArticle(Integer articleId) { public void removeArticle(Integer articleId) {
Article article = this.getArticle(articleId); try {
em.remove(article); ut.begin();
em.flush(); Article article = this.getArticle(articleId);
em.remove(article);
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
} }
public Article getArticle(Integer articleId) { public Article getArticle(Integer articleId) {
@@ -96,23 +153,36 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
} }
public void assignArticleToPCMember(Integer articleId,String memberId){ public void assignArticleToPCMember(Integer articleId,String memberId){
Article article = this.getArticle(articleId); try{
User PCMember = em.find(User.class, memberId); ut.begin();
article.addPCMember(PCMember); Article article = this.getArticle(articleId);
this.updateArticle(article); User PCMember = em.find(User.class, memberId);
article.getPcMembers().add(PCMember);
ut.commit();
this.updateArticle(article);
} catch (Exception e) {
try{
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
//article.addPCMember(PCMember);
} }
public void unassignArticleToPCMember(Integer articleId,String memberId){ public void unassignArticleToPCMember(Integer articleId,String memberId){
Article article = this.getArticle(articleId); Article article = this.getArticle(articleId);
User PCMember = em.find(User.class, memberId); User PCMember = em.find(User.class, memberId);
article.removePCMember(PCMember); article.getPcMembers().remove(PCMember);
//article.removePCMember(PCMember);
this.updateArticle(article); this.updateArticle(article);
} }
public List<User> getArticlePCMembers(Integer articleId) { public List<User> getArticlePCMembers(Integer articleId) {
Article article = this.getArticle(articleId); Article article = this.getArticle(articleId);
List<User> users = (List<User>)article.getPcMembers(); List<User> users = (List<User>)article.getPcMembers();
return users; return users;
} }
public void delegateArticleToReferee(Integer articleId, String refereeId, String memberId){ public void delegateArticleToReferee(Integer articleId, String refereeId, String memberId){
@@ -131,26 +201,58 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
public Preference addPreference(Integer article_id, String userLogin,PreferenceType preferenceType){ public Preference addPreference(Integer article_id, String userLogin,PreferenceType preferenceType){
Preference preference = new Preference(); try{
Article article = getArticle(article_id); ut.begin();
preference.setArticle(article); Preference preference = new Preference();
User pcMember = em.find(User.class, userLogin); Article article = getArticle(article_id);
preference.setPcMember(pcMember); preference.setArticle(article);
preference.setPreferenceType(preferenceType); User pcMember = em.find(User.class, userLogin);
em.persist(preference); preference.setPcMember(pcMember);
em.flush(); preference.setPreferenceType(preferenceType);
return preference; em.persist(preference);
ut.commit();
return preference;
} catch(Exception e){
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
return null;
} }
public void removePreference(Integer article_id, String userLogin){ public void removePreference(Integer article_id, String userLogin){
Preference pref = this.getPreferenceForUserAndArticle(article_id, userLogin); try{
em.remove(pref); ut.begin();
Preference pref = this.getPreferenceForUserAndArticle(article_id, userLogin);
em.remove(pref);
ut.commit();
} catch (Exception e) {
try{
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
} }
public void updatePreference(Preference preference){ public void updatePreference(Preference preference){
em.merge(preference); try{
em.flush(); ut.begin();
Preference persistedPreference = em.find(Preference.class, preference.getId());
persistedPreference.setPreferenceType(preference.getPreferenceType());
ut.commit();
} catch (Exception e) {
try{
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
} }
public Preference getPreferenceForUserAndArticle(Integer article_id, String pcMemberLogin){ public Preference getPreferenceForUserAndArticle(Integer article_id, String pcMemberLogin){
@@ -180,6 +282,34 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
return em.find(Preference.class, preference.getId())!=null; return em.find(Preference.class, preference.getId())!=null;
} }
public boolean hasUserRoleForConference(String userLogin, RoleType roleType, Integer conferenceId){
Conference conference = em.find(Conference.class, conferenceId);
User user = em.find(User.class, userLogin);
RolePK rolePK = new RolePK(user,roleType,conference);
return em.find(Role.class, rolePK)!=null;
}
private void addRoleForConference(String userLogin, RoleType roleType, Integer conferenceId) {
Conference conference = em.find(Conference.class, conferenceId);
User user = em.find(User.class, userLogin);
if(! hasUserRoleForConference(userLogin, RoleType.AUTHOR, conferenceId)){
Role role = new Role();
role.setUser(user);
role.setType(roleType);
role.setConference(conference);
try{
ut.begin();
em.persist(role);
ut.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public EntityManager getEntityManager() { public EntityManager getEntityManager() {
return em; return em;
} }