Latest web development tutorials

motif Locator Service

motif Locator Service (Pattern Service Locator) pour une utilisation dans le positionnement que nous voulons utiliser les services de consultation JNDI quand. Tenant compte de la recherche JNDI prix élevé pour un service, le service Localisateur modèle pleine utilisation de la technologie de mise en cache. Dans la première demande d'un service, le service dans le localisateur de services de recherche JNDI, et met en cache l'objet de service. Lors d'une demande de nouveau le même service, le localisateur de services regarde dans son cache, ce qui peut améliorer les performances des applications dans une large mesure. Ce qui suit est une entité de ce modèle de conception.

  • Service (Service) - les services de manutention en fait la demande.Les références à ces services peuvent être trouvés sur le serveur JNDI.
  • Contexte / Contexte initial - JNDI Contexte avec un service que vous voulez trouver une référence.
  • Le localisateur de service (Service Locator) - localisateur de services est par les services de recherche et de mise en cache JNDI pour obtenir un point de service de contact unique.
  • Cache (Cache) - une référence aux services de stockage du cache, afin de les réutiliser.
  • Client (Client) - objet clientinvocation du service par ServiceLocator.

réalisation

Nous allons créerServiceLocator,InitialContext, Cache, service comme une entité représente divers objets.Service1etService2représentent les services de l' entité.

ServiceLocatorPatternDemo,notre classe de démonstration ici en tant que client, sera utilisé pour démontrer modèle de conception de localisateur de servicesde ServiceLocator.

motif Locator Service diagramme UML

Etape 1

Créer un service d'interface de service.

Service.java

Service public interface {
   public String getName ();
   public void execute ();
}

Etape 2

Créer une entité de service.

Service1.java

Service1 public class implémente la fonction {
   public void execute () {
      System.out.println ( "Exécution Service1");
   }

   @Override
   public String getName () {
      retour "Service1";
   }
}

Service2.java

Service2 public class implémente la fonction {
   public void execute () {
      System.out.println ( "Exécution Service2");
   }

   @Override
   public String getName () {
      retour "Service2";
   }
}

Etape 3

Créer une requête pour le JNDI InitialContext.

InitialContext.java

public class InitialContext {
   Public Object recherche (String jndiName) {
      if (jndiName.equalsIgnoreCase ( "SERVICE1")) {
         System.out.println ( "Looking up et la création d'un nouvel objet Service1");
         return new Service1 ();
      } Else if (jndiName.equalsIgnoreCase ( "SERVICE2")) {
         System.out.println ( "Looking up et la création d'un nouvel objet Service2");
         return new Service2 ();
      }
      return null;		
   }
}

Etape 4

Créer Cache Cache.

Cache.java

import java.util.ArrayList;
import java.util.List;

Cache public class {

   Liste <Service> services privés;

   Cache publique () {
      services = new ArrayList <service> ();
   }

   Service public getService (String serviceName) {
      pour (service de service: services) {
         if (service.getName (). equalsIgnoreCase (serviceName)) {
            System.out.println ( "Returning cache" + serviceName + "objet");
            service de retour;
         }
      }
      return null;
   }

   addService public void (Service NewService) {
      booléen existe = false;
      pour (service de service: services) {
         if (service.getName (). equalsIgnoreCase (newService.getName ())) {
            existe = true;
         }
      }
      if (! existe) {
         services.add (NewService);
      }
   }
}

Etape 5

Créer un localisateur de service.

ServiceLocator.java

public class ServiceLocator {
   cache privé Cache statique;

   statique {
      cache = new Cache ();		
   }

   Service public static getService (String jndiName) {

      Service de service = cache.getService (jndiName);

      if (service! = null) {
         service de retour;
      }

      InitialContext context = new InitialContext ();
      service1 de service = (Service) context.lookup (jndiName);
      cache.addService (service1);
      retour service1;
   }
}

Etape 6

UtilisezServiceLocatorpour démontrer le modèle de conception de localisateur de services.

ServiceLocatorPatternDemo.java

public class ServiceLocatorPatternDemo {
   main (String [] args) {public static void
      Service de service = ServiceLocator.getService ( "Service1");
      service.execute ();
      service = ServiceLocator.getService ( "Service2");
      service.execute ();
      service = ServiceLocator.getService ( "Service1");
      service.execute ();
      service = ServiceLocator.getService ( "Service2");
      service.execute ();		
   }
}

Etape 7

Vérifiez la sortie.

En levant les yeux et la création d'un nouvel objet Service1
exécution Service1
En levant les yeux et la création d'un nouvel objet Service2
exécution Service2
Renvoyer objet Service1 en cache
exécution Service1
Renvoyer objet Service2 cache
exécution Service2