confusion portée en ce qui concerne les haricots de session, les procurations et les singletons dans un ressort 3 géré application JSF

StackOverflow https://stackoverflow.com/questions/4651782

Question

Cela semble être c'est du ressort 101 de base, mais je ne peux pas sembler trouver correct façon de le faire. La situation est la suivante; dans mon application web il y a un point d'entrée unique qui est un contrôleur que les utilisateurs des poignées provenant d'un système extérieur. Le transfert est juste une demande de POST avec un tas d'informations associées concernant cet utilisateur. Apon entrée, je dois créer un nouveau grain de l'utilisateur et le charger avec cette information des utilisateurs. De plus, lorsque l'utilisateur touche une vue qui déclenche un service, j'ai besoin de ce service pour pouvoir accéder à l'instance appropriée de haricot utilisateur.

La première façon de le faire qui est venu à l'esprit était d'avoir un service de UserManager qui créerait une nouvelle instance de l'utilisateur, le remplir w / données, puis l'enregistrer dans le conteneur Spring avec le nom d'utilisateur comme nom de haricot. Puis, quand un service est appelé, le service ferait quelque chose comme Factory.getBean(username) pour trouver l'instance appropriée User. Le problème que je vois ici est que je perdre le lien entre l'utilisateur et qui haricot User leur appartient. De plus, je voudrais éviter que l'utilisateur porte le haricot autour de la session, si possible. Est-ce là où je suis censé être avec Spring AOP et proxies?

Quel est le modèle typique de printemps pour résoudre ce type de situation?

Était-ce utile?

La solution

Il est donc maintenant plusieurs semaines plus tard (depuis poser cette question), et par conséquent mon niveau de connaissances a connu une expansion exponentielle, donc je pensais que je pourrais aussi bien répondre à ma question à tous ceux qui pourraient trouver utile (sans parler de la question n'a pas été très clair pour commencer).

La réponse de base est: proxys d'utilisation. Depuis un singleton est seulement instancier 1 fois, vous ne pouvez pas injectez une autre classe qui a une durée de vie plus courte, par exemple. la portée de la session. Pour ceux qui ont besoin de plus amples informations, la caisse stateful vs grains de sans état. Plus ou moins ce que je fini par faire est ce ... les services contiennent le code stateless pour manipuler des données (pensez verbes, RegisterUserSvc, AddPartSvc, etc.). Les données que ces services est stateful manipuler. Par exemple, chaque utilisateur dispose d'un exemplaire de leur propre objet de données, permet de dire TodoListBean, qui est dans un état différent pour chaque utilisateur.

Alors, comment un service, AddTodoItemService par exemple, manipuler ces données? C'est là le proxy entre en jeu. Lorsque instancié, le AddTodoItemService obtient injecté avec un proxy pour le TodoListBean, au lieu de l'objet réel. De cette façon, lorsque les besoins de services pour accéder au TodoListBean le conteneur desservira l'un TodoListBean de la session des utilisateurs, et donc le service sera opérationnel sur le haricot correct (basé sur lequel utilisateur a appelé le service), au lieu de faire quelque chose idiot comme ayant de nombreuses copies du service inclus dans chaque champ de la session de l'utilisateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top