< Anterior | Siguiente >

Lección 4: Crear un servlet que accede a un servicio OSGi

En esta lección, va a crear un paquete habilitado para web para que contenga un servlet que accede al servicio de contador y visualiza los resultados del servicio. El servlet accede al servicio OSGi buscando el servicio a través de InitialContext de JNDI.

Creación de un paquete habilitado para web

Para crear el paquete habilitado para web que contiene el servlet:
  1. Pulse Archivo > Nuevo > Otros y, a continuación, expanda OSGi.
  2. Pulse Proyecto de paquete OSGi y, a continuación, pulse Siguiente. Se abrirá la ventana Nuevo proyecto de paquete OSGi.
  3. En el campo Nombre de proyecto, escriba CounterWebBundle.
  4. Seleccione uno de los servidores siguientes de la lista de tiempo de ejecución de destino:
    • WebSphere Application Server v7.0
    • WebSphere Application Server v8.0
    • WebSphere Application Server v8.5
    • WebSphere Application Server V8.5 Liberty Profile
  5. En la sección Configuración, pulse Añadir soporte web y seleccione Web 2.5 de la lista de soporte web.
  6. Asegúrese de que se visualice CounterApp en el campo Proyecto de aplicación y, a continuación, pulse Finalizar.

Creación de un servlet

Para crear el servlet que accede al servicio de contador:
  1. En el Explorador empresarial, pulse CounterWebBundle y, a continuación, seleccione Nuevo > Servlet. Se abrirá el asistente Crear servlet.
  2. En el campo Paquete Java, escriba com.ibm.ws.eba.servlet.
  3. En el campo Nombre de clase, escriba CounterServlet y, a continuación, pulse Finalizar. El servlet se crea en el paquete y se abre en el editor.

Adición de paquetes necesarios en el manifiesto de paquete

Para añadir paquetes necesarios al manifiesto de paquete:
  1. Efectúe una doble pulsación en Manifiesto: CounterWebBundle para abrirlo en el editor.
  2. Vaya a la pestaña Dependencias.
  3. En la sección Paquetes importados, pulse Añadir. Se abrirá el diálogo Selección de paquete.
  4. En el campo Paquetes exportados, escriba com.ibm.ws.eba.counter.
  5. Seleccione com.ibm.ws.eba.counter de la lista y, a continuación, pulse Aceptar. La sección Paquetes importados tiene un aspecto similar al diagrama siguiente:
    Paquetes importados.
    Nota: Si el servidor de ejecución de destino es WebSphere Application Server V8.5 Liberty Profile, también debe importar el paquete javax.naming. La importación del paquete javax.naming evita errores de ClassNotFoundException cuando se ejecuta la aplicación. En los pasos siguientes se describe cómo importar el paquete javax.naming:
    1. En la sección Paquetes importados, pulse Añadir. Se abrirá el diálogo Selección de paquete.
    2. En el campo Paquetes exportados, escriba javax.naming.
    3. Seleccione javax.naming de la lista y, a continuación, pulse Aceptar.
    Si no importa el paquete, se producirá un error ClassNotFoundException cuando ejecute la aplicación en WebSphere Application Server con Liberty Profile. El error se produce porque la aplicación espera el paquete con la clase que falta para que la proporcione el servidor de ejecución en lugar de que se proporcione como paquete del usuario.
  6. Guarde el archivo de manifiesto de paquete.

Creación de la implementación para buscar un servicio OSGi

En los pasos siguientes se describe cómo crear la implementación para el método doGet(), que busca un servicio OSGi utilizando InitialContext:
  1. En el Explorador empresarial, efectúe una doble pulsación en CounterServlet.java para que se abra en el editor.
  2. Localice el método doGet() y añada la siguiente implementación:
    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. En el menú principal, pulse Origen > Organizar importaciones. Se abrirá el diálogo Organizar importaciones.
  4. Seleccione com.ibm.ws.eba.counter.Counter y, a continuación, pulse Finalizar.
  5. Guarde CounterServlet.java.
El código del servlet tiene un aspecto similar al código siguiente:
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;

/**
 * Clase de implementación del servlet CounterServlet
 */
public class CounterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * Constructor predeterminado.
     */
    public CounterServlet() {
        // Tareas pendientes: Apéndice de constructor generado automáticamente
    }

	/**
	 * @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 {
// Tareas pendientes: Apéndice de método generado automáticamente
	}

}

Punto de comprobación de la lección

Ha creado el servlet que accede a un servicio OSGi buscando el servicio a través de un InitialContext JNDI.

En esta lección ha aprendido los temas siguientes:
  • Cómo crear un paquete OSGi habilitado para web.
  • Cómo crear un servlet.
  • Cómo importar dependencias de paquetes utilizando Paquetes importados.
  • Cómo buscar un servicio OSGi utilizando InitialContext.
< Anterior | Siguiente >
Icono que indica el tipo de tema Tema de lección de guía de aprendizaje
Términos y condiciones para centros de información | Comentarios

Icono de indicación de fecha y hora Última actualización: 22 de abril de 2014

Nombre de archivo: counter_lesson4.html