2010-11-16 11 views
0

J'écris une bibliothèque cliente pour un service Web utilisant CXF. Le service utilise une clé modifiable pour gérer les sessions et, éventuellement, permet à une session d'être maintenue en vie. J'ai construit un client Client et je veux permettre aux utilisateurs de la bibliothèque de choisir leur type de gestion de session, soit un gestionnaire qui gère les clés mais qui ne tente pas de rester actif et un gestionnaire qui gère les clés et maintient la session en vie.Java - Modèle de conception, gestion de session pour le client de service Web

Je pensais d'avoir un champ SessionManager dans la classe Client (avec une classe et une classe SimpleSessionManagerKeepAliveSessionManager) mais, afin de maintenir en vie la session, le KeepAliveSessionManger faudrait appeler une méthode de la classe Client. Cela voudrait dire que la classe Client a une référence à la classe SessionManager et la classe SessionManager ferait référence à la classe Client - ce qui est évidemment un design inélégant. Pouvez-vous suggérer un modèle de conception (ou une implémentation altnernate) qui me permettrait d'implémenter ces fonctionnalités d'une manière "meilleure"?

Cheers,

Pete

Répondre

0

Vous pouvez utiliser le SessionManager comme une usine de "clients" qui rentreraient une interface pour le client. Le client n'aurait pas besoin de "connaître" le SessionManager. Et si le SessionMaAnager était un KeepAliveSessionMaanger, il garderait la session en vie en interne.

Quelque chose comme ceci:

SessionManager sm = new KeepAliveSessionManager(int keepAliveTimeout); 

IClient client = sm.GetClient(); 
client.InvokeSomeMethod(); 

Le SessionManager utilise en interne un fil (ou quelque chose) et le client de garder la session en vie. Le client ne "sait" jamais sur le SessionManager ..

BTW, je pense en .NET mais il devrait traduire en java ...