O gerenciador de membro virtual é configurado para usar o modelo dinâmico ou o modelo estático. É possível criar em tempo de execução novos tipos de entidade, novos tipos de propriedade, e incluir nos novos tipos de entidade tipos de propriedade existentes ou novos.
É necessário chamar a API createSchema do gerenciador de membro virtual para criar novos tipos de entidade, novos tipos de propriedade e incluir tipos de propriedade novos ou existentes nos novos tipos de entidade em tempo de execução, sem reiniciar o gerenciador de membro virtual. O Adaptador LDAP e o Adaptador de BD prontos para uso suportam esse tipo de procedimento. Neste exemplo, você deseja criar um novo tipo de entidade chamado ContactPerson, que é estendido a partir do tipo de entidade integrado do gerenciador de membro virtual, PersonAccount. Você também deseja criar um novo tipo de propriedade chamado cellPhone e incluir esse tipo de propriedade nesse tipo de entidade. Esse exemplo usa o Adaptador LDAP.
Execute o seguinte:
No lado do cliente, o aplicativo de exploração do gerenciador de membro virtual chama a API createSchema do gerenciador de membro virtual através do Provedor de Serviços Local. O Provedor de Serviços Local detecta que essa chamada altera o esquema e atualiza o esquema local (ECore) após a finalização da chamada da API createSchema.
No lado do servidor, o Schema Manager recebe a chamada da API do cliente. O Schema Manager primeiro verifica se os novos tipos de entidade e propriedade já existem e lança uma exceção caso existam. Em seguida, o Schema Manager cria um novo modelo ECore (EPackage) com o URI do namespace (http://www.yourco.com/wim/yourext), se ele não existir ainda. Em seguida, ele incluirá o esquema dos novos tipos de entidade e propriedade no modelo ECore na memória.
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:schema>
<wim:entitySchema nsPrefix="yourext"
nsURI="http://www.yourco.com/wim/yourext"
entityName="ContactPerson"
parentEntityName="PersonAccount"/>
<wim:propertySchema nsURI="http://www.yourco.com/yourext"
dataType="STRING"
multiValued="true"
propertyName="cellPhone">
<wim:applicableEntityTypeNames>ContactPerson</wim:applicableEntityTypeNames>
</wim:propertySchema>
</wim:schema>
</sdo:datagraph>
O Schema Manager então chama o Gerenciador de
Configuração.<config:supportedEntityTypes defaultParent="cn=users,dc=yourco,dc=com"
name="yourext:ContactPerson">
<config:rdnProperties>uid</config:rdnProperties>
</config:supportedEntityTypes>
<config:repositories xsi:type="config:LdapRepositoryType" ...>
<config:EntityTypesNotAllowDelete>yourext:ContactPerson</config:EntityTypesNotAllowDelete>
<config:ldapEntityTypes name="yourext:ContactPerson">
<config:rdnAttributes name="uid"/>
<config:objectClasses>eContactPerson</config:objectClasses>
<config:objectClassesForCreate>eContactPerson</config:objectClassesForCreate>
<config:objectClassesForCreate>inetOrgPerson</config:objectClassesForCreate>
</config:ldapEntityTypes>
</config:repositories>
O Schema Manager então chama o Gerenciador de
Repositório.Se pelo menos um adaptador de repositório suportar a criação de novas entidades e não emitir a OperationNotSupportedException, o gerenciador de membro virtual retornará os IDs desses repositórios no gráfico de dados de saída.
No lado do cliente, depois que a chamada da API createSchema é retornada, o Provedor de Serviços Local chama a API getEPackages para recuperar os últimos esquemas. O Provedor de Serviços Local registra novamente os esquemas na JVM cliente. Os aplicativos de exploração podem chamar a API create do gerenciador de membro virtual para criar uma nova entidade do tipo ContactPerson com a propriedade cellPhone. O gerenciador de membro virtual não precisa ser reiniciado para que a mudança no esquema se torne ativa.