Latest web development tutorials

patrón de Servicio de localización

Servicio de localización patrón (patrón Service Locator) para su uso en el posicionamiento que desea utilizar los servicios de búsqueda de JNDI cuando. Teniendo en cuenta el alto precio búsqueda JNDI de un servicio, el patrón Service Locator pleno uso de la tecnología de almacenamiento en caché. En la primera solicitud de un servicio, el servicio en el localizador de servicio de búsqueda JNDI, y almacena en caché el objeto de servicio. Al solicitar el mismo servicio de nuevo, el localizador de servicio busca en su memoria caché, lo que puede mejorar el rendimiento de aplicación en gran medida. La siguiente es una entidad de este patrón de diseño.

  • Servicio (Service) - servicios efectivamente controla la solicitud.Las referencias a estos servicios se pueden encontrar en el servidor JNDI.
  • Contexto / Contexto Inicial - Contexto JNDI con un servicio que desea encontrar una referencia.
  • El localizador de servicios (Service Locator) - localizador de servicios es a través de los servicios de búsqueda y almacenamiento en caché de JNDI para obtener un único punto de servicio de contacto.
  • Caché (caché) - una referencia a los servicios de almacenamiento en caché, con el fin de reutilizarlos.
  • Client (Cliente) - objeto de invocación de clientedel servicio a través de ServiceLocator.

realización

Vamos a crearServiceLocator,InitialContext, caché, servicio como una entidad representa a varios objetos.Service1yServicio2representan los servicios de la entidad.

ServiceLocatorPatternDemo,nuestra clase de demostración aquí como un cliente, se utilizará para demostrar servicioServiceLocatorpatrón de diseño del localizador.

Servicio de localización patrón diagrama UML

Paso 1

Crear un servicio de interfaz de servicio.

Service.java

Interfase de servicio público {
   Public String getName ();
   public void execute ();
}

Paso 2

Crear una entidad de servicio.

Service1.java

Servicio1 clase pública implementa servicio {
   public void ejecutar () {
      System.out.println ( "Ejecución de Servicio1");
   }

   @ Override
   Public String getName () {
      volver "Servicio1";
   }
}

Service2.java

Servicio2 clase pública implementa servicio {
   public void ejecutar () {
      System.out.println ( "Ejecución de Servicio2");
   }

   @ Override
   Public String getName () {
      volver "Servicio2";
   }
}

paso 3

Crear una consulta para el JNDI InitialContext.

InitialContext.java

public class {InitialContext
   Objeto de consulta pública (String jndiName) {
      si (jndiName.equalsIgnoreCase ( "SIRVE1")) {
         System.out.println ( "Mirando hacia arriba y la creación de un nuevo objeto Servicio1");
         volver nueva Servicio1 ();
      } Else if (jndiName.equalsIgnoreCase ( "service2")) {
         System.out.println ( "Mirando hacia arriba y la creación de un nuevo objeto Servicio2");
         volver nueva Servicio2 ();
      }
      return null;		
   }
}

Paso 4

Crear Cache Cache.

Cache.java

java.util.ArrayList importación;
java.util.List importación;

Caché public class {

   Lista de servicio> <servicios privados;

   Cache público () {
      servicios = new ArrayList <Servicio> ();
   }

   Servicio getService pública (String serviceName) {
      para (servicio: servicios) {
         si (service.getName (). equalsIgnoreCase (serviceName)) {
            System.out.println ( "Devolución de caché" + + serviceName "objeto");
            servicio de retorno;
         }
      }
      return null;
   }

   pública addService vacío (Servicio newService) {
      booleano existe = false;
      para (servicio: servicios) {
         si (service.getName (). equalsIgnoreCase (newService.getName ())) {
            existe = true;
         }
      }
      if (! existe) {
         services.add (newService);
      }
   }
}

paso 5

Crear un localizador de servicios.

ServiceLocator.java

ServiceLocator public class {
   Cache cache estática privada;

   estática {
      cache = new Cache ();		
   }

   Servicio public static getService (String jndiName) {

      Servicio = cache.getService (jndiName);

      si (servicio! = null) {
         servicio de retorno;
      }

      InitialContext context = new InitialContext ();
      service1 Servicio = (servicio) Context.lookup (jndiName);
      cache.addService (service1);
      service1 regresar;
   }
}

paso 6

UtiliceServiceLocatorpara demostrar el patrón de diseño del localizador de servicios.

ServiceLocatorPatternDemo.java

ServiceLocatorPatternDemo public class {
   principales argumentos (String []) {public static void
      Servicio de ServiceLocator.getService = ( "Servicio1");
      service.execute ();
      servicio = ServiceLocator.getService ( "Servicio2");
      service.execute ();
      servicio = ServiceLocator.getService ( "Servicio1");
      service.execute ();
      servicio = ServiceLocator.getService ( "Servicio2");
      service.execute ();		
   }
}

paso 7

Verifique la salida.

Mirando hacia arriba y la creación de un nuevo objeto Servicio1
La ejecución de Servicio1
Mirando hacia arriba y la creación de un nuevo objeto Servicio2
La ejecución de Servicio2
Volviendo objeto Servicio1 en caché
La ejecución de Servicio1
Volviendo objeto Servicio2 en caché
La ejecución de Servicio2