< Précédent | Suivant >

Leçon 3 : Développement d'un bundle web qui accède au EJB

Dans la leçon précédente, vous avez vu l'EJB en tant que service OSGi. Dans cette leçon, vous développez un bundle Web qui accède au service. Vous créez le bundle, configurez le manifeste pour importer les packages requis, développez un servlet qui accède au EJB en tant que service OSGi, et créez une page HTML pour accéder à l'application via un navigateur.

Création d'un projet de bundle Web

Dans cette section, vous créez un bundle OSGi avec support Web 3.0 et ajoutez le bundle à l'application OSGi ConverterApp.
  1. Ouvrez l'assistant de projet de bundle OSGi. Cliquez sur Fichier > Nouveau > OSGi Bundle Project. L'assistant s'ouvre.
  2. Créez le projet. Entrez ou sélectionnez les valeurs suivantes dans l'assistant :
    Nom du projet
    Web
    Exécution cible
    WebSphere Application Server v8.5.
    Ajouter le support Web (cochez cette case et sélectionnez la valeur suivante)
    Web 3.0.
    Ajouter un bundle à l'application (cochez cette case et sélectionnez l'application suivante)
    ConverterApp
    Créer un projet de bundle Web
  3. Cliquez sur Terminer. Le projet est créé.

Configuration du manifeste du bundle dans le projet Web pour importer le package à partir du projet EJBClient

Dans cette section, vous ajoutez une entrée pour le package com.ibm.example dans le projet EJBClient dans l'en-tête Import-Package du manifeste. Le package com.ibm.example contient l'interface que vous avez développé pour l'EJB.
  1. Ouvrez le manifeste. Dans le projet Web, cliquez deux fois sur Manifest: Web. L'éditeur de manifeste s'ouvre.
  2. Ajoutez une dépendance au package com.ibm.example. Cliquez sur l'onglet Dépendances. Dans la section Packages importés, cliquez sur Ajouter. La boîte de dialogue de sélection de package s'ouvre. Dans la zone Packages exportés, entrez com.ibm.example. Sélectionnez com.ibm.example dans la liste de packages et cliquez sur OK.
    Ajouter une dépendance

    La dépendance à com.ibm.example est ajoutée à la section Packages importés. Notez qu'étant donné que le projet de bundle est configuré avec le support Web 3.0, des entrées d'importation supplémentaires pour les packages de servlet comme javax.servlet sont déjà ajoutées.

    Packages importés

  3. Sauvegardez les modifications.

Création d'un ampèreservlet

Dans cette section, vous créez un servlet initial avec l'assistant de servlet.
  1. Ouvrez l'assistant de servlet. Cliquez avec le bouton droit sur le projet Web et sélectionnez Nouveau > Servlet. L'assistant de servlet s'ouvre.
  2. Créez le servlet. Entrez ou sélectionnez les valeurs suivantes dans l'assistant :
    Projet
    Web
    Package Java™
    com.ibm.example.servlets
    Nom de classe
    ConverterServlet

    Cliquez sur Terminer. ConverterServlet est créé dans le projet Web.

Développement du servlet

Dans cette section, vous pouvez développer le code include et servlet pour accéder à l'EJB en tant que service OSGi.
  1. Ouvrez le servlet dans l'éditeur Java. Si le servlet n'est pas toujours ouvert dans l'éditeur, dans le projet Web, développez le dossier Java Resources/src. Dans le package com.ibm.example.servlets, cliquez deux fois sur ConverterServlet.
  2. Ajoutez les nouvelles instructions d'importation. Ajoutez les instructions d'importation suivantes à la section d'importation au début du fichier source :
    import com.ibm.example.EJBConverterLocal;
    import java.io.PrintWriter;
    import java.text.NumberFormat;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
  3. Développez la méthode doGet(). Le servlet contient une méthode basique doGet(). Remplacez la méthode générée automatiquement par la méthode suivante :
    protected void doGet(HttpServletRequest request,
          HttpServletResponse response) throws ServletException, IOException {
    
       PrintWriter w = response.getWriter();
    
       NumberFormat nf = NumberFormat.getInstance();
       nf.setMaximumFractionDigits(2);
    
       try {
          InitialContext context = new InitialContext();
          EJBConverterLocal converter = (EJBConverterLocal) context
                .lookup("osgi:service/" + EJBConverterLocal.class.getName());
    
          String temperature = request.getParameter("temperature");
          if (temperature == null) {
             w.println("<p>A temperature value was not specified.</p>");
          } else if (!temperature.matches("[-+]?[0-9]*\\.?[0-9]+")) {
             w.println("Invalid temperature specified.");
          } else {
             double degrees = Double.parseDouble(temperature);
    
             double celsius = converter.convertToCelsius(degrees);
             w.println("<p>" + temperature + " degrees fahrenheit is "
                   + nf.format(celsius) + " degrees celsius</p>");
    
             double fahrenheit = converter.convertToFahrenheit(degrees);
             w.println("<p>" + temperature + " degrees celsius is "
                   + nf.format(fahrenheit) + " degrees fahrenheit</p>");
          }
    
          w.println("<a href='index.html'>Back</a>");
       } catch (NamingException e) {
          w.println(e.getMessage());
       } catch (NumberFormatException e) {
          w.println("An incorrect temperature was specified");
       }
    }
    Remarque : Eléments à remarquer à propos de ce code :
    Le servlet crée un objet EJBConverterLocal appelé convertisseur. Rappelez-vous que EJBConverterLocal était l'interface que vous avez créée qui contient deux méthodes de conversion des températures convertToCelsius () et convertToFahrenheit(). La ligne de code suivante gère la création de l'objet qui accède au EJB en tant que service OSGi :
    EJBConverterLocal converter = (EJBConverterLocal) context.lookup("osgi:service/" + EJBConverterLocal.class.getName());
    La valeur de température à convertir est transmise au servlet via le paramètre temperature. Cette valeur est convertie en Double appelé degrees, à traiter par les méthodes convertToCelsius() et convertToFahrenheit() sur l'objet de convertisseur.
    Remarque : Si vous souhaitez utiliser des interfaces distantes, ajustez votre code de recherche JNDI. Par exemple, la section de recherche de contexte précédemment décrite peut être écrite au format suivant :
    EJBConverterRemote converter = (EJBConverterRemote) context.lookup("osgi:service/" + EJBConverterRemote.class.getName() + "/(service.exported.interfaces=*)");
  4. Develop the doPost() method. Remplacez la méthode doPost() générée automatiquement par le code suivant. Le remplacement de la méthode générée automatiquement doPost () permet de s'assurer que le servlet peut être appelé par les deux requêtes post et get à partir d'un navigateur. Les appels de doPost() exécutent automatiquement la méthode doGet().
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	doGet(request, response);
    }
  5. Vérifiez votre travail. Le code suivant est le code du servlet terminée :
    package com.ibm.example.servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.text.NumberFormat;
    
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.ibm.example.EJBConverterLocal;
    
    @WebServlet("/ConverterServlet")
    public class ConverterServlet extends HttpServlet {
       private static final long serialVersionUID = 1L;
    
       public ConverterServlet() {
          super();
       }
    
       protected void doGet(HttpServletRequest request,
             HttpServletResponse response) throws ServletException, IOException {
    
          PrintWriter w = response.getWriter();
    
          NumberFormat nf = NumberFormat.getInstance();
          nf.setMaximumFractionDigits(2);
    
          try {
             InitialContext context = new InitialContext();
             EJBConverterLocal converter = (EJBConverterLocal) context
                   .lookup("osgi:service/" + EJBConverterLocal.class.getName());
    
             String temperature = request.getParameter("temperature");
             if (temperature == null) {
                w.println("<p>A temperature value was not specified.</p>");
             } else if (!temperature.matches("[-+]?[0-9]*\\.?[0-9]+")) {
                w.println("Invalid temperature specified.");
             } else {
                double degrees = Double.parseDouble(temperature);
    
                double celsius = converter.convertToCelsius(degrees);
                w.println("<p>" + temperature + " degrees fahrenheit is "
                      + nf.format(celsius) + " degrees celsius</p>");
    
                double fahrenheit = converter.convertToFahrenheit(degrees);
                w.println("<p>" + temperature + " degrees celsius is "
                      + nf.format(fahrenheit) + " degrees fahrenheit</p>");
             }
    
             w.println("<a href='index.html'>Back</a>");
          } catch (NamingException e) {
             w.println(e.getMessage());
          } catch (NumberFormatException e) {
             w.println("An incorrect temperature was specified");
          }
       }
    
       protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	doGet(request, response);
    		}
    }
  6. Sauvegardez les modifications.

Création d'un fichier HTML pour accéder à l'application

Dans cette section, vous créez un fichier HTML, index.html, qui contient un formulaire permettant d'entrer les valeurs pour une soumission sur le servlet pour conversion.
  1. Ouvrez le nouvel assistant de page Web. Cliquez avec le bouton droit sur le projet Web et sélectionnez Nouveau > Page Web. L'assistant Page Web s'ouvre.
  2. Créez la page Web. Dans l'assistant, dans la zone Nom de fichier, entrez index.html. Dans la section Modèle, sélectionnez HTML. Cliquez sur Terminer. La page est créée et s'ouvre dans l'éditeur.
    Nouvelle page Web
  3. Sélectionnez l'onglet Source de l'éditeur de page Web.
  4. Mettez à jour la source. Remplacez le code de source par défaut par le code suivant :
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>OSGi EJB Temperature Converter</title>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <script type="text/javascript">
    
    function validate(form) {
    	var temperature = new Number(form.temperature.value);
    	if (isNaN(temperature)) {
    		alert("Please enter a valid number.");
    		return false;
    	}
    	return true;
    }
    
    </script>
    </head>
    <body>
    <form action="ConverterServlet" method="post" onsubmit="return validate(this);">
    	Enter a temperature value:
    	<br/>
    	<input type="text" id="temperature" name="temperature"/>
    	<br/>
    	<br/>
    	<input type="submit" value="Submit"/>
    </form>
    </body>
    </html>

    Cet HTML contient un formulaire soumettant une valeur de paramètre temperature dans ConverterServlet. Avant son envoi dans le servlet, la valeur à soumettre est validée par la fonction validate() pour s'assurer qu'une valeur numérique a été entrée.

< 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 : osgi_ejb_3.html