Domanda

I'm attempting to execute an Upsert using the Novell JLDAP library, unfortunately, I'm having trouble finding an example of this. Currently, I have to:

 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()]));
}

I'd prefer to not have to query on the customer first, which results in cycling through the subject's attributes as well. Is anyone aware if JNDI or another library is able to execute an update/insert without running multiple statements against LDAP?

È stato utile?

Soluzione

Petesh was correct - the abstraction was implemented within the Novell library (as well as the UnboundId library). I was able to "upsert" values using the Modify.REPLACE param for every attribute that came in, passing in null for empty values. This effectively created, updated, and deleted the attributes without having to parse them first.

Altri suggerimenti

In LDAP, via LDIF files, an upset would be a single event with two steps. A remove and add of a value. This is denoted by a single dash on a line, between the remove then the add.

I am not sure how you would do it in this library. I would would try to modList.remove and then modList.add one after another and see if that works.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top