Java-Kontexte und Abhängigkeitsinjektion mit JAX-RS verwenden

JAX-RS-Stammressourcen (Java™ API for RESTful Web Services) und -Provider können in einem Webarchiv (WAR-Datei) verwendet werden, das Java Contexts and Dependency Injection (JCDI) unterstützt. Fügen Sie Ihrer WAR-Datei einfach eine gültige Datei WEB-INF/beans.xml hinzu, und alle JAX-RS-Stammressourcen und -Provider, die gültige JCDI-Beans sind, können JCDI-Funktionen verwenden.

Informationen zu diesem Vorgang

JAX-RS-Klassen in einem Archiv mit JCDI-Unterstützung können mit @javax.inject.Inject annotierte Injektionspunkte haben, an JCDI-Lebenszyklusbereichen teilhaben, JCDI-Ereignisse auslösen und Methodeninterceptor und -dekoratoren haben.

JAX-RS-Stammressourcen- und JAX-RS-Providerklassen müssen einen gültigen von JCDI-MBean-Konstruktor haben. Wenn Ihre Klassen einen Konstruktor haben, der einen Parameter hat, der mit der Annotation @javax.ws.rs.core.Context oder mit einer beliebigen JAX-RS-Parameterannotation wie @javax.ws.rs.QueryParam annotiert ist, müssen Sie Ihren Code im Allgemeinen refaktorieren, damit er stattdessen JAX-RS-annotierte Beaneigenschaften oder -felder verwendet. Sie können eine mit @javax.annotation.PostConstruct annotierte Methode hinzufügen, um Ihr Objekt zu erstellen.

Außerdem müssen JAX-RS-Stammressourcen- und -Providerklassen einen in JCDI spezifizierten Geltungsbereich haben. Geltungsbereiche oder Bereiche steuern den Lebenszyklus einer JCDI-MBean. Stammressourcenklassen können einen beliebigen gültigen Geltungsbereich wie @javax.enterprise.context.RequestScoped haben, der bewirkt, dass sich die JAX-RS-Stammressourcenklasse genauso wie in einer Anwendung ohne JCDI-Unterstützung verhält. Die javax.ws.rs.core.Application-Unterklassen und JAX-RS-Provider müssen die Annotation @javax.enterprise.context.ApplicationScoped haben.

Sie können JCDI verwenden, um Ihre Anwendung schneller und einfacher zu entwickeln und um die Testfähigkeit Ihres Codes zu verbessern. JCDI unterstützt moderne Programmiertechniken wie Abhängigkeitsinjektion, ein ereignisgesteuertes Programmiermodell und ein aspektorientierteres Konzept hinsichtlich Cross-Cutting Concerns. Entwickler können aspektorientierte Programmierung verwenden, um Funktionen, die nicht zur Kerngeschäftslogik einer Methode gehören, ordnungsgemäß hinzuzufügen. Ein Cross-Cutting Concern ist beispielsweise die Protokollierung. Einige Entwickler müssen den Einstieg und den Ausstieg jedesmal protokollieren, wenn eine bestimmte Geschäftsmethode in einer Anwendung aufgerufen wird. Entwickler können jetzt JCDI-Funktionen wie Methodeninterceptor und -dekoratoren verwenden, um diese Funktionen ordnungsgemäß hinzuzufügen. Entwickler können Abhängigkeitsinjektion verwenden, um während Komponententests ohne großen Aufwand eigene Pseudoimplementierungen einzufügen. Die Entkopplung zuvor fest codierter Abhängigkeiten ermöglicht Entwicklern die Durchführung einfacherer Tests einzelner Komponenten.

JCDI-Beans können Enterprise JavaBeans (EJBs) injizieren und @javax.annotation.Resource-Injektionen verwenden, um Java-EE-Ressourcen (Java Platform, Enterprise Edition) zu injizieren. EJBs können auch JCDI-Beans sein. EJBs mit Annotationen wie @javax.ejb.Stateless können auch die JCDI-Abhängigkeitsinjektion und weitere JCDI-Features verwenden. Die EJBs behalten ihre transaktionsorientierten und anderen EJB-Features.

Java Contexts and Dependency Injection (JCDI) ist ein neues Feature von Java Platform, Enterprise Edition (Java EE) 6. JCDI kann das Programmiermodell ändern, um die Entwicklung von Anwendungen zu vereinfachen und gleichzeitig die Wartbarkeit der Anwendungen zu erhöhen. JAX-RS-Entwickler können JCDI-Features wie die @javax.inject.Inject-Unterstützung in Stammressourcen- und Providerklassen verwenden.

Vorgehensweise

  1. Konfigurieren Sie die Entwicklungsumgebung.
    1. Bevor Sie mit dem Entwickeln von JAX-RS-Anwendungen beginnen, müssen Sie Ihre Entwicklungsumgebung konfigurieren, indem Sie die JAX-RS-Bibliotheken im Klassenpfad hinzufügen.
  2. Definieren Sie die Ressourcen in den JAX-RS-Webanwendungen.
    1. Ressourcen sind die Grundbausteine eines RESTful-Service. Ressourcen können statische oder dynamisch aktualisierte Daten enthalten. Im Falle einer Onlinebuchhandlung sind Ressourcen beispielsweise ein Buch, eine Bestellung von einem Geschäft, ein Benutzerverbund. Wenn Sie die Ressourcen in Ihrer Anwendung definieren, können Sie den Service effizienter machen und so gestalten, dass er einfacher entwickelt werden kann.
  3. Konfigurieren Sie die JAX-RS-Anwendung.

    Sie können JAX-RS-Anwendungen je nach Anforderungen auf unterschiedliche Weise konfigurieren. Um die Funktionen von Java Platform, Enterprise Edition (Java EE) 6 zu nutzen, können Sie die Scanfunktionen für Annotationen verwenden. Wenn Sie die Scanfunktionen für Annotationen verwenden, können Sie eine JAX-RS-Unterklasse vom Typ "javax.ws.rs.core.Application" ausschließen oder eine minimal definierte Unterklasse "javax.ws.rs.core.Application" verwenden. Alternativ können Sie das IBM® JAX-RS-Servlet bzw. den IBM JAX-RS-Filter angeben, wenn Sie die im IBM JAX-RS-Servlet bzw. -Filter enthaltenen Funktionen verwenden möchten.

    Wenn Sie eine der Konfigurationsmethoden der JAX-RS Version 1.1 verwenden, können Sie eine Unterklasse "javax.ws.rs.core.Application" in Ihrer Anwendung ausschließen oder eine Unterklasse "javax.ws.rs.core.Application" verwenden, die einen leeren Satz von Klassen zurückgibt, um die JAX-RS-Laufzeitumgebung anzuweisen, alle JAX-RS-Klassen in der Anwendung zu suchen und zu verwenden. Sie können diese Methode verwenden, wenn Sie beim Entwickeln der Anwendung nicht jede relevante JAX-RS-Klasse manuell einer Unterklasse "javax.ws.rs.core.Application" hinzufügen möchten.

    Durch die Angabe des speziellen IBM JAX-RS-Servlets und -Filters können Sie bestimmte IBM JAX-RS-Verhalten nutzen und sicherstellen. Die Verwendung des IBM JAX-RS-Filters kann beispielsweise bei der Entwicklung einer Webanwendung mit einer Mischung von JAX-RS-Ressourcen und JSP-Dateien (JavaServer Pages) mit denselben URL-Mustern hilfreich sein.

    Obwohl es eine Konfigurationsmethode der JAX-RS Version V1.1 gibt, die die Verwendung einer optionalen Datei "web.xml" unterstützt, müssen Sie Integritätsbedingungen für die Sicherheit oder Rollen und andere Features, die Sie verwenden möchten und die über eine Datei "web.xml" aktiviert werden, in einer Datei "web.xml" angeben.

    Wählen Sie eine der folgenden drei Methoden aus, um Ihre JAX-RS-Anwendung zu konfigurieren:

    • JAX-RS-Anwendungen mithilfe von Methoden der JAX-RS Version 1.1 konfigurieren

      Verwenden Sie diese Methode, wenn Sie die Scanfunktionen für Annotationen oder die Konfigurationsmethoden der JAX-RS Version 1.1 verwenden möchten. Sie können die Scanfunktionen für Annotationen verwenden, um die Portierbarkeit von Anwendungen zu fördern, das Konfigurationscodevolumen zu minimieren oder die Anwendung dynamisch zu ändern, ohne Änderungen am Anwendungscode vorzunehmen.

    • Datei "web.xml" für JAX-RS-Servlets konfigurieren

      Verwenden Sie diese Methode, wenn Sie Features, die über Initialisierungsparameter für Servlets aktiviert werden, angeben möchten, um das Verhalten zu ändern und um sicherzustellen, dass Sie das IBM JAX-RS-Servlet erhalten. Wenn Sie Servlets verwenden möchten, können Sie einen Servletpfad in der Datei "web.xml" definieren, der an den Basis-URL angefügt wird.

    • Datei "web.xml" für JAX-RS-Filter konfigurieren

      Verwenden Sie diese Methode, um den Filter zu verwenden, wenn Sie JSPs, andere Servlets und Filter sowie JAX-RS-Ressourcen mit verschiedenen URL-Mustern haben. Sie können die Datei "web.xml" konfigurieren, um Filter zu definieren, die die möglichen URLs angeben, unter denen der Filter aufgerufen werden kann.

  4. JAX-RS-Ressourcen mit JCDI-Funktionalität implementieren. Sie können jedes der JCDI-Features separat oder zusammen mit einem anderen Feature verwenden, um das Erstellen, Verwalten und Testen Ihrer Anwendungen zu vereinfachen.
  5. Assemblieren Sie JAX-RS-Webanwendungen.
    1. Nachdem Sie die Java-Klassendateien für Ihre JAX-RS-Webanwendung entwickelt und die Datei "web.xml" bearbeitet haben, um das JAX-RS-Servlet zu aktivieren, können Sie die Anwendung assemblieren. Assemblieren Sie die Webanwendung in einem WAR-Paket. Sie können das WAR-Paket in einem EAR-Paket (Unternehmensarchiv) assemblieren, falls dies erforderlich ist.
  6. Implementieren Sie JAX-RS-Webanwendungen.
    1. Wenn Sie die JAX-RS-Webanwendung assembliert haben, müssen Sie das WAR-Paket oder das EAR-Paket auf dem Anwendungsserver implementieren.

Ergebnisse

Sie haben eine Enterprise-Bean so aktiviert, dass JAX-RS-Ressourcen mit JCDI-Funktionalität zur Verfügung gestellt werden.


Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_jcdi
Dateiname:twbs_jaxrs_jcdi.html