Ce document est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.
2. Premiers pas avec l’injection
2.1. Injection dans un servlet
-
Créer un servlet
-
Dans celui-ci, injecter :
-
Une source de données
DataSource
-
Un gestionnaire d’entités
EntityManager
-
Un objet d’un type quelconque e.g.
Person
-
-
S’assurer que les objets ne sont pas
null
à l’exécution.
2.2. Injection dans un EJB
-
Créer un EJB
-
Dans celui-ci, injecter :
-
Une source de données
DataSource
-
Un gestionnaire d’entités
EntityManager
-
Un objet d’un type quelconque e.g.
Person
-
-
S’assurer que les objets ne sont pas
null
à l’exécution.
2.3. Injection dans un objet quelconque
-
Créer un type quelconque e.g.
Person
-
Dans celui-ci, injecter :
-
Une source de données
DataSource
-
Un gestionnaire d’entités
EntityManager
-
Un objet d’un autre type quelconque e.g.
Adress
-
-
S’assurer que les objets ne sont pas
null
à l’exécution.
Rappel
Seuls les objets dont le cycle de vie est géré par le serveur d’applications sont la cible potentielle de l’injection. |
3. Travail sur les scopes
3.1. Singleton applicatif
-
Dans l’exemple précédent, combien d’instances de
Person
sont créées ? -
Comment faire pour qu’une unique instance soit créée (et qu’elle soit chacune injectée dans le servlet et l’EJB) ?
3.2. Scope de requête
-
Créer un bean qui a pour scope la requête
-
Vérifier qu’un nouvel objet est créé à chaque requête
-
Vérifier que le même objet est injecté tout au long de la chaîne de requête
3.3. Gestion de la session
Soit le code suivant :
@WebServlet("/preferences")
public class PreferencesServlet extends HttpServlet {
private static final String PREFS_KEY = "ch.frankel.preferences";
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
Enumeration<String> parameterNames = req.getParameterNames();
HttpSession session = req.getSession();
Object o = session.getAttribute(PREFS_KEY);
Map<String, String> preferences;
if (o == null) {
preferences = new HashMap<>();
} else {
preferences = (Map) o;
}
while (parameterNames.hasMoreElements()) {
String parameterName = parameterNames.nextElement();
if (parameterName.startsWith("preferences")) {
String value = req.getParameter(parameterName);
preferences.put(parameterName, value);
}
}
session.setAttribute(PREFS_KEY, preferences);
resp.sendRedirect("/preferences");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
Object o = session.getAttribute(PREFS_KEY);
if (o == null) {
o = new HashMap<String, String>();
}
req.setAttribute(PREFS_KEY, o);
req.getRequestDispatcher("/WEB-INF/preferences.jsp").forward(req, resp);
}
}
-
Analyser le code précédent
-
Ré-écrire celui-ci en utilisant un bean injecté lié à la session
4. Producers
Il est plus aisé de vérifier l’injection dans un servlet |
4.1. Producer simple
-
Dans un objet quelconque, injecter le temps système
Utiliser la méthode System.currentTimeMillis()
-
Vérifier
5. Intercepteurs et décorateurs
-
Créer un intercepteur qui écrit dans la sortie standard les paramètres d’entrée et la valeur de retour des méthodes interceptées.
-
Vérifier son bon fonctionnement
6. Programmation évènementielle
Soit l’architecture exposée précédemment (§ 5.1).
Remplacer le mécanisme des filtres par une configuration générale du format.
-
Créer un servlet qui permet de configurer le format désiré
-
Lorsque l’URL du servlet est appelée, ce dernier envoie un évènement de type
FormatChanged
-
Un composant singleton souscrit à cet évènement et conserve l’information
-
Ce composant est injecté dans le servlet qui affiche la page