RCP, Extension Points und ClassCircularityError

antimon

Mitglied
Hallo zusammen,

Extension Points sind zwar sehr toll, haben aber doch ganz schöne Tücken... momentan verzweifle ich an einer - vielleicht könnt Ihr mir helfen, Licht ins Dunkel zu bringen.

Kurze Beschreibung zu dem was ich erreichen möchte:
Es gibt ein Bundle, welches von einer seriellen Schnittstelle empfängt. Dieses bietet auch über einen Extension Point an, die empfangenen Nachrichten an ein anderes Plugin weiterzureichen. Dazu muss ein Interface implementiert werden, welches die Methode packetReceived(Packet p) implementieren muss.

Nun gibt es ein Plugin, welches diese Nachrichten emfpangen soll und in einem Thread verarbeitet, damit die zeitaufwändige Bearbeitung nicht in der packetReceived()-Methode erfolgt. Diese nimmt lediglich das Paket entgegen, legt es in eine Queue und der Thread soll diese Queue abarbeiten.

Ich dachte mir also, der Thread wird im Activator des Plugins gestartet und wartet dann auf eintreffende Pakete. Die Instanz wird als Singleton definiert, damit kann ich einerseits den Thread starten und dann über den Extension Point weiterreichen, damit die Nachrichten durch das Bundle, welches die serielle Schnittstelle abfragt, überreicht werden können.

Allerdings ist es so: Wenn ich im Activator keine Instanz erzeuge, also nur über den Extension Point eine Instanz geholt wird, funktioniert es. Wird allerdings im Activator eine Instanz gebildet, stürzt mein Programm mit zig Meldungen ab, dort erscheint als Root Exception der ClassCircularityError - und zwar dort, wo die Instanz erzeugt bzw. geholt werden soll.

Ich kann natürlich gern den Output posten, aber das ist gigantisch viel... und ich befürchte es verwirrt eher als dass es etwas hilft.

Hat jemand eine Idee, wie es zu den Problem kommen kann?
Normalerweise, wenn ich richtig informiert bin, wird ja eine Extension gebildet, indem die im Extension Point angegebene Klasse mit dem Default-Constructor gebildet wird. Da ja hier eine Singleton-Klasse verwendet werden soll, habe ich das Ganze durch eine Factory, die IExecutableExtensionFactory implementiert, gelöst. Damit sollte ja kein extra Objekt erstellt werden, sondern das vorhandene (bzw. sofern noch nicht vorhanden, ein neues angelegt werden). Aber trotzdem crasht das ganze Programm.

Nach stundenlangem Probieren und Suchen im Internet (leider erfolglos), hoffe ich nun auf Eure kompetenten Ratschläge um das Problem zu lösen!
 
Hallo,

kannst du mal ein kleines (minimal) Beispielprojekt-Set zusammenstellen und hier posten? Dann kann man dir leichter helfen...

Gruß Tom
 
Hallo Tom,

ich habe versucht, das Problem nachzubilden, allerdings war es dann (natürlich) weg - wie sollte es sonst auch sein ;)

Da das Ganze ein recht komplexes Zusammenspiel ist, bin ich dabei das zu vereinfachen wo es geht - wenn der Fehler dann noch einmal auftaucht würde ich mich noch mal melden - vielen Dank aber derweil!
 
Zurück