Injektion von HttpServletRequest

8

Ich benutze ejb 3 und versuche, HttpServletRequest @Inject, aber während der Bereitstellung ich Ausnahme auftreten.

Code:

%Vor%

Ausnahme:

%Vor%

Was könnte ich damit machen?

    
Kirill Bazarov 16.11.2012, 15:47
quelle

2 Antworten

17

Der Lebenszyklus von HttpServletRequest wird vom EJB / Webcontainer verwaltet, nicht vom CDI-Container. Der Versuch, sie zu injizieren, führt zu Problemen, da es in der Regel viele Implementierungen der Schnittstelle gibt und Ihr CDI-Container nicht über genügend Informationen verfügt, um eine Entscheidung darüber treffen zu können, welche Implementierung injiziert werden soll. Selbst wenn Sie eine Instanz davon erfolgreich injiziert haben, wäre nicht dieselbe Instanz wie die Verwaltung durch den EJB-Container.

Um eine ordnungsgemäß verwaltete Instanz der Anforderung zu erhalten, tun Sie dies stattdessen:

%Vor%     
Perception 16.11.2012, 16:00
quelle
7

Wenn Ihr Angehöriger eine JAX-RS (Restful) -Klasse ist, notieren Sie sich die obige Antwort. Auf der anderen Seite, wenn Sie eine komplexere Anordnung von Dependency-Injektion haben, ist die Frage sicherlich gültig.

Diese Funktion wurde der CDI 1.1-Spezifikation (JSR-346) hinzugefügt, die wiederum zur neuen Java EE 7-Spezifikation hinzugefügt wurde. Mit anderen Worten, die neueste Klasse von Java Enterprise Application Servern wird damit umgehen können.

Wenn Sie in der Zwischenzeit Abhängigkeiten für Anforderungsbereiche verwalten möchten, die in der Zukunft Zugriff auf die tatsächlichen HttpServletRequest-Informationen benötigen, können Sie Ihren Ansatz verwenden und JBoss Solder Werkzeug. (Keine Panik, wenn die Website nicht mehr funktioniert, die Tatsache ist, dass die Arbeit auf die offizielle CDI 1.1-Spezifikation umgestellt wurde - zB "Weld 2" - also arbeiten sie nicht mehr an Löten. Aber es ist immer noch perfekt geeignet für CDI 1.0.)

Die maven-Abhängigkeiten wären

%Vor%     
Murray Todd Williams 26.08.2013 19:07
quelle