< Anterior | Siguiente >

Lección 6: añadir inyección de dependencias dentro de un paquete

La inyección de dependencias permite que un bean acceda a otro bean sin tener que implementar ningún código para crear la instancia de bean. La instancia de bean necesaria la crea el contenedor blueprint utilizando la información que se encuentra en el archivo de configuración blueprint.

Antes de empezar esta lección, detenga el servidor. En la vista Servidores (Ventana > Mostrar vista > Servidores), pulse ele botón derecho del ratón en WebSphere Application Server y seleccione Detener.
Para añadir la inyección de dependencias en un paquete:
  1. Adición de un servicio en el paquete
  2. Actualización del archivo de configuración blueprint
  3. Actualización del servlet para invocar el servicio nuevo
  4. Despliegue de la aplicación

Adición de un servicio en el paquete

  1. Cree la clase de interfaz:
    1. En el Explorador empresarial, expanda CounterServiceBundle > src.
    2. Pulse el botón derecho del ratón en com.ibm.ws.eba.counter y, a continuación, seleccione Nuevo > Interfaz. Se abrirá el asistente Nueva interfaz Java™.
    3. En el campo Nombre, escriba Saludo y, a continuación, pulse Finalizar. Se creará la interfaz en el paquete y se abrirá en el editor.
    4. Añada el prototipo getText() a la interfaz. El código siguiente es el resultado:
      package com.ibm.ws.eba.counter;
      
      public interface Greet {
      		public String getText();
      }
  2. Cree la clase de implementación:
    1. Pulse el botón derecho del ratón en com.ibm.ws.eba.counter y, a continuación, seleccione Nuevo > Clase. Se abrirá el asistente Nueva clase Java.
    2. En el campo Nombre, escriba GreetImpl.
    3. Junto a la lista de interfaces, pulse Añadir. Se abrirá el diálogo Solución de interfaces implementadas.
    4. En el campo Elegir interfaces, escriba Saludo. Seleccione la interfaz Saludo y, a continuación, pulse Aceptar.
    5. Pulse Finalizar. Se creará la clase en el paquete y se abrirá en el editor.
    6. Sustituya la clase GreetImpl por la implementación siguiente:
      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. Guarde GreetImpl.java.
La variable privada counter es la referencia a una instancia del servicio Contador que inicializa el contenedor utilizando la inyección de dependencias. Se establece utilizando el método setCounter.

Actualización del archivo de configuración blueprint

Lleve a cabo los pasos siguientes para configurar el archivo de configuración blueprint para iniciar el servicio Saludo e inyectar una instancia del servicio Contador:
  1. En el Explorador empresarial, pulse el botón derecho del ratón en CounterServiceBundle y, a continuación, seleccione OSGi > Abrir archivo blueprint para que se abra el archivo blueprint en el editor.
  2. Añada la información de configuración y ensamblaje de componentes en el archivo de configuración blueprint:
    1. En la pestaña Diseño del editor, seleccione Blueprint y, a continuación, pulse Añadir. Se abrirá el diálogo Añadir elemento.
    2. Pulse Bean y, a continuación, pulse Aceptar. Se abrirá el diálogo Detalles del bean.
    3. Configure el bean:
      1. En el campo ID de bean, escriba GreetBean.
      2. En el campo Clase, pulse Examinar. Se abrirá el diálogo Selección de tipo. En el campo Elegir nombre de tipo, escriba GreetImpl y, a continuación, seleccione la clase GreetImpl. Pulse Aceptar.
      3. Pulse Aceptar para aceptar los cambios y cerrar el diálogo.
      4. En el campo Método de inicialización del editor, escriba init.
      Se añade el bean al archivo blueprint.
    4. En la sección visión general, pulse GreetBean (Bean) y, a continuación, pulse Añadir. Se abrirá el diálogo Añadir elemento.
    5. Pulse Propiedad y, a continuación, pulse Aceptar.
    6. Configure la Propiedad:
      • En el campo Nombre, escriba counter.
      • En el campo Referencia, pulse Examinar. Se abrirá el diálogo Selección de la referencia. Pulse Bean: CounterBean y, a continuación, pulse Aceptar.
    7. En la sección Visión general, pulse Blueprint y, a continuación, pulse Añadir.
    8. Pulse Servicio y, a continuación, pulse Aceptar. Se abrirá el diálogo Detalles del servicio.
    9. Configure el servicio:
      1. En el campo Interfaz de servicio, pulse Examinar y, a continuación, seleccione la interfaz Saludo.
      2. En el campo Referencia de bean, pulse Examinar y, a continuación, seleccione Bean: GreetBean. Pulse Aceptar.
      3. Pulse Aceptar para aceptar los cambios y cerrar el diálogo.
      El servicio se añade a su configuración.
  3. Guarde el archivo.

Actualización del servlet para invocar el servicio nuevo

  1. En el Explorador empresarial, expanda CounterWebBundle > Recursos Java > src > com.ibm.ws.eba.servlet.
  2. Efectúe una doble pulsación en CounterServlet.java para que se abra en el editor.
  3. Localice el método doGet() y sustitúyalo por la implementación siguiente:
    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. En el menú principal, pulse Origen > Organizar importaciones. Se actualizan las sentencias de importación.
  5. Guarde CounterServlet.java.

Despliegue de la aplicación

  1. En el Explorador empresarial, expanda CounterWebBundle > CounterWebBundle > Servlets.
  2. Pulse el botón derecho del ratón en CounterServlet y seleccione Ejecutar como > Ejecutar en servidor. Se abre el diálogo Ejecutar en servidor.
  3. Pulse Finalizar.

Aparecerá la serie greet.getText()=0 Hello en el navegador. Cada vez que se vuelve a cargar la página, incrementa el valor.

Conmute a la vista Consola (Ventana > Mostrar vista > Consola) para ver la salida del servidor. Un resultado satisfactorio muestra la salida de CounterImpl.init() y GreetImpl.init(), en base a las entradas del método de inicialización para los beans CounterImpl y GreetImpl del archivo 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: Cargando módulo web: CounterWebBundle.
[3/30/10 16:59:42:453 EDT] 00000072 WASSessionCor I SessionContextRegistry getSessionContext SESN0176I: Se creará un contexto de sesión nueva para la clave de aplicaciones default_hostCounterWebBundle
[3/30/10 16:59:42:468 EDT] 00000072 webcontainer  I com.ibm.ws.wswebcontainer.VirtualHost addWebApplication SRVE0250I: El módulo web CounterWebBundle se ha enlazado a default_host[*:9083,*:80,*:9446,*:5067,*:5066,*:443].
[3/30/10 16:59:42:468 EDT] 00000072 FileLocatorIm E   CWPST0164E: No se encuentra la unidad de composición CounterWebBundle.
[3/30/10 16:59:42:500 EDT] 00000072 StepStartBLA  A   CWWMH0196I: La aplicación de nivel empresarial "WebSphere:blaname=CounterApp" se ha iniciado correctamente.
[3/30/10 16:59:42:500 EDT] 00000016 SystemOut     O Se ha invocado CounterImpl.init()
[3/30/10 16:59:42:500 EDT] 00000016 SystemOut     O Se ha invocado GreetImpl.init()
Nota: Si no se visualiza la salida de CounterImpl.init() y GreetImpl.init() en la salida de la consola compruebe en la salida los mensajes de error durante el desarrollo o el arranque de la aplicación y, a continuación, compruebe en los archivos blueprint los posibles errores en las definiciones del bean y de servicio.

Punto de comprobación de la lección

Ha aprendido a utilizar la inyección de dependencias blueprint para permitir que un bean utilice los servicios de otros.

En esta lección ha aprendido los temas siguientes:
  • Cómo escribir el código para un bean que utiliza otro bean.
  • Cómo definir la propiedad en el archivo de configuración blueprint que indica al contenedor blueprint que inicialice la variable mediante la inyección de dependencias.
< 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_lesson7.html