< Précédent | Suivant >

Leçon 6 : Ajout de l'injection de dépendance dans un bundle

L'injection de dépendance permet à un bean d'accéder à un autre bean sans avoir à implémenter de code pour créer l'instance de bean. L'instance de bean requise est créée par le conteneur Blueprint en utilisant les informations contenues dans le fichier de configuration Blueprint.

Avant de commencer cette leçon, arrêtez le serveur. Dans la vue serveurs (Fenêtre > Afficher la vue > Serveurs), cliquez avec le bouton droit sur WebSphere Application Server, puis sélectionnez Arrêter.
Pour ajouter une injection de dépendance dans un bundle :
  1. Ajout d'un service au bundle
  2. Mise à jour du fichier de configuration Blueprint
  3. Mise à jour du servlet pour appeler le nouveau service
  4. Déploiement de l'application

Ajout d'un service au bundle

  1. Créez la classe d'interface :
    1. Dans l'Explorateur d'entreprise, développez CounterServiceBundle > src.
    2. Cliquez avec le bouton droit sur com.ibm.ws.eba.counter, puis sélectionnez Nouveau > Interface. L'assistant de nouvelle interface Java™ s'ouvre.
    3. Dans la zone Nom, tapez Greet, puis cliquez sur Terminer. L'interface est créée dans le package et s'ouvre dans l'éditeur.
    4. Ajoutez le prototype getText() à l'interface. Le code suivant en résulte :
      package com.ibm.ws.eba.counter;
      
      public interface Greet {
      		public String getText();
      }
  2. Créez la classe d'implémentation :
    1. Cliquez avec le bouton droit sur com.ibm.ws.eba.counter, puis sélectionnez Nouveau > Classe. L'assistant de nouvelle classe Java s'ouvre.
    2. Dans la zone Nom, tapez GreetImpl.
    3. A côté de la liste des interfaces, cliquez sur Ajouter. La boîte de dialogue Sélection des interfaces implémentées s'ouvre.
    4. Dans la zone Choisissez des interfaces, tapez Greet. Sélectionnez l'interface Greet, puis cliquez sur interface OK.
    5. Cliquez sur Terminer. La classe est créée dans le package et s'ouvre dans l'éditeur.
    6. Remplacez la classe GreetImpl par l'implémentation suivante :
      package com.ibm.ws.eba.counter;
      
      public class GreetImpl implements Greet {
      	
      	private Counter counter;
      	
      	public void setCounter(Counter c) {
      		counter = c;
      	}
      
      	@Override
      	public String getText() {
      		return counter.getCount()+" Hello";
      	}
      	
      	public void init() {
      		System.out.println("GreetImpl.init() called");
      	}
      
      }
    7. Sauvegardez GreetImpl.java.
La variable privée counter est la référence à une instance du service de compteur qui est initialisée par le conteneur avec l'injection de dépendance. Elle est définie à l'aide de la méthode setCounter.

Mise à jour du fichier de configuration Blueprint

Effectuez les étapes suivantes pour configurer le fichier de configuration Blueprint pour démarrer le service Greet et injecter une instance du service de compteur :
  1. Dans l'Explorateur d'entreprise, cliquez avec le bouton droit sur CounterServiceBundle, puis sélectionnez OSGi > Ouvrir un fichier Blueprint pour ouvrir le fichier Blueprint dans l'éditeur.
  2. Ajoutez l'assemblage de composant et les informations de configuration au fichier de configuration Blueprint :
    1. Dans l'onglet Conception de l'éditeur, sélectionnez Blueprint et cliquez sur Ajouter. La boîte de dialogue Ajouter un élément s'ouvre.
    2. Cliquez sur Bean, puis sur OK. La boîte de dialogue de détails du bean s'ouvre.
    3. Configurez le bean :
      1. Dans la zone de l'ID du bean, tapez GreetBean.
      2. Dans la zone Classe, cliquez sur Parcourir. La boîte de dialogue Sélection d'un type s'ouvre. Dans la zone Sélectionnez un nom de type, tapez GreetImpl, puis sélectionnez la classe GreetImpl. Cliquez sur OK.
      3. Cliquez sur OK pour accepter les modifications et fermer la boîte de dialogue.
      4. Dans l'éditeur, dans la zone Méthode d'initialisation, tapez init.
      Le bean est ajouté à votre fichier Blueprint.
    4. Dans la section Présentation, cliquez sur GreetBean (Bean), puis sur Ajouter. La boîte de dialogue Ajouter un élément s'ouvre.
    5. Cliquez sur Propriété, puis sur OK.
    6. Configurez la propriété :
      • Dans la zone Nom, tapez counter.
      • Dans la zone Référence, cliquez sur Parcourir. La boîte de dialogue de sélection de référence s'ouvre. Cliquez sur Bean: CounterBean, puis sur OK.
    7. Dans la section Présentation, cliquez sur Blueprint, puis sur Ajouter.
    8. Cliquez sur Service, puis sur OK. La boîte de dialogue de détails du service s'ouvre.
    9. Configurez le service :
      1. Dans la zone Interface du service, cliquez sur Parcourir, puis sélectionnez l'interface Greet.
      2. Dans la zone Référence de bean, cliquez sur Parcourir, puissélectionnez Bean: GreetBean. Cliquez sur OK.
      3. Cliquez sur OK pour accepter les modifications et fermer la boîte de dialogue.
      Le service est ajouté à votre configuration.
  3. Enregistrez ce fichier.

Mise à jour du servlet pour appeler le nouveau service

  1. Dans l'Explorateur d'entreprise, développez CounterWebBundle > Ressources Java > src > com.ibm.ws.eba.servlet.
  2. Cliquez deux fois sur CounterServlet.java pour l'ouvrir dans l'éditeur.
  3. Localisez la méthode doGet() et remplacez-la par l'implémentation suivante :
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		Greet greet;
    		try {
    			InitialContext ic =  new InitialContext();
    			greet = (Greet) ic.lookup("osgi:service/"+Greet.class.getName());
    			response.getOutputStream().println("greet.getText()="+greet.getText());
    		} catch (NamingException e) {
    			e.printStackTrace(System.out);
    		}
    	}
  4. Dans le menu principal, cliquez sur Source > Organisation des importations. Les instructions d'importation sont mises à jour.
  5. Sauvegardez CounterServlet.java.

Déploiement de l'application

  1. Dans l'Explorateur d'entreprise, développez CounterWebBundle > CounterWebBundle > Servlets.
  2. Cliquez avec le bouton droit sur CounterServlet et sélectionnez Exécuter en tant que > Exécuter sur le serveur. La boîte de dialogue Exécuter sur le serveur s'ouvre.
  3. Cliquez sur Terminer.

La chaîne greet.getText()=0 Hello s'affiche dans le navigateur. Chaque fois que la page est rechargée, la valeur augmente.

Passez à la vue Console (Fenêtre > Afficher la vue > Console) pour afficher la sortie du serveur. Une sortie réussie affiche la sortie de CounterImpl.init() et GreetImpl.init(), selon les entrées de la méthode d'initialisation pour les beans CounterImpl et GreetImpl dans le fichier Blueprint :
[3/30/10 16:59:41:734 EDT] 00000072 StepStartBLA  A   CWWMH0300I: Starting business-level application "WebSphere:blaname=CounterApp".
[3/30/10 16:59:42:406 EDT] 00000072 webapp        I com.ibm.ws.webcontainer.webapp.WebGroupImpl WebGroup SRVE0169I: Loading Web Module: CounterWebBundle.
[3/30/10 16:59:42:453 EDT] 00000072 WASSessionCor I SessionContextRegistry getSessionContext SESN0176I: Will create a new session context for application key default_hostCounterWebBundle
[3/30/10 16:59:42:468 EDT] 00000072 webcontainer  I com.ibm.ws.wswebcontainer.VirtualHost addWebApplication SRVE0250I: Web Module CounterWebBundle has been bound to default_host[*:9083,*:80,*:9446,*:5067,*:5066,*:443].
[3/30/10 16:59:42:468 EDT] 00000072 FileLocatorIm E   CWPST0164E: The CounterWebBundle composition unit is not found.
[3/30/10 16:59:42:500 EDT] 00000072 StepStartBLA  A   CWWMH0196I: Business-level application "WebSphere:blaname=CounterApp" was started successfully.
[3/30/10 16:59:42:500 EDT] 00000016 SystemOut     O CounterImpl.init() called
[3/30/10 16:59:42:500 EDT] 00000016 SystemOut     O GreetImpl.init() called
Note: Si la sortie de CounterImpl.init() et GreetImpl.init() ne s'affiche pas dans la sortie console, cherchez les messages d'erreur lors du déploiement ou du démarrage de l'application, puis vérifiez les fichiers Blueprint pour voir s'il y a des erreurs dans les définitions de service et de bean.

Point de contrôle

Vous avez appris à utiliser l'injection de dépendance Blueprint pour permettre à un bean d'utiliser les services d'un autre.

Dans cette leçon, vous avez découvert les rubriques suivantes :
  • Comment écrire du code pour un bean utilisant un autre bean.
  • Comment définir la propriété dans le fichier de configuration Blueprint qui indique au conteneur Blueprint d'initialiser la variable en utilisant l'injection de dépendance.
< Précédent | Suivant >
Icône indiquant le type de rubrique Rubrique de leçon de tutoriel
Dispositions pour les centres de documentation | Commentaires en retour

Icône d'horodatage Dernière mise à jour: May 29, 2014 10:11

Nom de fichier : counter_lesson7.html