JaliosXperience
fr en
Path > Home > Forums > French Forum
Link

Problème de persistence de modification des délégations via un DataController

Gildas de Cadoudal - on 1/27/12 at 3:07 PM

Bonjour,

L'objectif de notre développement du DataController est de mettre à jour automatiquement la liste des membres autorisés à se connecter avec le compte d'un autre membre prédéfini et cela en fonction de l'appartenance ou non du membre modifié à un WKRole.

Voici une version simplifiée du code de la méthode beforeWrite de notre DataController :

// on récupère le membre prédéfini pour lequel on veut modifier les membres pouvant s'authentifier avec
Member mbrPredefini = Channel.getChannel().getMember("son_id");

// on récupère le WKRole qui sert de critère
Workspace wk = Channel.getChannel().getWorkspace("son_id");
WKRole wkR = wk.getRole("son_id");

// ça c'est le membre qui est modifié
Member mbr = (Member)data;

// on détermine si le membre modifié possède ou non le WKRole
boolean aLeRole = mbr.belongsToRole(wkR , true);

// on met à jour la liste de délégation du membre modifié
mbr.updateDelegationHolderSet(mbrPredefini, aLeRole);

Le problème est donc le suivant : le code fonctionne très bien et le membre modifié à bien la possibilité de s'authentifier avec le compte prédéfini. Mais il y a un hic, en fait la modification effectuée n'est pas enregistré dans le store, elle reste en mémoire. En effet si je regarde via l'interface la liste des membres délégués du membre prédéfini, je ne vois pas le membre que j'ai rajouté par le code. De plus lorsque je redémarre JCMS, le membre qui avait été modifié ne peut plus se connecter avec le compte prédéfini. J'ai aussi essayé en plus de l'utilisation de la méthode "updateDelegationHolderSet" de rajouter le code suivant mais cela ne change rien au problème :

if (aLeRole) {
	MemberIndexManager.getInstance().addDelegate(mbrPredefini, mbr);
} else {
	MemberIndexManager.getInstance().removeDelegate(mbrPredefini, mbr);
}

D'où la question : comment faire pour que cela fonctionne ?

J'espère avoir été assez clair et précis et sinon je répondrais naturellement aux demandes de précisions.

Environnement

  • JCMS 7 SP1
  • Tomcat 6.0.30

Ronan Kerdudou - on 1/27/12 at 5:08 PM

la méthode que vous utilisez "updateDelegationHolderSet" ne sert pas à ça (usage interne).

Essayez plutôt d'ajouter un élément au set "getDelegateMemberSet()"...

Gildas de Cadoudal - on 1/27/12 at 5:25 PM

merci pour la réponse malheureusement cela ne résous pas le problème entièrement : maintenant je vois bien le membre modifié dans la liste des membres délégués du membre prédéfini, mais suite à un redémarrage, cette configuration est perdue.

Ronan Kerdudou - on 1/27/12 at 5:46 PM

Excusez ma réponse rapide j'ai oublié de préciser que comme pour tout index (Set) modifié dans un DataController il faut remplacer l'objet pour qu'il soit correctement enregistré :

set = new treeSet(mbr.getDelegateMemberSet());
set.add(mbrPredefini);
mbr.setDelegateMemberSet(set);

Gildas de Cadoudal - on 1/27/12 at 5:55 PM

merci beaucoup pour la précision car c'est exactement le code que j'avais fait excepté la copie du treeset par le new. Donc maintenant avec cette précision, tout fonctionne correctement.

Je vous remercie de votre réactivité.

Login   Home   fr en
JALIOS SA - SIREN 440 126 035