Problème MemberExtension si il est null : Data to update is the same instance as the data already in memory!!

Stéphane ECREPONT · le 31/10/17 à 16:16

J'essaye de créer un MemberExtension pour un nouveau membre (member extension à null) à la première connexion

Le message est le suivant : Data to update is the same instance as the data already in memory!!

// Ajout des favoris existants dans la liste temporaire
MemberExtension extension = (MemberExtension) loggedMember.getExtension();
MemberExtension updateInstance = extension != null ? (MemberExtension) extension.getUpdateInstance() : new MemberExtension();

Application[] appliArray = new Application[favorisTemp.size()];

appliArray = favorisTemp.toArray(appliArray);

Member loggedMemberCopy= (Member)loggedMember.clone();


// Enregistrement soit de l'extension si elle existe, soit du membre pour une nouvelle
try{
if (extension != null) {
logger.info("performUpdate");
MemberExtension updateInstanceCopy=(MemberExtension)updateInstance.clone();
updateInstanceCopy.setApplicationsFavorites(appliArray);

updateInstanceCopy.performUpdate(loggedMemberCopy);
} else {
logger.info("setExtension");

MemberExtension updateInstanceCopy=(MemberExtension)updateInstance.clone();
updateInstanceCopy.setApplicationsFavorites(appliArray);

loggedMember.setExtension(updateInstanceCopy);
loggedMember.performUpdate(loggedMember);
}
}
catch(Exception ex)
{
logger.info("catch");
}

Mots-clés JCMS 9.0.3
8 pts
Christophe Danière · le 31/10/17 à 17:11

Bonjour Stéphane,

On avait eu le même problème à l'époque : voir conversation.

0 pt
Thomas LEGAT · le 03/11/17 à 08:56

Vous avez tapé :

loggedMember.setExtension(updateInstanceCopy);
loggedMember.performUpdate(loggedMember);

, il vous faut faire un clone de votre membre avant de le mettre à jour

 

0 pt
Stéphane ECREPONT · le 06/11/17 à 10:13

A la première connexion du Membre en sso, le generated.MemberExtension n'existe pas dans les store ainsi que le lien avec le Member

Il faut créer dans un premier temps le MemberExtension puis mettre à jour le Member cloné

//Récupération du MemberExtension du Member connecté
MemberExtension memberExtCourante = (MemberExtension)loggedMember.getExtension();

//Si le MemberExtension n'existe pas, création du MemberExtension
if (memberExtCourante == null)
{
logger.info("createExtension");

MemberExtension newMemberExtension=new MemberExtension();
newMemberExtension.performCreate(loggedMember);

//Création clone Member
Member loggedMemberClone=(Member)loggedMember.clone();

//Mise à jour du clone Member
loggedMemberClone.setExtension(newMemberExtension);
loggedMemberClone.performUpdate(loggedMember);
}

0 pt