Agora partirei da idéia que o cliente já encontrou um lookup service e necessita agora encontrar um serviço.
Imagine que o cliente já possua um objeto ServiceRegistrar que recebeu do lookup service. Ele irá utilizar esse objeto para realizar a sua busca, através do método
lookup()
public Class ServiceRegistrar {
public java.lang.Object lookup(ServiceTemplate tmpl)throw java.rmi.RemoteException;
public ServiceMatches lookup(ServiceTemplate tmpl,int maxMatches)throws java.rmi.RemoteException;
}
Esses métodos usam a casse ServiceTemplate para especificar o serviço que ela está procurando, como abaixo:
package net.jini.core.lookup;
public Class ServiceTemplate {
public ServiceID serviceID;
public java.lang.Class[] serviceTypes;
public Entry[] attributeSetTemplates;
ServiceTemplate(ServiceID serviceID,
java.lang.Class[] serviceTypes,
Entry[] attrSetTemplates);
}
Se não conhecido o ID do seerviço, deve ser setado como nulo.
O atributo attributeSetTemplates é um conjunto de entradas usado para chocar os atributos.
O atributo de lookup() é um template e isso é um pouco complexo de entender, vamos por partes.
A classe que oriunda o serviço, como por exemplo Imprimir, Lavar, Secar, todas as que você possa imaginar, descrevem o que o serviço deve ter. Quem implementar essa classe, como por exemplo ImpressoraColorida, ImpressoraLaser, entre outrar, é que dizem como se faz a impressão. para que o cliente encontre a qual ele deseja, é necessário criar uma classe:
Class[] impressoraClasses = new Class[1]; impressoraClasses = Imprimir.class; ServiceTemplate template = new ServiceTemplate(null, impressoraClasses, null);
Esse atributo sera utilizado para a criação de um template e passado para o lookup:
Imprimir imp = null; imp = (Imprimir) registrar.lookup(template) ;
O objeto que imp receber será o objeto do serviço ao qual ele procura.
Existem ainda mais alguns detalhes de como o cliente escolhe o serviço, mas por hora isso já é suficiente.