Multi-Tenant en utilisant Spring framwork, JPA EclipseLink et JSF
Bonjour,
Je cherche à rendre une application web multi-tenant séparé par schéma (même base de donnée et un schéma par tenant) .
Technologie utilisées:
JAVA 1.8
JSF2 pour la couche présentation
JPA EclipseLink
Spring framwork4 lie la couche présentation à la couche métier et lie la couche métier a la couche service.
Maven
Et tomcat 8.
Exemple: couche presentation LoginView.java :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| @ManagedBean
@SessionScoped
public class LoginView extends SpringBeanAutowiringSupport implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
String login;
String password;
Integer year;
Utilisateur userConnected;
private List<Menu> lstMenu;
private boolean isLogged;
ResourceBundle bundle1 = ResourceBundle.getBundle("com.targettec.internationalisation.default");
@Autowired
private IUserBusiness userBu;
public LoginView() {
isLogged = false;
}
public String connexion() {
this.userConnected = userBu.findUserbyPasswordlogin(login, password);
FacesContext context = FacesContext.getCurrentInstance();
if (userConnected != null) {
year = DateUtilities.yearfromday();
isLogged = true;
userConnected.setDerniereconnexion(new Date().toString());
userBu.pointerUser(userConnected);
context.getExternalContext().getSessionMap().put("user", userConnected);
lstMenu = new ArrayList<Menu>();
this.getUserMenu(userConnected);
this.getUserFonc(userConnected);
this.sortUserMenu();
return "Reglages_utilisateur?faces-redirect=true";
} else {
isLogged = false;
context.addMessage("Login", new FacesMessage(bundle1.getString("kopassLogin")));
return "loginPanel?faces-redirect=true";
}
} |
couche métier UserBusiness.java :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @Service
public class UserBusiness implements IUserBusiness {
@Autowired
private IUserService userSrv;
public UserBusiness() {
}
@Override
public Utilisateur findUserbyPasswordlogin(String login, String password) {
return userSrv.findUserbyPasswordlogin(login, password);
}
@Override
public Utilisateur findUserByLogin(String login) {
return userSrv.findUserByLogin(login);
}
@Override
public void pointerUser(Utilisateur usr) {
userSrv.modifierUser(usr);
} |
couche service: UserService.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| @Repository
public class UserService extends Service implements IUserService {
public UserService() {
super("Utilisateur.findAll");
// TODO Auto-generated constructor stub
}
@Transactional
public Utilisateur findUserbyPasswordlogin(String login, String password) {
Integer userId;
String req = "SELECT u.idutilisateur FROM Utilisateur u where u.nomutilisateur=:login and u.passwordutilisateur=:password";
try {
this.requeteObjet = em.createQuery(req);
requeteObjet.setParameter("login", login).setParameter("password", password);
userId = (Integer) requeteObjet.getSingleResult();
if (userId != null) {
return this.getConnectedUser(userId);
} else {
return null;
}
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
} |
j'ai vu un article intéressant dans ce sens : http://tricks-on-java-development.bl...nd-spring.html
seulement je ne comprends pas pour quoi il gère la couche service manuellement. j'aimerais suivre le même exemple en modifiant la couche service pour que spring framework gère l'injection des classe service et jsf pour la couche présentation au lieu de spring MVC.
Je vous remercie pour votre aide.