Hallo Leute,
ich brauche leider eure Hilfe.
Ich benutze die @java x.inject.Instance Annotation um zur Laufzeit über alle Implementierungen eines Interfaces zu iterieren. Hiermit wird ein ID Generator für meine Entities realisiert:
@Startup
public class EntityIdGeneratorImpl implements EntityIdGenerator {
@Inject
@Any
private Instance<IdFetcher> fetcher;
public EntityIdGeneratorImpl() {
}
//...
}```
Bis vor zwei Wochen hat das auch ausgesprochen gut funktioniert.
Dann ist mein Laptop abgestürzt. :scheiterhaufen:
Ich habe mein System jetzt neu aufgesetzt, m.E. alles wieder so wie vorher: Oracle JDK 8, Glassfish 4.1, Netbeans 8.0.1, Maven Projekt wieder ausgecheckt. Aber mein Injection-Mechanismus funktioniert nicht mehr, der Iterator von "fetcher" bleibt leer.
Beim herumspielen mit verschiedenen Typen und den Methoden ".isAmbiguous()" und ".isUnsatisfied()" habe ich festgestellt, dass der Lookup immer fehlschlägt, wenn es mehrere Implementierungen eines Interfaces gibt. Wenn das selbe Interface von zwei Klassen implementiert wird, dann ist das Ergebnis "ambiguous = false" und "unsatisfied = true", sobald ich eine der beiden Implementierungen lösche ist das Ergebnis "ambiguous = false" und "unsatisfied = false". Im letzteren Fall kann ich auch auf eine Instanz zugreifen.
Ich habe die letzten Tage ziemlich viel ausprobiert, (unter anderem auch eine mehrfache Umkonfiguration und Löschen der beans.xml, @Any Annotation, keine @Any Annotation, Field Injection, Method Injection, Constructor Injection, CDI, EJB...), und ich befürchte ich sehe zur Zeit den Wald vor lauter Bäumen nicht mehr. Habt ihr so einen Fall vielleicht schon einmal selbst gehabt und vielleicht gelöst? Was würdet ihr versuchen, oder habt ihr eine Vermutung?
Viele Grüße,
Tim