< Zurück | Weiter >

Lerneinheit 3: Web-Bundle mit Zugriff auf die EJB erstellen

In der vorherigen Lerneinheit haben Sie eine EJB als OSGi-Service bereitgestellt. In dieser Lerneinheit entwickeln Sie eine Web-Bundle, das auf den Service zugreift. Sie erstellen das Bundle, konfigurieren das Manifest für den Import der erforderlichen Pakete, entwickeln ein Servlet, das auf die EJB als OSGi-Service zugreift und erstellen eine HTML-Seite für den Zugriff auf die Anwendung über einen Browser.

Web-Bundleprojekt erstellen

In diesem Abschnitt erstellen Sie ein OSGi-Bundle mit Web 3.0-Unterstützung und fügen das Bundle der OSGi-Anwendung "ConverterApp" hinzu.
  1. Öffnen Sie den Assistenten "OSGi-Bundleprojekt". Klicken Sie auf Datei > Neu > OSGi-Bundleprojekt. Der Assistent wird geöffnet.
  2. Erstellen Sie das Projekt. Geben Sie die folgenden Werte im Assistenten ein:
    Projektname
    Web
    Ziellaufzeit
    WebSphere Application Server Version 8.5.
    Webunterstützung hinzufügen (Wählen Sie dieses Kontrollkästchen und den folgenden Wert aus.)
    Web 3.0.
    Paket zur Anwendung hinzufügen (Wählen Sie dieses Kontrollkästchen und den folgenden Wert aus.)
    ConverterApp
    Web-Bundleprojekt erstellen
  3. Klicken Sie auf Fertigstellen. Das Projekt wird erstellt.

Bundlemanifest im Webprojekt für den Import des Pakets aus dem EJBClient-Projekt konfigurieren

In diesem Abschnitt fügen Sie dem Header "Import-Package" im Manifest einen Eintrag für das Paket "com.ibm.example" des EJBClient-Projekts hinzu. Das Paket "com.ibm.example" enthält die Schnittstelle, die Sie für die EJB entwickelt haben.
  1. Öffnen Sie das Manifest. Klicken Sie im Webprojekt doppelt auf Manifest: Web. Daraufhin wird der Manifesteditor geöffnet.
  2. Fügen Sie dem Paket "com.ibm.example" eine Abhängigkeit hinzu. Klicken Sie auf die Registerkarte Abhängigkeiten. Klicken Sie im Bereich Importierte Pakete auf Hinzufügen. Daraufhin wird der Dialog "Paketauswahl" geöffnet. Geben Sie im Feld Exportierte Pakete die Zeichenfolge com.ibm.example ein. Wählen Sie "com.ibm.example" aus der Paketliste aus und klicken Sie auf OK.
    Abhängigkeit hinzufügen

    Die Abhängigkeit zu "com.ibm.example" wird dem Abschnitt "Importierte Pakete" hinzugefügt. Beachten Sie, dass bei Konfiguration eines Bundleprojekts mit Web 3.0-Unterstützung bereits zusätzliche Importeinträge für Servletpakete (z. B. "javax.servlet") hinzugefügt wurden.

    Importierte Pakete

  3. Speichern Sie die Änderungen.

Servlet erstellen

In diesem Abschnitt erstellen Sie ein Anfangsservlet mit dem Servletassistenten.
  1. Öffnen Sie den Servletassistenten. Klicken Sie mit der rechten Maustaste auf das Webprojekt und wählen Sie Neu > Servlet aus. Daraufhin wird der Servletassistent geöffnet.
  2. Erstellen Sie das Servlet. Geben Sie die folgenden Werte im Assistenten ein:
    Projekt
    Web
    Java™-Paket
    com.ibm.example.servlets
    Klassenname
    ConverterServlet

    Klicken Sie auf Fertigstellen. Das Servlet "ConverterServlet" wird im Webprojekt erstellt.

Servlet entwickeln

In diesem Abschnitt entwickeln Sie das Servlet und fügen Code hinzu, um auf als OSGi-Service auf die EJB zuzugreifen.
  1. Öffnen Sie das Servlet im Java-Editor. Wenn das Servlet nicht bereits im Editor geöffnet ist, blenden Sie im Webprojekt den Java-Ordner Resources/src ein. Klicken Sie im Paket "com.ibm.example.servlets" doppelt auf "ConverterServlet".
  2. Fügen Sie neue Importanweisungen hinzu. Fügen Sie die folgenden Importanweisungen dem Importabschnitt am Anfang der Quellendatei hinzu:
    import com.ibm.example.EJBConverterLocal;
    import java.io.PrintWriter;
    import java.text.NumberFormat;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
  3. Entwickeln Sie die Methode doGet(). Das Servlet enthält eine grundlegende doGet()-Methode. Ersetzen Sie die automatisch generierte Methode durch die folgende Methode:
    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");
       }
    }
    Anmerkung: Anmerkungen zu diesem Code:
    Das Servlet erstellt EJBConverterLocal-Objekt mit dem Namen "Converter". EJBConverterLocal war die Schnittstelle, die Sie erstellt haben, die zwei Tmperaturumrechnungsmethoden enthält: convertToCelsius() und convertToFahrenheit(). Die folgende Codezeile verarbeitet die Erstellung des Objekts, das als OSGi-Service auf die EJB zugreift:
    EJBConverterLocal converter = (EJBConverterLocal) context.lookup("osgi:service/" + EJBConverterLocal.class.getName());
    Der zu konvertierende Temperaturwert wird vom Parameter temperature an das Servlet übergeben. Dieser Wert wird in einen Double-Wert mit dem Namen degrees konvertiert, der von den Methoden convertToCelsius() und convertToFahrenheit() für das Converter-Objekt verarbeitet werden kann.
    Anmerkung: Wenn Sie Remote-Schnittstellen verwenden wollen, passen Sie Ihren JNDI-Lookup-Code an. Der zuvor beschriebene Kontextsuchabschnitt kann beispielsweise im folgenden Format abgespeichert werden:
    EJBConverterRemote converter = (EJBConverterRemote) context.lookup("osgi:service/" + EJBConverterRemote.class.getName() + "/(service.exported.interfaces=*)");
  4. Entwickeln Sie die Methode doPost(). Ersetzen Sie die automatisch generierte doPost()-Methode durch den folgenden Code. Das Ersetzen der automatisch generierten doPost()-Methode stellt sicher, dass das Servlet sowohl von POST- als auch von GET-Anforderungen von einem Browser aufgerufen werden können. Aufrufe an die doPost()-Methode führen automatisch die doGet()-Methode aus.
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	doGet(request, response);
    }
  5. Überprüfen Sie Ihre Arbeit. Der folgende Code ist der fertige Servlet-Code:
    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. Speichern Sie die Änderungen.

HTML-Datei für den Zugriff auf die Anwendung erstellen

In diesem Abschnitt erstellen Sie eine HTML-Datei mit dem Namen index.html, die ein Formular zum Eingeben von Werten enthält, die zur Konvertierung an das Servlet gesendet werden.
  1. Öffnen Sie den Assistenten "Neue Webseite". Klicken Sie mit der rechten Maustaste auf das Webprojekt und wählen Sie Neu > Webseite aus. Daraufhin wird der Assitent Webseite geöffnet.
  2. Erstellen Sie die Webseite. Geben Sie im Assistenten im Feld Dateiname die Zeichenfolge index.html ein. Wählen Sie im Bereich Schablone den Eintrag HTML aus. Klicken Sie auf Fertigstellen. Die Seite wird erstellt und im Editor geöffnet.
    Neue Webseite
  3. Wählen Sie im Webseiteneditor das Register Quelle aus.
  4. Aktualisieren Sie die Quelle. Ersetzen Sie den Standardquellcode durch den folgenden Code:
    <!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>

    Diese HTML-Datei enthält ein Formular, das einen Parameterwert für Temperatur an das Servlet "ConverterServlet" übergibt. Bevor er an das Servlet gesendet wird, wird der zu versendende Wert von der Funktion validate() validiert, um sicherzustellen, dass ein numerischer Wert eingegeben wurde.

< Zurück | Weiter >
Symbol das den Typ des Artikels anzeigt. Artikel für Lerneinheit
Nutzungsbedingungen für Information Center | Feedback

Symbol für Zeitmarke Letzte Aktualisierung: 29.04.2014

Dateiname: osgi_ejb_3.html