Ich arbeite an einer Java EE-Anwendung, hauptsächlich JAX-RS mit einer JSF-Verwaltungskonsole, die CDI / Weld für die Abhängigkeitsinjektion mit javax.enterprise.context.ApplicationScoped
Objekte. Kleinere Debugging-Probleme beiseite, CDI hat wunderbar für dieses Projekt gearbeitet.
Jetzt brauche ich eine sehr grobkörnige Kontrolle über CDI-injected Objektlebenszyklen. Ich brauche die Fähigkeit zu:
@ScopeType
und implementieren Sie Context
in denen ich Methoden zur Verfügung stellen könnte, um eine der beiden oben genannten Aufgaben durchzuführen. Ich bin mir vollkommen bewusst, dass dies im Allgemeinen, wenn nicht sogar gegensätzlich zu CDI und Abhängigkeitsinjektionen geschieht. Ich will nur wissen
Schweißnaht-Referenzdokumentation Abschnitt 2.1.2
Beachten Sie, dass sobald eine Bohne gebunden ist In einem Kontext bleibt es dabei Kontext, bis der Kontext ist zerstört. Es gibt keine Möglichkeit, manuell entferne eine Bean aus einem Kontext. Wenn du will nicht, dass die Bohne in der sitzt Sitzung auf unbestimmte Zeit, in Betracht ziehen mit ein anderer Bereich mit einer kurzen Lebensdauer, wie die Anfrage oder Konversation Umfang.
Beispiel für ein benutzerdefiniertes Oszilloskop Porting the veiwscoped jsf annonation nach cdi
Wenn Sie wirklich nicht den Pfad des benutzerdefinierten Bereichstyps verwenden möchten. Sie können eine nicht portierbare -Methode verwenden, indem Sie AbstractSharedContext , um Zugriff auf den BeanStore oder die cleanUp () - Methode des Kontexts zu erhalten.
In diesem Thread erfahren Sie, wie Sie eine BeanManager Instanz für Ihre Umgebung erhalten
Standardmäßig gibt es nur den Conversation-Bereich, über den Sie den gesamten Lebenszyklus kontrollieren können. Sie können jedoch Ihren eigenen Bereich erstellen, wenn die Konversation nicht Ihren Anforderungen entspricht. Das Erstellen eines Bereichs ist eine schwierige Aufgabe, aber Sie können zum Schweißcode gehen und nachschauen, wie die Konversation implementiert wurde.
In CDI 1.1 gibt es eine javax.enterprise.context.spi.AlterableContext
-Schnittstelle, mit der Sie eine Bean-Instanz einzeln zerstören können. Alle normalen Bereiche (Anfrage, Konversation, Sitzung) sind änderbar.
Das beanManager
ist hier eine javax.enterprise.inject.spi.BeanManager
Instanz. Sie können es über JNDI Lookup erhalten:
oder über statische CDI-Methode:
%Vor%, aber beachten Sie die Probleme mit der statischen Methode in einigen Weld-Versionen:
Tags und Links java java-ee cdi jboss-weld