Keygenerator en uddi

De ChuWiki

Cuando publicamos algo en UDDI, lo normal es que las claves para esas entradas las genere automáticamente UDDI. Esas claves pueden tener una pinta similar a esta

uddi:juddi.apache.org:0be15ab9-6197-4e8a-b7e6-0aca816088ed

Sin embargo, a partir de la versión 3 de UDDI, podemos decidir nuestras propias claves, eso sí, necesitamos cumplir una serie de requisitos de forma que se garantice que las claves son únicas, sin posibilidad de solapamiento.

Las claves normalmente se crean con un dominio delante. En el caso anterior, el dominio es

uddi:juddi.apache.org

pero el dominio puede ser cualquiera que nosotros queramos, del estilo

uddi:dominio.que.queramos

y podemos además añadir todos los subdominios que queramos, separándolos con :

uddi:dominio.que.queramos:un.subdominio:otro.subdominio

Para poder generar nuestras propias claves, debemos hacernos propietarios del generador de claves de ese dominio. Eso no es más que hacer una entrada en el TModel de UDDI de forma que su clave sea

uddi:dominio.que.queramos:keygenerator

Y si queremos subdominios, tenemos que hacer una entrada por cada subdominio

uddi:dominio.que.queramos:un.subdominio:keygenerator
uddi:dominio.que.queramos:un.subdominio:otro.subdominio:keygenerator

El código java para crear esa entrada puede ser como este

// Obtencion del token de usuario/password
UDDISecurityPort serv = new UDDISecurityPort();
UDDISecurityPortType servPort = serv.getUDDISecurityServicePort();

GetAuthToken body = new GetAuthToken();
body.setUserID("usuario");
body.setCred("password");
token = servPort.getAuthToken(body);

...

UDDIPublishPort upp = new UDDIPublishPort();
UDDIPublicationPortType uppt = upp.getUDDIPublishServicePort();

// Preparamos los datos que vamos a salvar
SaveTModel stm = new SaveTModel();
stm.setAuthInfo(token.getAuthInfo());

TModel tm = new TModel();

// Un nombre para la entrada en tmodel, el que queramos.
Name nombre = new Name();
nombre.setValue("mi propio generador");
tm.setName(nombre);

// La clave, que es el keygenerator
tm.setTModelKey("uddi:dominio.que.queramos:keygenerator");

// una descripcion, la que queramos
Description descripcion = new Description();
descripcion.setValue("Generador claves de dominio.que.queramos");
tm.getDescription().add(descripcion);

// Indicamos que esta entrada corresponde a un generador de claves.
CategoryBag cb = new CategoryBag();
KeyedReference kr = new KeyedReference();
kr.setKeyName("keyGenerator");
kr.setKeyValue("keyGenerator");
kr.setTModelKey("uddi:uddi.org:categorization:types");
cb.getKeyedReference().add(kr);
tm.setCategoryBag(cb);

stm.getTModel().add(tm);

// publicamos
TModelDetail tmd = uppt.saveTModel(stm);

Todas las clases que aparecen aquí provienen de obtener las clases de cliente del wsdl correspondiente (publish.wsdl y security.wsdl).

A partir de este momento, cada vez que hagamos publish "algo", podemos poner nuestra propia clave del estilo

uddi:dominio.que.queramos:mi-propia-clave

siempre y cuando entremos con el mismo usuario/password con el que creamos el keygenerator. Ese usuario es ahora el único responsable de generar claves en el dominio uddi:dominio.que.queramos, el que debe garantizar que son únicas y el único que puede crear otros subdominios por debajo.