2009-09-29 12 views
1

Cela peut paraître complexe, mais je vais quand même demander:qu'est-ce qu'un cours singleton? Peut-il m'aider à exécuter une seule instance d'une classe pour deux services connexes?

Je courais un service Un qui utilise la classe X. Je veux commencer un autre service B qui utilise les classes A en plus de nouvelles classes.

Service Un est déjà en cours d'exécution. Je fais un déploiement à chaud du service B.

Voici la vraie question - réparerons B utiliser la même instance de la classe X ou une instance distincte. Comment la classe singleton peut-elle m'aider ici?

+0

Comment puis-je faire en sorte qu'il ne devrait y avoir qu'une seule instance. –

Répondre

2

Chaque service s'exécutera dans son propre espace de processus de système d'exploitation (OS), et chaque espace de processus a ses propres instances de classe. Une classe "singleton" est normalement codée en utilisant des champs statiques dans une classe, ce qui serait local dans l'espace de processus dans lequel le code s'exécutait, donc non, ils ne partageront pas de singletons. Chacun aura sa propre instance. Cependant, vous pouvez faire ce que vous essayez de faire en utilisant un processus de synchronisation partagé externe (par exemple, en exposant un singleton à tout ce qui est équivalent à .Net Remoting (ou WCF) - un point d'extrémité exposé au réseau qui est codé pour utiliser un Singleton, et avoir vos deux services "se connecter à" et utiliser ce Singleton accessible à distance)

+1

Merci pour votre réponse. FYI est un service Axis2. Supposons que ces deux services fonctionnent sur la même machine. Comment puis-je permettre qu'il n'y ait qu'une seule instance. –

+0

Comme je l'ai dit, en utilisant une sorte de java remoting, codé comme ce qui serait java équivilent de .Net MarshallByRef Singleton. (Le code d'un service doit héberger le singleton, et l'autre doit "l'utiliser" même s'il "vit dans le premier." –

+0

'java équivilent de .Net MarshallByRef Singleton' - que je vais devoir découvrir. –

0

Je ne suis pas familier avec les détails de la façon dont les services Web Java sont exécutés, mais s'ils fonctionnent tous deux dans la même VM alors je pense que les classes seraient partagées entre toutes les applications dans la VM et les champs statiques seraient donc partagés. Comme le motif Singleton est généralement réalisé en attachant une seule instance à un membre statique, le Singleton serait partagé.

Ce basé sur: The Clean Code Talks - "Global State and Singletons"

Vous devriez être en mesure de le tester en écrivant deux simples services Web. Un qui fait quelque chose au singleton, comme définir un drapeau, et un autre qui vérifie pour cela.