Singelton und Eclipse RCP

mschlegel

Erfahrenes Mitglied
Servus

Ich befasse mir gerade mit dem Buch "Head First - Design Patterns" und unter anderem wird da auch das Singelton Pattern erklärt. Jetzt denk wahrscheinlich die Hälfte "dieses einfache Pattern, was soll man da schon fragen" ;)

Das dachte ich auch, aber (jetzt kommts) gegen Ende des (zugegeben kurzen) Kapitels wird erwähnt dass es ein Problem geben kann wenn mehrere ClassLoader eingesetzt werden. Da hilft es auch nicht die Initialisierung statisch zu erledigen, die getInstance() als synchronized zu markieren, oder die statische Variable volatile zu markieren.

Erstellt man nun aber, so wie ich, eine Eclipse RCP so hat jedes Plugin seinen eigenen ClassLoader.
Wie sollte man jetzt mit einem Singleton umgehen? Natürlich gibts die BuddyPolicy, aber einfach alles als Buddy zu definieren halte ich auch für ziemlichen Quatsch. Im Buch wird erwähnt direkt einen spezifischen ClassLoader für die Singletons anzugeben...aber wie könnte man das in einer RCP umsetzen?

Is jetzt keine dringende Frage...meine Anwendung läuft auch so. Es interessiert mich einfach mal.

Danke
 
Das grundsätliche "Problem" ist, dass die Instanz an einen Classloader gebunden ist. Wenn es nun plötzlich mehrere (wie bei OSGi halt für ein Bundle ein Classloader) gibt kannst du zwar innerhalb eine Classloaders ein Singleton haben, jedoch nciht sicherstellen, dass in einem anderen noch eine Instanz rumfliegt, weil der ja potentiell auch einen getInstance() Aufruf abfackeln kann.

Der Singleton ist wohl eines der problematischsten Patterns des GoF Book, weil man in 99% der Artikel dazu die Standardimplementierung aus dem Buch findet, die allerdings mit jeder Menge Nachteilen / Problemen behaftet ist. Wie der Zufall es will, gibt es grad im XING eine Diskussion darüber:

https://www.xing.com/app/forum?op=showarticles;id=8188600;offset=0

Gruß
Ollie
 
Zurück