-
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.
-
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.
-
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.
Tip
|
Rappel
Seuls les objets dont le cycle de vie est géré par le serveur d’applications sont la cible potentielle de l’injection. |
-
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) ?
-
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
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
Tip
|
Il est plus aisé de vérifier l’injection dans un servlet |
-
Dans un objet quelconque, injecter le temps système
NoteUtiliser la méthode System.currentTimeMillis()
-
Vérifier
-
Dans un object quelconque, injecter un objet de type
Random
-
Si la propriété système
secure
vauttrue
, le type concret de l’objet doit êtreSecureRandom
NoteUtiliser la méthode System.getProperty()
-
Sinon, le type concret doit être simplement
Random
-
-
Vérifier
-
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
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