Utilice el fragmento de código y los gráficos de datos para crear un tipo de entidad, que se extiende desde un tipo de entidad incorporado, en el espacio de nombres predeterminado.
En este fragmento de código de ejemplo se incluyen los pasos siguientes:
Asegúrese de leer la información y completar los pasos que se describen en el tema Requisitos previos de programación, incluida la sección Ampliación del esquema de propiedad, que contiene información sobre los objetos de datos propertySchema y extensionPropertySchema e indica la sintaxis válida para los tipos de datos de propiedad.
import com.ibm.websphere.wim.exception.SchemaAlreadyExistException;
Asegúrese de que se haya configurado un depósito LDAP en la configuración de los depósitos federados. Para obtener información consulte el tema Configuración de Lightweight Directory Access Protocol en una configuración de depósito federado en el Information Center de WebSphere Application Server.
Añada el siguiente fragmento de código al código de aplicación y sustituya las variables por los valores reales que desea utilizar.
/**
* Este método usa la API de extensión de esquema para añadir una nueva entidad
* que se extiende desde una entidad existente de virtual member manager.
*/
public static void testRunTimeAddNewEntity()
{
// Crear esquema para nuevo tipo de entidad
addEntityPersonAccountExt();
// Crear entidad de nuevo tipo de entidad
createPersonAccountExt();
// Añadir una propiedad 'HomePhone' a 'PersonAccountExt' y
// correlacionarla con el atributo 'primaryOwnerContact' en LDAP
addPropertyToPersonAccountExt();
// Añadir 'HomePhone' a 'person1'
addHomePhoneForPersonAccountExt();
// Buscar la persona
searchPersonAcctExt();
}
/**
* Método para crear el esquema para 'PersonAccountExt' en el espacio de nombres predeterminado
*/
@SuppressWarnings("unchecked")
private static void addEntityPersonAccountExt()
{
try
{
System.out.println("\nCLIENT: Creating schema for 'PersonAccountExt' . . . ");
DataObject root = SDOHelper.createRootDataObject();
// Crear un objeto de esquema bajo root
DataObject dynaSchemaDO = root.createDataObject(SchemaConstants.DO_SCHEMA);
// Crear objeto de esquema de tipo de entidad nuevo. Este objeto incluirá la definición de esquema para
// el tipo de entidad 'PersonAccountExt' que queremos crear.
DataObject entitySchemaDO = dynaSchemaDO.createDataObject(SchemaConstants.DO_ENTITY_SCHEMA);
// Establecer el espacio de nombres para el nuevo tipo de entidad
entitySchemaDO.setString(SchemaConstants.PROP_NS_URI, SchemaConstants.WIM_NS_URI);
// Establecer el nombre de tipo de entidad
entitySchemaDO.set(SchemaConstants.PROP_ENTITY_NAME, "PersonAccountExt");
// Establecer el nombre de tipo de entidad padre.
entitySchemaDO.set(SchemaConstants.PROP_PARENT_ENTITY_NAME, Service.DO_PERSON_ACCOUNT);
// Crear un objeto de datos de configuración de entidad
// Este objeto de datos define los detalles del depósito
DataObject entConfigDO = entitySchemaDO.createDataObject(SchemaConstants.DO_ENTITY_CONFIGURATION);
// Establecer el padre predeterminado en la entrada base del LDAP configurado.
entConfigDO.set(SchemaConstants.PROP_DEFAULT_PARENT, "dc=yourco,dc=com");
// Establecer la propiedad de RDN (inicio de sesión) en uid.
entConfigDO.set(SchemaConstants.PROP_RDN_PROPERTY, "uid");
// Establecer el ID de depósito.
DataObject reposConfigInfo1DO = entConfigDO.createDataObject(SchemaConstants.DO_META_DATA);
reposConfigInfo1DO.set(SchemaConstants.PROP_NAME, ConfigService.CONFIG_DO_OBJECTCLASSES);
reposConfigInfo1DO.set(SchemaConstants.PROP_REPOSITORY_ID, "LDAP1");
// Establecer las clases de objeto para el objeto añadido. Estas clases son del esquema LDAP.
List objReadValues = reposConfigInfo1DO.getList(SchemaConstants.PROP_VALUES);
objReadValues.add("inetorgperson");
objReadValues.add("organizationalperson");
objReadValues.add("person");
// Establecer la propiedad de RDN para el depósito
DataObject reposConfigInfo3DO = entConfigDO.createDataObject(SchemaConstants.DO_META_DATA);
reposConfigInfo3DO.set(SchemaConstants.PROP_NAME, ConfigService.CONFIG_DO_RDN_ATTRIBUTES);
reposConfigInfo3DO.set(SchemaConstants.PROP_REPOSITORY_ID, "LDAP1");
List values = reposConfigInfo3DO.getList(SchemaConstants.PROP_VALUES);
values.add("uid");
System.out.println("Create Schema input datagraph -> " + printDO(root));
// Invocar la API de creación de esquema
DataObject outRoot = service.createSchema(root);
System.out.println("Create Schema output datagraph -> " + printDO(outRoot));
System.out.println("\nCLIENT: new entity type is created.");
}
catch (SchemaAlreadyExistException e)
{
System.out.println("CLIENT: entity type already exists.\n\n");
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Método para crear una entidad del tipo de entidad 'PersonAccountExt'.
*/
private static void createPersonAccountExt()
{
//Crear Person 1
try
{
System.out.println("\nCLIENT: Creating Person 1 . . .");
//Obtiene un gráfico de datos vacío de Person desde el servicio de WIM.
DataObject root = SDOHelper.createRootDataObject();
// Crear un objeto de datos de tipo de entidad "PersonAccount" debajo de root
DataObject person = root.createDataObject(SchemaConstants.DO_ENTITIES,
Service.WIM_NS_URI, "PersonAccountExt");
// Establezca los valores para los atributos necesarios, uid, cn y sn
person.set("uid", "person1");
person.set("cn", "Person 1");
person.set("sn", "Person1LastName");
System.out.println("Create PersonAccountExt input datagraph -> " + printDO(root));
// Invocar la API de creación para crear la entidad de cuenta de persona definida previamente
root = service.create(root);
System.out.println("Create PersonAccountExt output datagraph -> " + printDO(root));
System.out.println("CLIENT: Person 1 has been created. \n\n");
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Método para añadir una propiedad 'HomePhone' al tipo de entidad 'PersonAccountExt'
* y correlacionarla con el atributo 'primaryOwnerContact' en LDAP
*/
@SuppressWarnings("unchecked")
private static void addPropertyToPersonAccountExt()
{
try
{
DataObject root = SDOHelper.createRootDataObject();
// Crear un nuevo objeto "schema" bajo root
// Este objeto contendrá los detalles de las modificaciones de esquema que deben realizarse
DataObject schema = root.createDataObject(SchemaConstants.DO_SCHEMA);
// Crear un objeto de datos de esquema de propiedad debajo del objeto de esquema creado antes
DataObject propertySchema = schema.createDataObject(SchemaConstants.DO_PROPERTY_SCHEMA);
// Establecer el nombre de propiedad
propertySchema.setString(SchemaConstants.PROP_PROPERTY_NAME, "HomePhone");
// Establecer el espacio de nombres de propiedad como espacio de nombres predeterminado
propertySchema.setString(SchemaConstants.PROP_NS_URI, SchemaConstants.WIM_NS_URI);
// Especificar que la propiedad no es de múltiples valores
propertySchema.setBoolean(SchemaConstants.PROP_MULTI_VALUED, false);
// Especificar el tipo de datos de la propiedad como String
propertySchema.setString(SchemaConstants.PROP_DATA_TYPE, SchemaConstants.DATA_TYPE_STRING);
// Especificar los tipos de entidad aplicables para esta propiedad
// La propiedad se añadirá para todos los nombres de tipo de entidad especificados en la lista
propertySchema.getList(SchemaConstants.PROP_APPLICABLE_ENTITY_TYPE_NAMES)
.add("PersonAccountExt");
System.out.println("Add property input datagraph " + printDO(root));
// Invocar la API de creación de esquema
root = service.createSchema(root);
System.out.println("Add property output datagraph " + printDO(root));
// Correlacionar la propiedad 'HomePhone' creada anteriormente con el atributo LDAP 'primaryOwnerContact'
Hashtable configData = new Hashtable();
// Especificar el depósito para el que debe correlacionarse esta propiedad
configData.put(DynamicConfigConstants.DYNA_CONFIG_KEY_REPOS_ID, "LDAP1");
DataObject configProvider = SDOHelper.createConfigProviderDataObject();
// Especificar el tipo de depósito como "Ldap"
DataObject ldapRepos = SDOHelper.createConfigRepositoryDataObject(configProvider,
ConfigConstants.CONFIG_DO_LDAP_REPOSITORY_TYPE);
// Proporcionar el nombre de propiedad y el nombre de atributo que deben correlacionarse entre sí
DataObject attrConfig = ldapRepos.createDataObject(ConfigConstants.CONFIG_DO_ATTRIBUTE_CONFIGUARTION);
DataObject attr = attrConfig.createDataObject(ConfigConstants.CONFIG_DO_ATTRIBUTES);
attr.setString(ConfigConstants.CONFIG_PROP_PROPERTY_NAME, "HomePhone");
attr.setString(ConfigConstants.CONFIG_PROP_NAME, "primaryOwnerContact");
configData.put(DynamicConfigConstants.DYNA_CONFIG_KEY_PROP_CONFIG, attr);
// Invocar la actualización de configuración dinámica
// Esta API sólo actualiza la correlación para esta sesión, esta correlación no es persistente
service.dynamicUpdateConfig(DynamicConfigConstants.DYNA_CONFIG_EVENT_ADD_PROPERTY_CONFIG,
configData); }
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Añadir 'HomePhone' a la entidad 'person1' creada previamente en LDAP
*/
private static void addHomePhoneForPersonAccountExt()
{
try
{
DataObject root = SDOHelper.createRootDataObject();
DataObject entity = SDOHelper.createEntityDataObject(root, null, "PersonAccountExt");
// Establecer el nombre exclusivo para el objeto para el que debe establecerse el valor 'HomePhone'
entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME,
"uid=person1,dc=yourco,dc=com");
// Especificar el valor de 'HomePhone'
entity.set("HomePhone", "020-2341123");
System.out.println("Set property input datagraph -> " + printDO(root));
// Invocar la API de actualización de VMM
root = service.update(root); System.out.println("Set property output datagraph -> " + printDO(root));
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Buscar 'PersonAccountExt'
*/
@SuppressWarnings("unchecked")
private static void searchPersonAcctExt()
{
try
{
DataObject root = SDOHelper.createRootDataObject();
// Crear un objeto de datos de control de búsqueda
DataObject searchCtrl = SDOHelper.createControlDataObject(root, null,
SchemaConstants.DO_SEARCH_CONTROL);
// Especificar las propiedades que deben obtenerse para todas las entradas coincidentes
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("HomePhone");
// Especificar los criterios de coincidencia como la expresión de búsqueda
searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccountExt'");
// Invocar la API de búsqueda
root = service.search(root); System.out.println("Output datagraph -> " + printDO(root));
// Repetir los resultados de búsqueda
printIdentifiers(root);
}
catch(Exception e)
{
e.printStackTrace();
}
}
Gráfico de datos de entrada para crear un nuevo tipo de entidad extendido:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:schema>
<wim:entitySchema nsURI="http://www.ibm.com/websphere/wim"
entityName="PersonAccountExt" parentEntityName="PersonAccount">
<wim:entityConfiguration defaultParent="dc=yourco,dc=com" rdnProperty="uid">
<wim:metaData name="objectClasses" repositoryId="LDAP1">
<wim:values>inetorgperson</wim:values>
<wim:values>organizationalperson</wim:values>
<wim:values>person</wim:values>
</wim:metaData>
<wim:metaData name="rdnAttributes" repositoryId="LDAP1">
<wim:values>uid</wim:values>
</wim:metaData>
</wim:entityConfiguration>
</wim:entitySchema>
</wim:schema>
</wim:Root>
</sdo:datagraph>
Gráfico de datos de salida posterior a la creación de un nuevo tipo de entidad extendido:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:schema>
<wim:entitySchema nsURI="http://www.ibm.com/websphere/wim"
entityName="PersonAccountExt" parentEntityName="PersonAccount">
<wim:repositoryIds>LDAP1</wim:repositoryIds>
<wim:entityConfiguration defaultParent="dc=yourco,dc=com" rdnProperty="uid">
<wim:metaData name="objectClasses" repositoryId="LDAP1">
<wim:values>inetorgperson</wim:values>
<wim:values>organizationalperson</wim:values>
<wim:values>person</wim:values>
</wim:metaData>
</wim:metaData>
<wim:metaData name="rdnAttributes" repositoryId="LDAP1">
<wim:values>uid</wim:values>
</wim:metaData>
</wim:entityConfiguration>
</wim:entitySchema>
</wim:schema>
</wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para crear una entidad del nuevo tipo de entidad:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:entities xsi:type="wim:PersonAccountExt">
<wim:uid>person1</wim:uid>
<wim:cn>Person 1</wim:cn>
<wim:sn>Person1LastName</wim:sn>
</wim:entities>
</wim:Root>
</sdo:datagraph>
Gráfico de datos de salida posterior a la creación de una entidad del nuevo tipo de entidad:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:entities xsi:type="wim:PersonAccountExt">
<wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
</wim:entities>
</wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para crear una nueva propiedad para el nuevo tipo de entidad:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:schema>
<wim:propertySchema nsURI="http://www.ibm.com/websphere/wim" dataType="String"
multiValued="false" propertyName="HomePhone">
<wim:applicableEntityTypeNames>wim:PersonAccountExt</wim:applicableEntityTypeNames>
</wim:propertySchema>
</wim:schema>
</wim:Root>
</sdo:datagraph>
Gráfico de datos de salida posterior a la creación de una propiedad para el nuevo tipo de entidad:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:schema>
<wim:propertySchema nsURI="http://www.ibm.com/websphere/wim" dataType="String"
multiValued="false" propertyName="HomePhone">
<wim:repositoryIds>LDAP1</wim:repositoryIds>
<wim:applicableEntityTypeNames>wim:PersonAccountExt</wim:applicableEntityTypeNames>
</wim:propertySchema>
</wim:schema>
</wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para añadir una propiedad con un valor a la entidad:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:entities xsi:type="wim:PersonAccountExt">
<wim:identifier uniqueName="uid=person1,dc=yourco,dc=com"/>
<wim:HomePhone>020-2341123</wim:HomePhone>
</wim:entities>
</wim:Root>
</sdo:datagraph>
Gráfico de datos de salida posterior a la adición de una propiedad con un valor a la entidad:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:entities xsi:type="wim:PersonAccountExt">
<wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
<wim:HomePhone>020-2341123</wim:HomePhone>
</wim:entities>
</wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para buscar una propiedad extendida:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:controls xsi:type="wim:SearchControl" expression="@xsi:type='wim:PersonAccountExt'">
<wim:properties>uid</wim:properties>
<wim:properties>sn</wim:properties>
<wim:properties>cn</wim:properties>
<wim:properties>wim:HomePhone</wim:properties>
</wim:controls>
</wim:Root>
</sdo:datagraph>
Gráfico de datos de salida posterior a la búsqueda de una propiedad extendida:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:entities xsi:type="wim:PersonAccountExt">
<wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
<wim:uid>person1</wim:uid>
<wim:cn>Person 1</wim:cn>
<wim:sn>Person1LastName</wim:sn>
<wim:HomePhone>020-2341123</wim:HomePhone>
</wim:entities>
</wim:Root>
</sdo:datagraph>