Bonjour, je réalise une appli avec struts, spring, hibernate.
C'est ma première appli avec spring et j'ai un peu du mal à voir comment déclarer mes beans (sachant que l'architecture des classes est assez compliquée (du moins pour moi) car j'ai reprise celle d'un exemple que j'ai trouvé sur le même type d'architecture).
Voila donc l'organisation de mon appli ou ma seule action pour l'instant est une recherche de login dans ma base de donnée :
- Une jsp affiche un formulaire login/password. (struts)
- l'action fais appel à une interface iLoginService.
- Une classe LoginServiceSpringImpl implémente cette interface.
- Celle-çi contient à son tour une interface ILoginDAO qui est implémentée par une classe LoginHibernateDAO (classe ou la recherche en bdd s'effectue).
Cette architecture est assez complexe mais apparemment permet de bien séparé chaque couche du modèle MVC et chaque service.
Pb: je n'arrive pas à faire marcher çà car je ne sais pas quoi déclarer comme bean dans mon fichier de config spring où seul une sessionfactory et un transactionmanager sont déja définit pour l'instant :
Déja là pouvez-vous me dire qu'est-ce qu'il faut déclarer comme bean dans ce fichier et comment les déclarer?
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 <beans> <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="mappingResources"> <list> <value>fr/gestentrep2/utilisateurs/pojos/Utilisateur.hbm.xml</value> <!-- <value>fr/........./utilisateur.hbm.xml</value> --> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</prop> <prop key="hibernate.connection.url">jdbc:mysql://localhost/gestentrep2</prop> <prop key="hibernate.connection.username">root</prop> <prop key="hibernate.connection.password"></prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <!-- <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>--> <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.cglib.use_reflection_optimizer">true</prop> </props> </property> </bean> <bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"><ref local="mySessionFactory"/></property> </bean> </beans>
Maintenant pour les plus motivés, si vous voulez vraiment aller plus loin dans mon code, je vous mets tous les fichiers cités précédemment.
Action résultant du formulaire :
Interface ILoginService :
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 public class FormulaireLoginAction extends Action { private ILoginService loginService; public FormulaireLoginAction() { super(); } public void setServlet(ActionServlet actionServlet) { super.setServlet(actionServlet); ServletContext servletContext = actionServlet.getServletContext(); WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); this.loginService = (ILoginService) wac.getBean("myLoginServicesTarget"); } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { FormulaireLoginBean formulaire = (FormulaireLoginBean) form; request.setAttribute("nom",formulaire.getNom()); request.setAttribute("motDePasse",formulaire.getMotDePasse()); // Délégation de service Utilisateur theUtilisateur = getLoginService().exists(formulaire.getNom(),formulaire.getMotDePasse()); if(theUtilisateur!=null) { HttpSession session = request.getSession(true); session.setAttribute("droits", theUtilisateur.getDroits()); session.setAttribute("login", formulaire.getNom()); session.setAttribute("password", formulaire.getMotDePasse()); } return mapping.findForward("index"); } protected ILoginService getLoginService() { return loginService; } }
classe LoginServiceSpringImpl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public interface ILoginService { public abstract Utilisateur exists(String login, String password) throws LoginException; }
Interface ILoginDAO :
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 public class LoginServiceSpringImpl implements ILoginService { private ILoginDAO loginDAO; public LoginServiceSpringImpl() { super(); } public Utilisateur exists(String login, String password) throws LoginException { Utilisateur theUtilisateur = null; try { theUtilisateur = getLoginDAO().exists(login,password); } catch (RuntimeException e) { throw new LoginException("Impossible de rechercher le login : " + login + " , " + password + " ... " + e.toString()); } return theUtilisateur; } public ILoginDAO getLoginDAO() { return loginDAO; } public void setLoginDAO(ILoginDAO loginDAO) { this.loginDAO = loginDAO; } }
classe LoginHibernateDAO :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public interface ILoginDAO { public abstract Utilisateur exists(String login, String password); }
Voila, merci déja à tous ceux qui m'indiqueront quoi déclarer comme bean en vue de cette architecture et merci encore + à ceux qui auront regardé le code et qui sauront me dire qu'est-ce qui est bien et qu'est-ce qui est abérant.
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 public class LoginHibernateDAO extends HibernateDaoSupport implements ILoginDAO { public LoginHibernateDAO() { super(); } public Utilisateur exists(String login, String password) { Session session = HibernateUtil.currentSession(); List utilisateurs = null; utilisateurs = session.createQuery("from Utilisateur where use_login = '" + login + "' and use_password = '" + password + "'").list(); //utilisateurs = getHibernateTemplate().find("from Utilisateur where use_login = '" + login + "' and use_password = '" + password + "'"); Utilisateur theUtilisateur = null; for (int i=0; i<utilisateurs.size(); i++) { theUtilisateur = (Utilisateur) utilisateurs.get(i); } return theUtilisateur; } }
@+
Partager