1

我正在尝试使用 Novell JLDAP 库执行 Upsert,不幸的是,我无法找到这样的示例。目前,我必须:

 public EObject put(EObject eObject){
Subject s = (Subject) eObject;
//Query and grab attributes from subject
LDAPAttributes attr = resultsToAttributes(getLDAPConnection().get(s)); 

//No modification needed - return
if(s.getAttributes().equals(attr)){
  return eObject;
} else {
  //Keys:
  //REPLACE,ADD,DELETE, depending on which attributes are present in the maps, I choose the operation which will be used
 Map<String,LDAPAttribute> operationalMap = figureOutWhichAttributesArePresent(c.getAttributes(),attr);

 //Add the Modifcations to a modification array
 ArrayList<LDAPModification> modList = new ArrayList<LDAPModification>();
 for(Entry entry: operationalMap.getEntrySet()){
   //Specify whether it is an update, delete, or insert here. (entry.getKey());
   modList.add(new LDAPModification(entry.getKey(),entry.getValue());
 }
 //commit
 connection.modify("directorypathhere",modList.toArray(new LDAPModification[modList.size()]));
}

我宁愿不必先查询客户,这也会导致主题属性的循环。有谁知道 JNDI 或其他库是否能够在不针对 LDAP 运行多个语句的情况下执行更新/插入?

4

2 回答 2

1

Petesh 是正确的——抽象是在 Novell 库(以及 UnboundId 库)中实现的。我能够使用 Modify.REPLACE 参数为每​​个传入的属性“更新”值,为空值传入 null。这有效地创建、更新和删除了属性,而无需先解析它们。

于 2013-03-01T15:37:53.070 回答
0

在 LDAP 中,通过 LDIF 文件,一个不高兴将是一个包含两个步骤的事件。删除和添加值。这由一行上的单个破折号表示,介于删除和添加之间。

我不确定你会如何在这个库中做到这一点。我会尝试 modList.remove 然后 modList.add 一个接一个,看看是否有效。

于 2013-02-26T18:43:42.983 回答