3 Stimmen

Benötige ich für die CDI-Injektion META-INF/beans.xml im Producer-Archiv UND im Injectee-Archiv?

Vielleicht sind es einfach zu viele Stunden, in denen ich das Internet durchforstet habe. CDI 1.0 Spezifikation aber ich konnte keine detaillierte Beschreibung finden, wo genau ein META-INF/beans.xml erforderlich war.

(Die Abschnitt über die Entdeckung der Bohne macht ein paar verlockende Aussagen, die bestimmte Dinge andeuten, aber ich bin mir nicht sicher, ob sie vorschreibend sind).

Soweit ich weiß, braucht jedes Bohnenarchiv ein solches.

Aber betrachten Sie einen Fall mit den folgenden Gläsern in einer CDI 1.0-konformen Umgebung:

  • Eine Schnittstelle jar die nur Schnittstellen enthalten
  • Eine Implementationstopf die CDI-Beans enthalten, die diese Schnittstellen implementieren und die Funktion @Inject Injektionsstellen, aber keine Erzeugermethoden
  • A Erzeugergefäß enthält (der Einfachheit halber) ein einzelnes Java-Objekt mit einer einzigen Methode, die mit @Produces .

Es erscheint logisch, dass sowohl die Erzeugergefäß und die Implementationstopf müssten Bohnenarchive sein, und somit müsste jedes META-INF/beans.xml die in ihnen enthaltenen Ressourcen.

Aber nur der Vollständigkeit halber: Ist dies tatsächlich der Fall? Da die Implementationstopf verwendet nur eine @Inject Punkt und keine CDI-Anmerkungen, würde er auf andere Weise gescannt werden? Man kann es auch anders sehen: In diesem Beispiel ist der Implementationstopf verwendet wird sólo als die Ziel für Injektionen, nicht die Quelle von Injektionsmitteln. Ich könnte mir also eine gewisse Logik vorstellen, die besagt: Seht her, nur Gläser, die Bohnen produzieren, die kann injiziert werden müssen als Bean-Archive deklariert werden. (Ich behaupte nicht, dass das wahr ist; ich kann mir nur vorstellen, dass dieses Argument vorgebracht wird).

Und schließlich ist da noch die ganze Frage der Schnittstelle jar . Per Definition enthält es keine Bohnen, aber ich habe vor langer Zeit Fälle mit GlassFish gesehen, in denen sogar die Schnittstelle jar musste eine META-INF/beans.xml Datei enthalten. Das scheint mir falsch zu sein, aber zu meiner Überraschung konnte ich in der Spezifikation keinen Abschnitt finden, der dies bestätigt oder verneint.

Also: beans.xml überall? Nur in Gläsern, die Injektionsmaterial produzieren? Nur in Gläsern für Injektionszwecke? Oder...?

2voto

struberg Punkte 700

A.) Sie benötigen die Markierungsdatei beans.xml sowohl im producer als auch im impl jar

b.) Bei reinen Schnittstellen-Jars benötigen Sie die Markierungsdatei beans.xml nicht. Wenn GlassFish fehlschlägt, dann ist dies ein Fehler in GF. Es richtet aber keinen Schaden an.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X