< Zurück | Weiter >

Lerneinheit 4: Servlet erstellen, das auf einen OSGi-Service zugreift

In dieser Lerneinheit erstellen Sie ein webfähiges Bundle, das ein Servlet enthält, das auf den Zählerservice zugreift und die Ergebnisse des Service anzeigt. Das Servlet greift auf den OSGi-Service zu, indem es den Service über eine JNDI-Schnittstelle InitialContext sucht.

Webfähiges Bundle erstellen

Gehen Sie wie folgt vor, um das webfähige Bundle zu erstellen, das das Servlet enthält:
  1. Klicken Sie auf Datei > neu > Andere und blenden Sie dann OSGi ein.
  2. Klicken Sie auf OSGi-Bundle-Projekt und anschließend auf Weiter. Der Assistent "Neues OSGi-Bundle-Projekt" wird geöffnet.
  3. Geben Sie im Feld Projektname die Zeichenfolge CounterWebBundle ein.
  4. Wählen Sie einen der folgenden Server aus der Liste "Ziellaufzeit" aus:
    • WebSphere Application Server V7.0
    • WebSphere Application Server V8.0
    • WebSphere Application Server V8.5
    • WebSphere Application Server V8.5 Liberty Profile
  5. Klicken Sie im Bereich "Konfiguration" auf Web-Unterstützung hinzufügen und wählen Sie Web 2.5 aus der Liste "Web-Unterstützung" aus.
  6. Stellen Sie sicher, dass "CounterApp" im Feld Anwendungsprojekt angezeigt wird und klicken Sie dann auf Fertigstellen.

Servlet erstellen

Gehen Sie wie folgt vor, um das Servlet zu erstellen, das auf den Zählerservice zugreift:
  1. Klicken Sie im Enterprise-Explorer mit der rechten Maustaste auf CounterWebBundle und wählen Sie anschließend Neu > Servlet aus. Der Assistent "Servlet erstellen" wird geöffnet.
  2. Geben Sie im Feld Java-Paket die Zeichenfolge com.ibm.ws.eba.servlet ein.
  3. Geben Sie im Feld Klassenname die Zeichenfolge CounterServlet ein und klicken Sie dann auf Fertigstellen. Das Servlet wird im Bundle erstellt und im Editor geöffnet.

Erforderliche Pakete dem Bundlemanifest hinzufügen

Gehen Sie wie folgt vor, um die erforderlichen Pakete dem Bundlemanifest hinzuzufügen:
  1. Klicken Sie doppelt auf Manifest: CounterWebBundle, um es im Editor zu öffnen.
  2. Wechseln Sie zur Registerkarte "Abhängigkeiten".
  3. Klicken Sie im Bereich "Importierte Pakete" auf Hinzufügen. Das Dialogfenster "Paketauswahl" wird geöffnet.
  4. Geben Sie im Feld Exportierte Pakete die Zeichenfolge com.ibm.ws.eba.counter ein.
  5. Wählen Sie com.ibm.ws.eba.counter aus der Liste aus und klicken Sie anschließend auf OK. Der Bereich "Importierte Pakete" ähnelt dem folgenden Diagramm:
    Importierte Pakete.
    Anmerkung: Wenn Ihre Ziellaufzeit "WebSphere Application Server Version 8.5 Liberty Profile" ist, müssen Sie auch das Paket javax.naming importieren. Wenn Sie das Paket javax.naming importieren, wird verhindert, dass beim Ausführen der Anwendung ein ClassNotFoundException-Fehler auftritt. In den folgenden Schrittem wird beschrieben, wie Sie das Paket javax.naming importieren:
    1. Klicken Sie im Bereich "Importierte Pakete" auf Hinzufügen. Das Dialogfenster "Paketauswahl" wird geöffnet.
    2. Geben Sie im Feld Exportierte Pakete die Zeichenfolge javax.naming ein.
    3. Wählen Sie javax.naming aus der Liste aus und klicken Sie anschließend auf OK.
    Wenn Sie das Paket nicht importieren, tritt ein ClassNotFoundException-Fehler auf, wenn Sie die Anwendung unter WebSphere Application Server Liberty Profile ausführen. Der Fehler tritt auf, weil die Anwendung erwartet, dass das Paket mit der fehlenden Klasse von der Serverlaufzeit und nicht als Benutzerpaket bereitgestellt wird.
  6. Speichern Sie die Bundlemanifestdatei.

Implementierung für die Suche nach OSGi-Services erstellen

In den folgenden Schritten wird beschrieben, wie Sie die Implementierung für die Methode doGet() erstellen, die einen OSGi-Service mithilfe der Schnittstelle InitialContext sucht:
  1. Klicken Sie im Enterprise-Explorer doppelt auf die Datei CounterServlet.java, um sie im Editor zu öffnen.
  2. Lokalisieren Sie die Methode doGet() und fügen Sie die folgende Implementierung hinzu:
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		Counter counter;
    		try {
    			InitialContext ic = new InitialContext();
    			counter = (Counter) ic.lookup("osgi:service/"+Counter.class.getName());
    			response.getOutputStream().println("counter="+counter.getCount());
    		}
    		catch (NamingException e) {
    			e.printStackTrace(System.out);
    		}
    	}
  3. Klicken Sie im Hauptmenü auf Quelle > Importe verwalten. Daraufhin wird der Dialog "Importe verwalten" geöffnet.
  4. Wählen Sie com.ibm.ws.eba.counter.Counter aus und klicken Sie anschließend auf Fertigstellen.
  5. Speichern Sie die Datei CounterServlet.java.
Der Servlet-Code ähnelt dem folgenden Code:
package com.ibm.ws.eba.servlet;

import java.io.IOException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ibm.ws.eba.counter.Counter;

/**
 * Servlet implementation class CounterServlet
 */
public class CounterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * Default constructor. 
     */
    public CounterServlet() {
        // TODO Automatisch generierter Konstruktor-Stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Counter counter;
		try {
			InitialContext ic = new InitialContext();
			counter = (Counter) ic.lookup("osgi:service/"+Counter.class.getName());
			response.getOutputStream().println("counter="+counter.getCount());
		}
		catch (NamingException e) {
			e.printStackTrace(System.out);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Automatisch generierter Methodenstub
	}

}

Prüfpunkt für Lerneinheit

Sie haben das Servlet erstellt, das auf einen OSGi-Service zugreift, indem es den Service über eine JNDI-Schnittstelle InitialContext sucht.

In dieser Lerneinheit haben Sie folgende Inhalte gelernt:
  • Erstellen eines webfähigen OSGi-Bundles
  • Erstellen eines Servlets
  • Importieren von Bundleabhängigkeiten mithilfe importierter Pakete
  • Suchen eines OSGi-Service mithilfe der Schnittstelle InitialContext
< 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: counter_lesson4.html