Keygenerator en uddi
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.