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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.