将新属性添加到Object Class并期望它自动显示在Apache DS中的现有对象中

时间:2014-10-16 06:57:17

标签: ldap apacheds

我正在研究一个用例,我必须动态地向Apache DS中的现有对象类添加新属性。

1)以下是一些定义我的对象类的代码: -

        Attributes attrs = new BasicAttributes(true);
        attrs.put("NUMERICOID", "1.3.6.1.4.1.18060.0.4.3.3.1");
        attrs.put("NAME", "ship");
        attrs.put("DESC", "An entry which represents a ship");
        attrs.put("SUP", "top");
        attrs.put("STRUCTURAL", "true");

        Attribute must = new BasicAttribute("MUST");
        must.add("cn");
        attrs.put(must);

        Attribute may = new BasicAttribute("MAY");
        may.add("numberOfGuns");
        may.add("numberOfGuns2");
        may.add("description");
        attrs.put(may);

        //add
        schema.createSubcontext("ClassDefinition/ship", attrs);

2)添加该对象类的对象:

Attributes attributes=new BasicAttributes();
Attribute objectClass=new BasicAttribute("objectClass");
objectClass.add("ship");
attributes.put(objectClass);

Attribute g=new BasicAttribute("numberOfGuns");
Attribute g2=new BasicAttribute("numberOfGuns2");
Attribute cn=new BasicAttribute("cn");


g.add("2");
g2.add("3");
cn.add("four");


attributes.put(g);
attributes.put(cn);
attributes.put(g2);
;

ctx.createSubcontext("cn=four,dc=example,dc=com",attributes);

3)添加新属性 - ' mustA'到对象类

        Attributes attrs = new BasicAttributes(true);
        attrs.put("NUMERICOID", "1.3.6.1.4.1.18060.0.4.3.3.1");
        attrs.put("NAME", "ship");
        attrs.put("DESC", "An entry which represents a ship");
        attrs.put("SUP", "top");
        attrs.put("STRUCTURAL", "true");

        Attribute must = new BasicAttribute("MUST");
        must.add("cn");
        must.add("mustA");
        attrs.put(must);

        Attribute may = new BasicAttribute("MAY");
        may.add("numberOfGuns");
        may.add("numberOfGuns2");
        may.add("description");
        attrs.put(may);

        //modify
        schema.modifyAttributes("ClassDefinition/ship",DirContext.ADD_ATTRIBUTE ,attrs);

一旦添加了新属性(这意味着修改了对象类),如果我添加该对象类类型的新对象,我可以在新创建的对象中看到新添加的属性。

我的问题是,在添加新属性之前创建的对象会发生什么?如何使新属性自动显示在退出对象中?例如,这里将是新属性" mustA"自动显示在对象"四"?

或者我是否必须手动去修改该对象以添加该新属性?

1 个答案:

答案 0 :(得分:0)

您需要更新架构。对于ApacheDS,最简单的方法是下载Apache Studio并查看2.3.1 - Adding Schema Elements

哦,你将永远得到The Directory Users List for ApacheDS的大力支持。开发人员非常活跃。

AFIK,ApacheDs将支持从LDAP调用添加模式,但我并不乐观。 (见The Directory Users List for ApacheDS

如果您坚持这样做,请查看以下示例: http://docs.oracle.com/javase/jndi/tutorial/ldap/schema/object.html

-Jim