• Nenhum resultado encontrado

Gerenciamento dos registros UDDI

4.2 API JAXR

4.2.2 Gerenciamento dos registros UDDI

A seguir serão mostrados os passos para a criação, manutenção e consulta de registros UDDI usando um provedor de serviços. Para alguns exemplos é necessário fazer um cadastro para obter os dados do usuário e senha. Dois sites que podem ser usados para teste e que implementam a definição UDDI são: http://uddi.rte.microsoft.com e http://www- 3.ibm.com/services/uddi/v2beta/protect/registry.html.

4.2.2.1 Criando uma conexão

Inicialmente deve ser criada uma instância da classe ConnectionFactory. Depois

devemos especificar as URL, que serão usadas para criar a conexão com o provedor de serviços como um conjunto de propriedades. Essas URLs devem ser atribuídas à instância

ConnectionFactory para finalmente criar a conexão. Quando a conexão for feita com o uso

de um firewall, devemos especificar nas propriedades o host e a porta.

...

// criação da instância de ConnectionFactory

ConnectionFactory connFactory = ConnectionFactory.newInstance(); // definição das propriedades

Properties props = new Properties();

props.setProperty(“javax.xml.registry.queryManagerURL”, “http://www-3.ibm.com/services/uddi/v2beta/inquiryapi”); props.setProperty(“javax.xml.registry.lifeCycleManagerURL”, “http://www-3.ibm.com/services/uddi/v2beta/protect/publishapi”); props.setProperty(“javax.xml.registry.factoryClass”, “com.sum.xml.registry.uddi.ConnectionFactoryImpl”); // definição quando o cliente está atras de um firewall

props.setProperty(“javax.xml.registry.http.proxyHost”,”host.dominio”); props.setProperty(“javax.xml.registry.http.proxyPort”,”8080”);

//atribuição das propriedades connFactory.setProperties(props); // criação da conexão

Connection connection = connFactory.createConnection(); ...

4.2.2.2 Obtendo o objeto RegistryService

Depois da criação da conexão o cliente pode obter o objeto RegistryService que

dará acesso aos objetos BusinessQueryManager e BusinessLifeCycleManager para

permitir a consulta e a manutenção dos registros, respectivamente.

...

RegistryService rs = connection.getRegistryService();

// objeto para consulta no registro

BusinessQueryManager bqm = rs.getBusinessQueryManager(); // objeto para manutenção dos dados do registro

BusinessLifeCycleManager blcm = rs.getBusinessLifeCycleManager(); ...

4.2.2.3 Consultando registros

A interface BusinessQueryManager permite a consulta de registros baseados em

métodos que retornam um objeto BulkResponse, que é na verdade uma coleção de objetos.

Os métodos mais utilizados são:

 findOrganization, retorna um conjunto de organizações que preenchem um

determinado critério, como por exemplo o nome;

 findServices, retorna um conjunto de serviços oferecidos pela organização;

 findServiceBinding, retorna as informação de acesso para um determinado serviço.

A seguir temos o exemplo de uma consulta de organizações usando como critério de pesquisa o nome:

...

// definir os critérios de pesquisa

Collection findQualifiers = new ArrayList();

FindQualifiers.add(FindQualifier.SORT_BY_NAME_DESC); Collection namePatterns = new ArrayList();

// procurar empresas que tenham a frase “web service” em qualquer posição NamePatterns.add(“%web service%”);

// aplicar os critérios ao BusinessQueryManager

BulkResponse response = bqm.findOrganization(namePatterns, null, null, null, null); // a resposta é uma coleção de objetos

Collection orgs = response.getCollection(); ...

Depois de encontrar as organizações é possível obter os serviços publicados e a sua forma de acesso. A seguir temos o trecho de um programa que permite a consulta de service

e de serviceBinding.

...

// obter os registros das organizações Iterator orgIter = orgs.iterator(); while ( orgIter.hasNext() ) {

Organization org = (Organization) orgIter.next(); Collection services = org.getServices;

// obter os serviços de cada organização Iterator svcIter = services.iterator(); while ( svc.hasNext() ) {

Service svc = (Service) svcIter.next();

Collection serviceBinding = svc.getServiceBinding();

// obter os serviceBinding de cada serviço Iterator sbIter = serviceBinding.iterator(); while ( sbIter.hasNext() ) {

ServiceBinding sb = (ServiceBinding) sbIter.next(); }

} } ...

4.2.2.4 Manutenção de registros

Para que um usuário possa criar, editar ou remover registros, ele deve possuir uma autorização que é obtida mediante um cadastro no provedor de serviços. No ato do cadastramento, o usuário informará o nome do usuário (username) e a senha (password) que permitirá ter acesso a manutenção dos registros. Estes dois parâmetros devem ser enviados para o provedor de serviços para conseguir uma autorização. Segue o trecho de um programa que tenta abrir uma conexão com autorização:

...

// definição dos dados da autorização String username = “nome_usuario”; String password = “senha_usuario”; // atribuindo os dados da autenticação

PasswordAuthentication passwdAuth = new PasswordAuthentication( username,

password.toCharArray() ); // abertura da conexão autenticada

Set creds = new HashSet(); creds.add(passwdAuth);

connection.setCredentials(creds); ...

A estrutura de dados mais complexa do registro UDDI é a organização. Ela é geralmente composta de: nome (name), descrição (description), chave (key), pessoa de contato (PrimaryContact), classificação (classification), serviços (service) e pontos de

acesso (serviceBindings). A seguir temos um exemplo de como adicionar dados a uma

estrutura do tipo Organization.

...

// Adicionando o nome e a descrição

Organization org = blcm.createOrganization("Andrés Web Service");

InternationalString s = blcm.createInternationalString("criação de web services"); org.setDescription(s);

// Adicionando o contato

User primaryContact = blcm.createUser();

PersonName pName = blcm.createPersonName("Andrés Menéndez"); primaryContact.setPersonName(pName);

TelephoneNumber tNum = blcm.createTelephoneNumber(); tNum.setNumber("(79) 234-5678");

Collection phoneNums = new ArrayList(); phoneNums.add(tNum);

primaryContact.setTelephoneNumbers(phoneNums);

Collection emailAddresses = new ArrayList(); emailAddresses.add(emailAddress);

primaryContact.setEmailAddresses(emailAddresses); // Adicionando o contato à organização

org.setPrimaryContact(primaryContact); ...

As organizações normalmente pertencem a uma ou mais classificações dentro de uma ou mais esquemas de classificação (taxonomia) [11]. O exemplo abaixo adiciona uma classificação usando a taxonomia NAICS (North American Industry Classification System).

...

// Adicionar o esquema de classificação NAICS

ClassificationScheme cScheme = bqm.findClassificationSchemeByName("ntis-gov:naics");

// criar a classificação

Classification classification = (Classification)

blcm.createClassification(cScheme, "Desenvolvimento de Software", "123456"); Collection classifications = new ArrayList();

classifications.add(classification); //adicionar a classificação

org.addClassifications(classifications); ...

Da mesma forma que o objeto Organization, o objeto Service possui um nome e

uma descrição, além disso possui o campo key que é gerado automaticamente quando o

serviço é inserido. Cada serviço pode ter um serviceBinding para informar como ele deve ser acessado, estas informações são compostas de uma descrição, uma URI e um link para maiores informações sobre o serviço. O seguinte exemplo mostra como adicionar um

service e um serviceBinding para uma organização.

...

// Criar o serviço

Collection services = new ArrayList();

Service service = blcm.createService("Reserva");

InternationalString is = blcm.createInternationalString("Reserva de Hotel"); service.setDescription(is);

// Criar o serviceBindings

Collection serviceBindings = new ArrayList();

ServiceBinding binding = blcm.createServiceBinding();

is = blcm.createInternationalString("Descrição da reserva do hotel"); binding.setDescription(is); binding.setAccessURI("http://hotel.com.br:8080/webservice"); serviceBindings.add(binding); // Adicionar o serviceBinding service.addServiceBindings(serviceBindings); // adicionar o serviço services.add(service); org.addServices(services); ...

Para poder adicionar uma organização no provedor de serviços devemos enviar uma solicitação usando o método saveOrganizations. A resposta é a chave do registro que foi

inserido ou uma exceção indicando o tipo do erro. No exemplo a seguir podemos ver como publicar os dados de uma organização.

...

// Publicar a organização

Collection orgs = new ArrayList(); orgs.add(org);

BulkResponse response = blcm.saveOrganization(orgs); // obter as possíveis exceções

Collection exceptions = response.getException(); // verificar se ocorreu alguma exceção

if ( exceptions == null ) { // obter a chave do registro

Collections keys = response.getCollection(); Iterator keyIter = keys.iterator();

if ( keyIter.hasNext() ) {

javax.xml.registry.infomodel.Key orgKey =

(javax.xml.registry.infomodel.Key) keyIter.next();

// obter a chave da organização Org.setKey(orgKey);

} } ...

Para remover os dados do registro é necessário passar como parâmetro a chave que foi retornada pelo método saveOrganization, para um dos métodos de remoção do BusinessLifeCycleManager: deleteOrganization, deleteService e deleteServiceBinding. No seguinte trecho de programa podemos ver a remoção de todos

os dados de uma organização.

...

// obter a chave da organização Collection keys = new ArrayList(); keys.add(key);

//remover a organização

BulkResponse response = blcm.deleteOrganization(keys); // obter as possíveis exceções

Collection exceptions = response.getException();

// verificar se ocorreu alguma exceção if ( exceptions == null ) {

... } ...

Documentos relacionados