Latest web development tutorials

padrão Locator Service

padrão Locator Service (Service Locator Padrão) para uso no posicionamento queremos usar serviços de pesquisa JNDI quando. Tendo em conta o elevado preço consulta JNDI para um serviço, o serviço localizador padrão de plena utilização da tecnologia de cache. No primeiro pedido de um serviço, o serviço no localizador de serviço de pesquisa JNDI, e armazena em cache o objeto de serviço. Ao solicitar o mesmo serviço novamente, o localizador de serviços olha em seu cache, o que pode melhorar o desempenho da aplicação em grande medida. O que se segue é uma entidade deste padrão de projeto.

  • Serviço (Service) - serviços realmente processar o pedido.As referências a estes serviços podem ser encontrados no servidor JNDI.
  • Contexto / contexto inicial - Contexto JNDI com um serviço que você deseja encontrar uma referência.
  • O localizador de serviço (Service Locator) - localizador de serviço é através de serviços de pesquisa e cache de JNDI para obter um único ponto de serviço de contato.
  • Cache (Cache) - uma referência para os serviços de armazenamento de cache, a fim de reutilizá-los.
  • Cliente (Cliente) - objeto de chamada do clientedo serviço através ServiceLocator.

realização

Vamos criarServiceLocator,InitialContext, Cache, Serviço como uma entidade representa vários objetos.Service1eService2representam serviços entidade.

ServiceLocatorPatternDemo,a nossa classe de demonstração aqui como um cliente, será usado para demonstrar serviçoServiceLocatorpadrão de design localizador.

padrão Locator Service UML diagrama

passo 1

Criar um serviço de interface de serviço.

Service.java

Serviço interface pública {
   Cadeia getName pública ();
   public void execute ();
}

passo 2

Criar uma entidade de serviço.

Service1.java

public class Service1 implementa Serviço {
   public void execute () {
      System.out.println ( "Execução Service1");
   }

   @Override
   Cadeia getName pública () {
      retornar "Service1";
   }
}

Service2.java

classe pública Service2 implementa Serviço {
   public void execute () {
      System.out.println ( "Execução Service2");
   }

   @Override
   Cadeia getName pública () {
      retornar "Service2";
   }
}

passo 3

Crie uma consulta para o JNDI InitialContext.

InitialContext.java

classe pública InitialContext {
   lookup public Object (String jndiName) {
      if (jndiName.equalsIgnoreCase ( "Service1")) {
         System.out.println ( "Olhando para cima e criando um novo objeto Service1");
         return new Service1 ();
      } Else if (jndiName.equalsIgnoreCase ( "Service2")) {
         System.out.println ( "Olhando para cima e criando um novo objeto Service2");
         retornar nova Service2 ();
      }
      return null;		
   }
}

passo 4

Criar Cache Cache.

Cache.java

importação java.util.ArrayList;
import java.util.List;

Cache classe pública {

   Lista <serviço> serviços privados;

   Cache pública () {
      serviços = new ArrayList <Service> ();
   }

   Serviço getService pública (String serviceName) {
      for (Serviço: Serviços) {
         Se (service.getName (). equalsIgnoreCase (serviceName)) {
            System.out.println ( "Retornando em cache" + serviceName + "objeto");
            serviço de retorno;
         }
      }
      return null;
   }

   addService public void (Service NewService) {
      boolean existe = false;
      for (Serviço: Serviços) {
         Se (service.getName (). equalsIgnoreCase (newService.getName ())) {
            existe = true;
         }
      }
      if (! existe) {
         services.add (NewService);
      }
   }
}

passo 5

Criar um localizador de serviço.

ServiceLocator.java

ServiceLocator classe pública {
   Cache Cache estática privado;

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

   Serviço público estático getService (String jndiName) {

      Serviço = cache.getService (jndiName);

      if (serviço! = null) {
         serviço de retorno;
      }

      InitialContext context = new InitialContext ();
      service1 Service = (Service) context.lookup (jndiName);
      cache.addService (service1);
      voltar service1;
   }
}

passo 6

UseServiceLocatorpara demonstrar o padrão de design localizador de serviço.

ServiceLocatorPatternDemo.java

ServiceLocatorPatternDemo classe pública {
   main (String [] args) public static void {
      Serviço = ServiceLocator.getService ( "Service1");
      service.execute ();
      service = ServiceLocator.getService ( "Service2");
      service.execute ();
      service = ServiceLocator.getService ( "Service1");
      service.execute ();
      service = ServiceLocator.getService ( "Service2");
      service.execute ();		
   }
}

etapa 7

Verifique saída.

Olhando para cima e criando um novo objeto Service1
executando Service1
Olhando para cima e criando um novo objeto Service2
executando Service2
Retornando em cache objeto Service1
executando Service1
Retornando em cache objeto Service2
executando Service2