IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Injection avec Spring


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Par défaut Injection avec Spring
    salut,

    je suis entrain de faire une application avec struts2 + EJB3

    et j'ai déjà avancé dans ce projet

    mais le problème est que je suis dans l'obligation d'ajouter la notion d'injection par spring (en utilisant le design pattern service locator et IOC)

    mais je n'arrive pas à intégrer ce concept dans mon projet

    pour le moment dans mon projet web j’écris ce code dans la class UserAction.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
     
    public class UserAction extends ActionSupport{
    private UserDaoRemote userDao;
     
    	public UserDaoRemote getUserDao() {
    		return userDao;
    	}
     
    	public void setUserDao(UserDaoRemote userDao) {
    		this.userDao = userDao;
    	}
     
     
     public UserAction() {
        	try {
    		Context context=new InitialContext();
    			setUserDao((UserDaoRemote) context.lookup("test"));//ici normalement introduit la notion d'injection
     
     
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
        } 
     
    }
    merci d'avance

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Par défaut
    pour le moment j'arrive à faire une page jsp qui affiche les listes des utilisateurs en utilisant seulement EJB3 et struts2

    pour le projet EJB : on a l'interface UserDaoRemote
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Remote
    public interface UserDaoRemote {
     
    	public void add(User user);
    	public void update(User user);
    	public void delete(User user);
    	public List<User> lisAll();
     
     
     
     
    }
    et pour la classe UserDao :

    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
    @Stateful(mappedName="test")
    public class UserDao implements UserDaoRemote{
     
     
     
    	  @PersistenceContext
    	EntityManager entityManager;
     
    	public void add(User user) {
     
    		entityManager.persist(user);
     
    	}
     
     
    	public void delete(User user) {
     
    		user=entityManager.merge(user);
    		entityManager.remove(user);
    	}
     
     
    	public List<User> lisAll() {
     
     
    		return entityManager.createNamedQuery("User.FindAll").getResultList();
    	}
     
     
    	public void update(User user) {
     
     
     
    		entityManager.merge(user);
     
    	}
     
     
     
    }
    et pour le projet WEB (avec struts2)
    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 UserAction extends ActionSupport{
    private UserDaoRemote userDao;
     private List<User> users;
    public List<User> getUsers() {
    		return users;
    	}
     
    	public void setUsers(List<User> users) {
    		this.users = users;
    	}
    	public UserDaoRemote getUserDao() {
    		return userDao;
    	}
     
    	public void setUserDao(UserDaoRemote userDao) {
    		this.userDao = userDao;
    	}
     
     
     public UserAction() {
        	try {
    		Context context=new InitialContext();
    			setUserDao((UserDaoRemote) context.lookup("test"));//ici normalement introduit la notion d'injection
     
     
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
        } 
     
     
    public String getAllUsers(){
     
     
    		users=userDao.lisAll();
     
        	 return "success";
        }
     
    }
    et pour le fichier struts.xml

    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
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
     
    <struts>
       <include file="struts-default.xml"/>
         <package name="default" extends="struts-default">
            <action name="getAllUser" method="getAllUsers" class="com.test.action.UserAction">
                <result name="success">users.jsp</result>
            </action>
     
     
     
         </package>
    </struts>
    et dans la page jsp juste je fait appel à l'action :getAllUser

    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
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <html>
    <head>
      <META HTTP-EQUIV="Refresh" CONTENT="0;URL=getAllUser.action">
    </head>
    <body>
     
     
     
    <table align=center>
        <tr>
     
            <th><s:text name="password"/></th>
            <th><s:text name="login"/></th>	 
     
        </tr>
        <s:iterator value="users" status="status">
            <tr>
     
                <td><s:property value="password"/></td>
                <td><s:property value="login"/></td>
     
            </tr>  		
    	 </s:iterator>
        </table>
    </body>
    </html>



    bien sur l'exemple qui j'ai donné ca marche juste je veux ajouter dans cet exemple la notion d'injection avec spring

    j’espère que vous pouvez m'aidez dans cette exemple et par la suite je peux continuer dans le reste de projet avec même principe



    je pense que juste je dois Importer les JAR de Spring, et crée un fichier context.xml dans lequel je déclarerais mes beans
    avec le principe suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <bean id="userDao" class="package.UserDaoRemote" />
     
    <bean id="userAction" class="package.UserAction">
        <property name="userDao" ref="userDao" />
    </bean>
    donc je veux savoir le contenu complet de fichier context.xml

    merci d'avance

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Pourquoi t'as besoin de Spring? les EJB3 font déjà de l'injection de dépendance, tu peux utiliser les annotations @Inject ou @EJB pour faire de l'injection de dépendance, t'as pas forcément besoin de Spring. Si tu tiens vraiment à passer à Spring, tu peux créer ton fichier de context en lui ajoutant seulement la base <context:scan-base-package="la liste de tes packages avec une virgule pour les séparer"/> et sur toutes les classes que tu souhaites que Spring gère le cycle de vie tu leur ajoute l'annotation @Component et c'est fait.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Par défaut
    merci pour votre réponse

    comme j'ai déjà dis j'ai deux projet projet EJB et projet web( en struts2)

    j'ai créé un fichier context.xml sous SRC de projet web et bien sur j'importe les jar nécessaire de spring dans le même projet web

    comme je dis je veux que l'exemple que j'ai déjà donné doit être tourner en utilisant le concept d'injection avec spring

    je pense que le contenu de context.xml

    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
     
    <bean id="userDao" class="com.testEJB.daos.UserDaoRemote" />
     
    <bean id="userAction" class="com.test.action.UserAction">
        <property name="userDao">
        <ref bean="userDao"/>
        </property>
     
    </bean>
     
     
     
    </beans>
    mais je pense aussi je dois toucher le fichier web.xml puisque j'utilise le concept spring

    pour le moment le contenu de web.xml est

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     
        <display-name>ExempleStruts2</display-name>
     
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>
     
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
     
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
     
    </web-app>


    mais peut être votre proposition de départ est correcte

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Si tu veux utiliser du spring, tu dois annoter tes classes avec les annotation spring, tu doit démarrer spring (via son listener) et, pour les classes sur lesquelles tu n'a pas le controle (par exemple instanciées par une librairie tierce) tu dois commencer à jouer avec l'AOP et @Configurable. Ce n'est pas trivial comme opération. Commence d'abord par bien lire l'épaisse doc de spring

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Par défaut
    si j'ai comprend bien votre réponse,

    pour la class class UserAction
    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
     
    @Component
    public class UserAction extends ActionSupport{
    private UserDaoRemote userDao;
     private List<User> users;
    public List<User> getUsers() {
    		return users;
    	}
     
    	public void setUsers(List<User> users) {
    		this.users = users;
    	}
    	public UserDaoRemote getUserDao() {
    		return userDao;
    	}
     
    	public void setUserDao(UserDaoRemote userDao) {
    		this.userDao = userDao;
    	}
     
     
     public UserAction() {
        	try {
    		Context context=new InitialContext();
    			setUserDao((UserDaoRemote) context.lookup("test"));//ici normalement introduit la notion d'injection
     
     
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
        } 
     
     
    public String getAllUsers(){
     
     
    		users=userDao.lisAll();
     
        	 return "success";
        }
     
    }
    et pour le fichier context.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     <beans xmlns="http://www.springframework.org/schema/beans"
     	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     	xmlns:context="http://www.springframework.org/schema/context"
     	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                               http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
       <context:component-scan base-package="package com.test.action,com.testEJB.daos"/>
     </beans>
    a noter que le package : est dans le projet EJB

    comme je dis le but est comment utiliser spring avec le projet que j'ai déjà
    donné

Discussions similaires

  1. [Web Services] Problème d'injection de DAO avec Spring
    Par devTyty dans le forum Spring
    Réponses: 2
    Dernier message: 04/09/2014, 13h13
  2. Réponses: 0
    Dernier message: 12/05/2013, 15h52
  3. Réponses: 4
    Dernier message: 25/05/2011, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo