A JAX-R (Java API for XML Registries) é uma biblioteca Java que permite o acesso a registos de serviços, como o UDDI.
As aplicações clientes usam uma biblioteca para efectuarem as suas publicações, eliminações e pesquisas.
O JAX-R pode permitir a invocação de Web Services, cuja localização apenas é determinada em tempo de execução.
O servidor usa JAX-R para publicar (1) a sua localização no registo UDDI.
A seguir, o cliente usa JAX-R para pesquisar (2) no registo UDDI a localização do servidor.
Finalmente, conhecido o URL do servidor, o cliente efectua a chamada remota
de procedimento usando Web Services (3).
Os objectos da biblioteca JAX-R (pacote javax.xml.registry.infomodel) implementam um esquema de dados muito próximo do UDDI. O mapeamento de um para outro é quase directo, só mudam alguns nomes.
As principais classes da biblioteca são:
Para questões de maior detalhe, uma boa referência é o: manual sobre o uso JAX-R para acesso a UDDI.
De seguida damos uma explicação muito resumida sobre como programar com esta biblioteca.
...
ConnectionFactory connFactory = ConnectionFactory.newInstance();
...
// Para uma correcta ligação ao UDDI registry, é necessário definir vários
// parâmetros (properties), desde a versão do UDDI aos URLs de publicação e pesquisa do registry
Properties props = new Properties();
// Localização do ficheiro de configuração da ligação,
// que deve estar na directoria WEB-INF/classes do .war
props.setProperty("scout.juddi.client.config.file", "uddi.xml");
// URL para pesquisas ao UDDI registry
props.setProperty("javax.xml.registry.queryManagerURL", "http://localhost:9090/juddiv3/services/inquiry");
// URL para publicar dados no UDDI registry
props.setProperty("javax.xml.registry.lifeCycleManagerURL", "http://localhost:9090/juddiv3/services/publish");
// URL do gestor de segurança do UDDI registry
props.setProperty("javax.xml.registry.securityManagerURL", "http://localhost:9090/juddiv3/services/security");
// Versão UDDI que o registry usa
props.setProperty("scout.proxy.uddiVersion", "3.0");
// Protocolo de transporte usado para invocações ao UDDI registry
props.setProperty("scout.proxy.transportClass", "org.apache.juddi.v3.client.transport.JAXWSTransport");
connFactory.setProperties(props);
// Finalmente, estabelece a ligação ao UDDI registry
Connection connection = connFactory.createConnection();
// Define credenciais de autenticação a usar para interacção com o UDDI registry
// Nota: o jUDDI fornecido para utilização no projecto está configurado
// para aceitar qualquer par username/password; no mundo real, não é assim
PasswordAuthentication passwdAuth = new PasswordAuthentication("username", "password".toCharArray());
Set creds = new HashSet();
creds.add(passwdAuth);
connection.setCredentials(creds);
// Obter objecto RegistryService
RegistryService rs = connection.getRegistryService();
// Obter objecto QueryManager da JAXR Business API
// (caso se pretenda fazer pesquisas)
BusinessQueryManager businessQueryManager = rs.getBusinessQueryManager();
// Obter objecto BusinessLifeCycleManager da JAXR Business API
// (caso se pretenda registar/alterar informação no UDDI registry)
BusinessLifeCycleManager businessLifeCycleManager = rs.getBusinessLifeCycleManager();
// Definir critério de pesquisa por nome
Collection findQualifiers = new ArrayList();
findQualifiers.add(FindQualifier.SORT_BY_NAME_DESC);
// Neste exemplo, pretendemos pesquisar as organizações cujo nome inclua "Fly"
Collection namePatterns = new ArrayList();
namePatterns.add("%Fly%");
// Efectua a pesquisa
BulkResponse r = bqm.findOrganizations(findQualifiers, namePatterns, null, null, null, null);
Collection orgs = r.getCollection();
for (Organization o : orgs) {
// Aqui posso consultar cada organização encontrada (e os respectivos serviços)
// Posso também alterar/criar elementos (por exemplo, serviços) e
// registar as alterações usando o businessLifeCycleManager
}
// Cria nova Organização (em memória, ainda não registada no UDDI)
Organization org = businessLifeCycleManager.createOrganization("Fly Away Airline Travel Agents");
// Cria serviço (em memória)
Service service = businessLifeCycleManager.createService("Fly Away Airline Reservation Service");
service.setDescription(businessLifeCycleManager.createInternationalString("Flight Reservation Service"));
// Cria serviceBinding
ServiceBinding serviceBinding = businessLifeCycleManager.createServiceBinding();
serviceBinding.setDescription(businessLifeCycleManager.
createInternationalString("Information for airline reservation service access"));
serviceBinding.setValidateURI(false);
serviceBinding.setAccessURI("http://www.airlinetravel.com:8080/airlineService/service");
// Adiciona o serviceBinding ao serviço
service.addServiceBinding(serviceBinding);
// Adiciona o serviço à organização
org.addService(service);
Collection orgs = new ArrayList();
orgs.add(org);
// Finalmente, regista a organização e serviço no UDDI registry
BulkResponse br = businessLifeCycleManager.saveOrganizations(orgs);
if (br.getStatus() == JAXRResponse.STATUS_SUCCESS) {
System.out.println("Successfully saved the organization to the registry provider.");
} else {
System.out.println("Error when saving the organization to the registry provider.");
}
Collection keys = new ArrayList();
keys.add(organizationToDelete.getKey());
businessLifeCycleManager.deleteOrganizations(keys);
© Docentes de Sistemas Distribuídos,
Dep. Eng. Informática,
Técnico Lisboa