[Eclipse RCP E4]InjectionException: no actual value was found for the argument "MDirtyable"

Chuqa

Aktives Mitglied
Hallo zusammen,

ich versuche in einer Eclipse-RCP-Applikation einen Part aus einem PartDescriptor zu erzeugen. Der erzeugte Part bekommt einen Context und injiziert selbst MDirtyable:

Erzeugen des Parts:
Java:
MPartStack thePartstack = (MPartStack) modelService.find(partstackID, app);
			
MPart samplePart = partService.createPart(samplepartDescriptorId);
			
IEclipseContext context = EclipseContextFactory.create();
context.set("context_key", "the value");
samplePart.setContext(context);
			
thePartstack.getChildren().add(samplePart);
			
partService.activate(samplePart);
Wird der Part aktiviert, kommt es zur InjectionException:
Java:
org.eclipse.e4.core.di.InjectionException: Unable to process "SamplePart.dirty": no actual value was found for the argument "MDirtyable".

Lasse ich entweder den Context oder MDirtyable weg, wird mir der Part korrekt erzeugt.

Funktioniert das Beides zusammen nicht oder was muss ich ändern?

Welche alternative Implementierung kann ich verwenden, um die Funktionalität in meinem Programm zu nutzen?

Vielen Dank für eure Hilfe.

Gruß chuqa
 

dzim

Top Contributor
Eventuell kannst du ja ein Dirty-Flag im Context speichern und an den entsprechenden Stellen einen Listener auf den Wert setzen. Bin aber schon wieder eine weile raus aus dem e4-Zeug und mir jetzt nicht zu 100% sicher, ob das wirklich so funktioniert, wie ich mir das vorstelle...

Schau mal, ob dir in dem Zusammenhang vielleicht JFace Databinding helfen kann: JFace Data Binding - Tutorial
(Vielleicht kannst du ja den im Context hinterlegten Wert so überwachen...)

---------------------------------------------

Wenn ich gerade so drauf schaue: Ich bin mir nicht sicher, aber die per @Inject injizierten Objekte kommen ja aus dem Kontext (oder sollten sie jedenfalls). Das Problem wird also sein, dass noch nie zuvor ein MDirtyable in den Kontext "geladen" wurde und somit auch nicht wieder rausgeholt (injiziert) werden kann. Vielleicht musst du also zuvor (also bevor dein Stack den Kontext nutzt) irgendwie ein MDirtyable da rein bringen, z.B. via:

Java:
IEclipseContext context = EclipseContextFactory.create();
context.set(MDirtyable.class, new MDirtyable());

Wobei ich zugeben muss, dass ich keine Ahnung hab, was da der richtige Weg ist, denn es scheint ja so, als wäre der Key - der für den Lookup im Context verwendet wird - "SamplePart.dirty" lautet. Das sieht nach einem dynamisch generierten Namen aus. (Also evtl. müsste im Code-Block stat der Klasse eben "SamplePart.dirty" als key stehen).
 

Chuqa

Aktives Mitglied
Hallo dzim,

erst einmal vielen Dank für deine Hilfe.

Das Data Binding wäre vielleicht eine Möglichkeit. Genauso kann ich aber meine Wert auch in den Kontext der MApplication einfügen. Bei beiden Möglichkeiten habe ich aber das Problem, dass ich nicht weiß, wie ich die richtigen Werte in dem Part dann finde. Meine Applikation ist nämlich wie folgt aufgebaut:
Es gibt mehrere PartDescriptoren, wobei jeder einzelne eine bestimmte mathematische Formel darstellt. Nun gibt es so etwas wie "Projekte", die mehrere Formeln mit entsprechenden Werten enthalten können. Dabei kann eine Formelart mehrfach vorkommen. Wählt der User eine Formel aus, so soll diese in dem entsprechenden Part mit den Werten in einem PartStack dargestellt werden. Der User kann mehrere Formeln gleichzeitig in dem PartStack öffnen.
Stelle ich die Werte also nicht dem Part direkt zur Verfügung, habe ich im Moment keine Idee, wie ich zuverlässig die richtigen Formelwerte ermitteln kann.

Ein Instanz von MDirtyable direkt in den Kontext zu packen, funktioniert grundsätzlich. Es kommt dann nicht mehr zu einer Exception. Allerdings ist die Funktionalität nicht dieselbe, wie beim Injizieren in die Instanz. So ist der Part schon optisch (Sternchen hinter dem Part-Label) nicht als "dirty" gekennzeichnet und auch beim Schließen des Parts wird der entsprechende Dialog zur Nachfrage nicht angezeigt.

Bei "SamplePart.dirty" handelt es sich um die MDirtyable-Klassenvariable.

Ich könnte nun natürlich MDirtyable komplett selbst nachimplementieren. Mit @PreDestroy im Part könnte ich auf den "dirty"-Parameter reagieren. Ich dachte aber, dass es vielleicht eine Möglichkeit gibt, die bereits vorhandene Framework-Funktionalität nutzen zu können.
 

dzim

Top Contributor
Hi,

ich denke die gibt es sicher! Das Problem ist, dass ich zwar schon mit e4 gearbeitet habe, aber weitaus mehr Low-Level. Ich habe nicht die ganze neue UI-Description-Geschicht ausprobiert sondern mir mit e4 und OSGi-(Declarative-)Services eine eigene Plattform auf JavaFX aufsetzend gebabut - auch wenn es an dieser Stelle vielleicht sinvoll ist zu sagen, das eine e4-Renderer die langfristig sinnvollere Wahl darstellt (und damit natürlich auch die funktionalitäz der MDirtyable - in Eclipse 3 hiess das übrigens nur IDirty und war viiiiiiiel kruder ;-) ).

Sorry, aber ich denke, mein Wissen ist hier zu bechränkt, als dass ich dir weiterhelfen könnte. Versuch dein Glück vielleicht mal auf den Eclipse-Foren ( https://www.eclipse.org/forums/index.php/f/12/ ) - einige Leute dort sind sehr hilfreich! Ich denke generell die besten deutschsprachigen Ansprechpartner wären Lars Vogel (kennst du seine Tutorials schon? Eclipse, RCP, Plugin and OSGi Development --> Eclipse platform services - Tutorial ) und Tom Schindl (der ist zwar primär JavaFX-Guru, ist aber auch recht tief in der Materie - immerhin ist er Initiator und Head des efxclipse-Plugins https://www.eclipse.org/forums/index.php/f/259/ ).
Aus der EMF-/Xtext-Welt gabs da auch noch einen aus München - Jonas Helming, glaub ich.

Vielleicht kannst du auf einem der anderen Kanäle Hilfe finden (Stackoverflow gibt's ja auch noch...).

Wenn du was findest, gib vielleicht hier auch noch mal bescheid! Danke :)

Grüsse
 

JavaMeister

Gesperrter Benutzer
Mit EclipseContextFactory.create(); erstellst du einen neuen Context. Dieser hat bestimmte DI Objekte nicht enthalten.

Wenn dein Part nun auf diese angewiesen sind, so schlägt das fehl.

Wie holst du dir das Dirtyable? Wahrscheinlich brauchst du eien @Active deklaration, damit man weiß welches Dirtyable.
 

dzim

Top Contributor
Den Tutorials folgend, würde ich ja sagen, es benötigt kein @Active... Und eigentlich sollte ein Context bei einer reinen e4-Anwendung doch schon da sein (und damit das DI funktionieren). Das man das in einer selbstgestrikten Lösung so machen muss... möglich, aber in seinem Fall denke ich eher nicht, dass das gebraucht wird.
Ist aber nur meine Meinung, als nicht gleich drauf los steinigen. :p
 

JavaMeister

Gesperrter Benutzer
Ja, aber den Eclipse Context holst Du mit "@Context" oder "@EclipseContext". Mit EclipseContextFactory.create(); erstellst du einen NEUEN, der nix mit dem alten zu tun hat.
 

Chuqa

Aktives Mitglied
Hallo zusammen,

der Context ist hierarchisch aufgebaut. Es gibt einen globalen Applikations-Context. Darüber hinaus können einige Elemente des Application Models ihren eigene Kontext haben, wie z.B. eben auch der Part. Ich vermute eher, dass das Problem der selbst erstellte Context ist. Lege ich diesen nicht für den Part an, dann wird das wohl das Framework für mich machen und es lässt sich MDirtyable injizieren.

Java:
@Inject
private MDirtyable dirty;
Andernfalls hat der Part ja bereits einen Kontext ohne MDirtyable.

Die drei Personen kenne ich und die Tutorials von Lars Vogel haben mir auch schon viel geholfen. Jonas Helmig hat ein Eclipse 4-Buch geschrieben, dass hier vor mir liegt. Nichtsdestotrotz bin auch ich absoluter Anfänger in RCP.
Ich werden die Frage auch parallel in dem Eclipse-Forum stellen, sobald mein Login funktioniert. :(
 

Chuqa

Aktives Mitglied
Also ich weiß jetzt nicht ob es DIE Lösung ist, aber ich habe zu mindestens mal eine funktionstüchtige Implementierung gefunden.

Ich aktiviere zuerst den Part (inklusive MDirtyable), lasse mir dann den Context des Parts geben, manipuliere ihn und trigger dann eine entsprechende Methode im Part. Die Erzeugung des Parts sieht nun wie folgt aus:
Java:
MPartStack thePartstack = (MPartStack) modelService.find(partstackID, app);
			
MPart samplePart = partService.createPart(samplepartDescriptorId);
			
thePartstack.getChildren().add(samplePart);
			
partService.activate(samplePart);

IEclipseContext context = samplePart.getContext();
context.set("context_key", "the value");
context.processWaiting();
Mit context.processWaiting(); wird die Methode im Part getriggert.
Die Methode im Part, sieht dann wie folgt aus:
Java:
@Inject @GroupUpdates @Optional
public void getInfo(@Named("context_key") String contextValue) {
    System.out.println(String.format("Kontext-Value: %s", contextValue));
}
In der Methode habe ich dann die Objekte aus dem Context zur Verfügung.

Wenn noch jemandem etwas ein- oder auffällt, dass man verbessern kann, dann kommentiert das gerne.
Ansonsten denke ich, dass eine Lösung gefunden ist und bedanke mich ganz herzlich bei euch.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E OSGi Eclipse Plug-in programmierung: java.lang.NullPointerException: Cannot enter synchronized block because "profile" is null Plattformprogrammierung 4
R Eclipse Bundles Plattformprogrammierung 2
Robertop RCP Command in bereits bestehendes Eclipse-Menü einbauen Plattformprogrammierung 4
T Java Projekt läuft nur in Eclipse Plattformprogrammierung 6
M Eclipse Plugin PreferencePage BooleanFieldEditor Plattformprogrammierung 1
F OSGi Plugin unter Eclipse arbeitet anders als wenn veröffentlicht Plattformprogrammierung 2
D RCP P2-Repository für Eclipse-Plugins Plattformprogrammierung 0
M Debuging in Eclipse Annotations Processor Plattformprogrammierung 0
D Nach Sprachpaket Installation kann eclipse nicht mehr gestartet werden Plattformprogrammierung 4
L0MiN Wie kann ich ein Klassendiagramm aus Eclipse heraus erstellen? Plattformprogrammierung 5
M Eclipse Probleme beim Ausführen eines Programms Plattformprogrammierung 3
feinperligekohlensaeure Eclipse Workspace gemeinsam Nutzen -> keine .project Datei Plattformprogrammierung 1
F Eclipse Build Path auf benötigte Projekte Plattformprogrammierung 4
B Daten von Eclipse extern sichern Plattformprogrammierung 2
B Eclipse zeigt Fehler nach Java-Update auf 1.8.0_40 Plattformprogrammierung 3
VfL_Freak [Eclipse] Fehleranzeige im Reiter "Problems" Plattformprogrammierung 1
S Errors in workspace bei eclipse Plattformprogrammierung 3
T eclipse bietet keine META-INF an Plattformprogrammierung 1
N Eclipse wo starten Plattformprogrammierung 6
A Eclipse schließt einfach ohne Fehlermeldung Plattformprogrammierung 4
W Eclipse vergißt beim Exportieren Resources-Ordner Plattformprogrammierung 11
A RCP Eclipse e4 und Injection-Contexts Plattformprogrammierung 0
K Eclipse fährt nicht mehr hoch. Metadatendatei schuld? Plattformprogrammierung 7
T Eclipse Eigenschaften hinzufügen Plattformprogrammierung 2
M RCP [Eclipse RCP 3.4] ViewTab Kontextmenu "Alle schließen" Plattformprogrammierung 0
D Problem mit eclipse Plattformprogrammierung 2
S Verschieben des Verzeichnis .eclipse aus Userprofile Plattformprogrammierung 3
A RCP Kann kein Eclipse 4 Projekt anlegen Plattformprogrammierung 0
S RCP Exportiertes RCP Produkt lädt Datei nicht, bei Start aus Eclipse wird Datei jedoch gefunden Plattformprogrammierung 6
G Eine Library in Eclipse zur Verfügung stellen Plattformprogrammierung 14
Gregorrr Eclipse RCP Product Build-Nummer + Jenkins Plattformprogrammierung 6
R Einfaches Eclipse-Plugin-Beispiel funktioniert nicht Plattformprogrammierung 5
H OSGi OSGi + Logback + slf4j - Eclipse Run Configuration Plattformprogrammierung 7
C plugin development environment eclipse Plattformprogrammierung 4
R RCP Commands nutzen / org.eclipse.ui.file.save Plattformprogrammierung 7
O Installiere externe Methode "containsNone" in Eclipse Plattformprogrammierung 2
M Keybinding in Eclipse Plugin Plattformprogrammierung 3
TheWhiteShadow RCP Konstrukt für Editor in Eclipse gesucht. Plattformprogrammierung 3
B Eclipse Probleme mit build Plattformprogrammierung 8
H Keine Hilfe/API mehr in Eclipse Juno? Plattformprogrammierung 4
B Neue SuppressWarning in Eclipse Juno Plattformprogrammierung 6
B Eclipse Property Page Plattformprogrammierung 6
B Eclipse PreferencePage Plattformprogrammierung 3
B Eclipse Plugin Einstellungsleiste Plattformprogrammierung 2
B Birt-Previewer über Eclipse Plattformprogrammierung 14
J Eclipse Plug-In für UML-Diagramme Problem Plattformprogrammierung 4
O Eclipse Plugin - Einfachstes Problem, das es gibt. Plattformprogrammierung 2
R Eclipse RCP Tabellen-View (Anfängerfrage) Plattformprogrammierung 3
C Eclipse: Notification beim umbennen von Methoden? Plattformprogrammierung 4
schalentier Eclipse Sourcecode Plattformprogrammierung 4
A Eclipse undo/redo button reagiert nicht auf Änderungen in der OperationHistory Plattformprogrammierung 5
P Eclipse M2_REPO (NON MODIFIABLE) Plattformprogrammierung 8
B Eclipse: Contextmenu id erhalten? Plattformprogrammierung 9
H Datei in eclipse wird nicht erkannt Plattformprogrammierung 3
O Neues Tastenkürzel für Eclipse Editorfenster registrieren Plattformprogrammierung 2
3 Eclipse Editor Plugin selektiert Projekt nicht Plattformprogrammierung 10
Madlip RCP eclipse.ui.bindings (Key-Problematik) Plattformprogrammierung 2
S Eclipse vs. JavaMail vs. Ubuntu vs. Windows Plattformprogrammierung 3
M eclipse führt applikationen nicht mehr aus Plattformprogrammierung 6
S Eclipse: Auf CTRL-C/CTRL-V im Package Explorer? Plattformprogrammierung 4
M Eclipse und Hilfen Plattformprogrammierung 5
G Eclipse buggt rum!!! Plattformprogrammierung 4
B Eclipse RCP und Java 7 Plattformprogrammierung 7
G RCP Eclipse Editor + Guice Plattformprogrammierung 8
T RCP Eclipse RCP: Wo/wann im Plugin ist workbench initialisiert? Plattformprogrammierung 14
G Eclipse Plug-in: wie refreshe ich eine combobox? Plattformprogrammierung 4
M Eclipse Plug-in: Wie eine Grafik einfügen? Plattformprogrammierung 20
M RCP [Eclipse RCP] Feature Export und "Fehler"... Plattformprogrammierung 3
P Eclipse speichert keine Änderungen Plattformprogrammierung 5
M Eclipse - Dokumentation nicht über das Internet benutzen Plattformprogrammierung 3
C Eclipse Plugin NoClassDefFoundError Plattformprogrammierung 4
E org.eclipse.ui.dialogs.ListSelectionDialog erzeugt ClassNotFoundException zur Laufzeit Plattformprogrammierung 4
M Eclipse Plugin Entwicklung - NoClassDefFoundError Plattformprogrammierung 10
C RCP Verständnisfrage Eclipse/Equinox Plattformprogrammierung 4
D eclipse-RCP von der Konsole baut nicht Plattformprogrammierung 3
L RCP Eclipse Popupmenu im PackageExplorer erweitern? Plattformprogrammierung 7
C Eclipse Plugin Entwicklung: Editor für Flussdiagramme Plattformprogrammierung 6
S (OSGI - EQUINOX) Welche Eclipse IDE? Plattformprogrammierung 3
C Pdf in jar datei einbinden mit eclipse Plattformprogrammierung 23
G neuer branch in SVN mit Eclipse Plattformprogrammierung 6
F RCP eclipse rcp ohne eclipse? Plattformprogrammierung 15
dzim RCP Eclipse Provisioning Plattformprogrammierung 3
G RCP Abhängigkeiten von Eclipse Plugins Plattformprogrammierung 9
K Eclipse RCP, EMF, Hibernate Problem Plattformprogrammierung 7
B RCP eigenes Eclipse Plugin wird nicht aufgelöst Plattformprogrammierung 7
T Eclipse Helios XMLUnit importieren Plattformprogrammierung 6
R Verwendung pdfbox in Maven-Projekt in Eclipse Plattformprogrammierung 3
lumo RCP wechseln der Font von Eclipse per code Plattformprogrammierung 10
lumo RCP Eclipse internationalisierung Plattformprogrammierung 5
jemandzehage Kurze Fehlernachricht beim starten in Eclipse Plattformprogrammierung 5
A RCP java.lang.ClassNotFoundException: org.eclipse.core.runtime.adaptor.EclipseStarter Plattformprogrammierung 7
P Wie bekomme ich ICompilationUnit aus dem event? bei Eclipse-Plugin Plattformprogrammierung 3
Rudolf External Libs dauerhaft in Eclipse einbinden Plattformprogrammierung 3
G RCP Eclipse UI Forms Plattformprogrammierung 10
musiKk RCP Eclipse: Speichern von Spaltenbreiten Plattformprogrammierung 9
X Datei in einem Eclipse Projekt über Plugin zugreifen Plattformprogrammierung 2
P Eclipse Help: Wie Links zu anderer Hilfeseite setzen ? Plattformprogrammierung 5
F Eclipse EMF Modelltransformation Plattformprogrammierung 3
tfa RCP Compilereinstellungen festlegen bei Eclipse-Batch-Build Plattformprogrammierung 9
Rudolf Eclipse stürzt bei nebenläufigen Programmen ab! Plattformprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben