Use o fragmento de código de amostra e os gráficos de dados para criar um tipo de entidade, que se estende a partir de um tipo de entidade interno, no namespace padrão.
As etapas a seguir são cobertas neste fragmento de código de amostra:
Assegure-se de ter lido as informações e concluído as etapas descritas no tópico, Pré-requisitos de Programação, incluindo a seção, Estendendo o Esquema de Propriedade, que tem informações sobre os objetos de dados propertySchema e extensionPropertySchema e lista a sintaxe válida para os tipos de dados de propriedade.
import com.ibm.websphere.wim.exception.SchemaAlreadyExistException;
Assegure-se de que um repositório LDAP esteja configurado na configuração de repositórios associados. Para obter mais informações, consulte o tópico Configurando o Lightweight Directory Access Protocol em uma configuração de repositório associado no centro de informações do WebSphere Application Server.
Inclua o seguinte fragmento de código no código do aplicativo e substitua as variáveis pelos valores reais que você deseja usar.
/**
* Este método usa a API de extensão de esquema para incluir uma nova entidade
* que se estende a partir de uma entidade existente do gerenciador de membro virtual.
*/
public static void testRunTimeAddNewEntity()
{
// Criar esquema para novo tipo de entidade
addEntityPersonAccountExt();
// Criar entidade de novo tipo de entidade
createPersonAccountExt();
// Incluir uma propriedade 'HomePhone' em 'PersonAccountExt' e
// mapeá-la para o atributo 'primaryOwnerContact' no LDAP
addPropertyToPersonAccountExt();
// Incluir 'HomePhone' em 'person1'
addHomePhoneForPersonAccountExt();
// Procurar a pessoa
searchPersonAcctExt();
}
/**
* Método para criar o esquema para 'PersonAccountExt' no namespace padrão
*/
@SuppressWarnings("unchecked")
private static void addEntityPersonAccountExt()
{
try
{
System.out.println("\nCLIENT: Criando esquema para 'PersonAccountExt' . . . ");
DataObject root = SDOHelper.createRootDataObject();
// Criar um objeto esquema sob a raiz
DataObject dynaSchemaDO = root.createDataObject(SchemaConstants.DO_SCHEMA);
// Criar novo objeto esquema de tipo de entidade. Esse objeto conterá a definição de esquema para o
// tipo de entidade 'PersonAccountExt' que queremos criar.
DataObject entitySchemaDO = dynaSchemaDO.createDataObject(SchemaConstants.DO_ENTITY_SCHEMA);
// Configurar o namespace para novo tipo de entidade
entitySchemaDO.setString(SchemaConstants.PROP_NS_URI, SchemaConstants.WIM_NS_URI);
// Configurar o nome do tipo de entidade
entitySchemaDO.set(SchemaConstants.PROP_ENTITY_NAME, "PersonAccountExt");
// Configurar o nome do tipo de entidade pai.
entitySchemaDO.set(SchemaConstants.PROP_PARENT_ENTITY_NAME, Service.DO_PERSON_ACCOUNT);
// Criar um objeto de dados de configuração de entidade
// Esse objeto de dados define detalhes do repositório
DataObject entConfigDO = entitySchemaDO.createDataObject(SchemaConstants.DO_ENTITY_CONFIGURATION);
// Configurar o pai padrão como a entrada de base do LDAP configurado.
entConfigDO.set(SchemaConstants.PROP_DEFAULT_PARENT, "dc=yourco,dc=com");
// Configurar a propriedade RDN (login) como uid.
entConfigDO.set(SchemaConstants.PROP_RDN_PROPERTY, "uid");
// Configurar o ID do repositório.
DataObject reposConfigInfo1DO = entConfigDO.createDataObject(SchemaConstants.DO_META_DATA);
reposConfigInfo1DO.set(SchemaConstants.PROP_NAME, ConfigService.CONFIG_DO_OBJECTCLASSES);
reposConfigInfo1DO.set(SchemaConstants.PROP_REPOSITORY_ID, "LDAP1");
// Configurar as classes de objeto para o objeto incluído. Essas classes são do esquema LDAP.
List objReadValues = reposConfigInfo1DO.getList(SchemaConstants.PROP_VALUES);
objReadValues.add("inetorgperson");
objReadValues.add("organizationalperson");
objReadValues.add("person");
// Configurar a propriedade RDN para o repositório
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("Gráfico de dados de entrada Criar Esquema -> " + printDO(root));
// Chamar a API de criação de esquema
DataObject outRoot = service.createSchema(root);
System.out.println("Gráfico de dados da saída Criar Esquema -> " + printDO(outRoot));
System.out.println("\nCLIENT: novo tipo de entidade é criado.");
}
catch (SchemaAlreadyExistException e)
{
System.out.println("CLIENT: tipo de entidade já existe.\n\n");
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Método para criar uma entidade do tipo 'PersonAccountExt'.
*/
private static void createPersonAccountExt()
{
//Criar Pessoa 1
try
{
System.out.println("\nCLIENT: Criando Pessoa 1 . . .");
//Obtém um gráfico de dados vazio de Person a partir do Serviço VMM.
DataObject root = SDOHelper.createRootDataObject();
// Criar um objeto de dados do tipo de entidade "PersonAccount" sob a raiz
DataObject person = root.createDataObject(SchemaConstants.DO_ENTITIES,
Service.WIM_NS_URI, "PersonAccountExt");
// Configurar os valores dos atributos obrigatórios, uid, cn e sn
person.set("uid", "person1");
person.set("cn", "Person 1");
person.set("sn", "Person1LastName");
System.out.println("Gráfico de dados de entrada Criar PersonAccountExt -> " + printDO(root));
// Chamar a API de criação de esquema para criar a entidade de conta da pessoa definida anteriormente
root = service.create(root);
System.out.println("Gráfico de dados da saída Criar PersonAccountExt -> " + printDO(root));
System.out.println("CLIENT: Pessoa 1 foi criada. \n\n");
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Método para incluir uma propriedade 'HomePhone' no tipo de entidade 'PersonAccountExt'
* e mapeá-la para o atributo 'primaryOwnerContact' no LDAP
*/
@SuppressWarnings("unchecked")
private static void addPropertyToPersonAccountExt()
{
try
{
DataObject root = SDOHelper.createRootDataObject();
// Criar um novo objeto "esquema" sob a raiz
// Este objeto conterá os detalhes das modificações de esquema que tiverem de ser feitas
DataObject schema = root.createDataObject(SchemaConstants.DO_SCHEMA);
// Criar um objeto de dados de esquema de propriedade sob o objeto de esquema criado anteriormente
DataObject propertySchema = schema.createDataObject(SchemaConstants.DO_PROPERTY_SCHEMA);
// Configurar o nome da propriedade
propertySchema.setString(SchemaConstants.PROP_PROPERTY_NAME, "HomePhone");
// Configurar o namespace da propriedade como o namespace padrão
propertySchema.setString(SchemaConstants.PROP_NS_URI, SchemaConstants.WIM_NS_URI);
// Especificar que a propriedade tem diversos valores
propertySchema.setBoolean(SchemaConstants.PROP_MULTI_VALUED, false);
// Especificar o tipo de dado da propriedade como Sequência
propertySchema.setString(SchemaConstants.PROP_DATA_TYPE, SchemaConstants.DATA_TYPE_STRING);
// Especificar os tipos de entidade aplicáveis para esta propriedade
// A propriedade será incluída para todos os nomes de tipo de entidade especificados na lista
propertySchema.getList(SchemaConstants.PROP_APPLICABLE_ENTITY_TYPE_NAMES)
.add("PersonAccountExt");
System.out.println("Gráfico de dados da entrada Incluir Propriedade " + printDO(root));
// Chamar a API de criação de esquema
root = service.createSchema(root);
System.out.println("Gráfico de dados da saída Incluir Propriedade " + printDO(root));
// Mapear a propriedade 'HomePhone' criada anteriormente para o atributo LDAP 'primaryOwnerContact'
Hashtable configData = new Hashtable();
// Especificar o repositório para o qual essa propriedade precisa ser mapeada
configData.put(DynamicConfigConstants.DYNA_CONFIG_KEY_REPOS_ID, "LDAP1");
DataObject configProvider = SDOHelper.createConfigProviderDataObject();
// Especificar o tipo de repositório como "Ldap"
DataObject ldapRepos = SDOHelper.createConfigRepositoryDataObject(configProvider,
ConfigConstants.CONFIG_DO_LDAP_REPOSITORY_TYPE);
// Fornecer os nomes da propriedade e do atributo que precisam ser mapeados entre si
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);
// Chamar todas as atualizações de configuração dinâmica
// Esta API atualiza o mapeamento para esta sessão somente; esse mapeamento não é persistente
service.dynamicUpdateConfig(DynamicConfigConstants.DYNA_CONFIG_EVENT_ADD_PROPERTY_CONFIG,
configData);
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Incluir 'HomePhone' na entidade 'person1' criada no LDAP anteriormente
*/
private static void addHomePhoneForPersonAccountExt()
{
try
{
DataObject root = SDOHelper.createRootDataObject();
DataObject entity = SDOHelper.createEntityDataObject(root, null, "PersonAccountExt");
// Configurar o nome exclusivo para o objeto cujo valor 'HomePhone' precisa ser configurado
entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME,
"uid=person1,dc=yourco,dc=com");
// Especificar o valor de 'HomePhone'
entity.set("HomePhone", "020-2341123");
System.out.println("Gráfico de dados de entrada Configurar Propriedade -> " + printDO(root));
// Chamar a API de atualização do VMM
root = service.update(root);
System.out.println("Gráfico de dados de saída Configurar Propriedade -> " + printDO(root));
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Procurar por 'PersonAccountExt'
*/
@SuppressWarnings("unchecked")
private static void searchPersonAcctExt()
{
try
{
DataObject root = SDOHelper.createRootDataObject();
// Criar um objeto de dados de controle de procura
DataObject searchCtrl = SDOHelper.createControlDataObject(root, null,
SchemaConstants.DO_SEARCH_CONTROL);
// Especificar as propriedades que precisam ser buscadas para todas as entradas correspondentes
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 os critérios de correspondência como a expressão de procura
searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccountExt'");
// Chamar a API de procura
root = service.search(root);
System.out.println("Output datagraph -> " + printDO(root));
// Iterar sobre os resultados da procura
printIdentifiers(root);
}
catch(Exception e)
{
e.printStackTrace();
}
}
Gráfico de dados de entrada para criar novo tipo de entidade estendida:
<?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 dados de saída depois de criar novo tipo de entidade estendida:
<?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 dados de entrada para criar uma entidade do novo tipo de entidade:
<?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 dados de saída depois de criar uma entidade do novo tipo de entidade:
<?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 dados de entrada para criar uma nova propriedade para o novo tipo de entidade:
<?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 dados de saída depois de criar uma propriedade para o novo tipo de entidade:
<?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 dados de entrada para incluir a propriedade com um valor na entidade:
<?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 dados de saída depois de incluir a propriedade com um valor na entidade:
<?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 dados de entrada para procurar propriedade estendida:
<?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 dados de saída depois de procurar propriedade estendida:
<?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>