Deklarationen von Java EE-Anwendungsressourcen

Sie können Ihre Java™-EE-Anwendungen (Java Enterprise Edition) so konfigurieren, dass sie Abhängigkeiten von externen Ressourcen und Konfigurationsparameter deklarieren. Diese Ressourcen können in den Anwendungscode injiziert oder von der Anwendung über Java Naming and Directory Interface (JNDI) aufgerufen werden.

Ressourcenreferenzen ermöglichen einer Anwendung, logische Namen zu definieren und zu verwenden, die Sie bei der Implementierung der Anwendung an Ressourcen binden können.

Die folgenden Ressourcentypen können von Java EE-Anwendungen deklariert werden: einfache Umgebungseinträge, EJB-Referenzen (Enterprise JavaBeans), Web-Service-Referenzen, Verbindungsfactoryreferenzen des Ressourcenmanagers, Ressourcenumgebungsreferenzen, Nachrichtenzielreferenzen, Persistenzeinheitenreferenzen und Persistenzkontextreferenzen.

Einfache Umgebungseinträge

Sie können Konfigurationsparameter in Ihren Java EE-Anwendungen definieren, um die Geschäftslogik mithilfe einfacher Umgebungseinträge anzupassen. Gemäß Beschreibung in der Anwendung der Java EE Version 6 können einfache Umgebungseintragswerte einen der folgenden Java-Typen haben: String, Character, Bye, Short, Integer, Long, Boolean, Double, Float, Class oder eine Unterklasse von Enum.

Anmerkung: Der Java-Type "Class" und alle Unterklassen von Enum sind neu in Java EE 6.

Der Anwendungsprovider muss alle einfachen Umgebungseinträge deklarieren, auf die der Anwendungscode zugreift. Die einfachen Umgebungseinträge werden mithilfe von Annotationen (javax.annotation.Resource) im Anwendungscode oder mithilfe von env-entry-Elementen im XML-Implementierungsdeskriptor deklariert.

Im folgenden Beispiel aus einer Anwendung werden die Umgebungseinträge mit Annotationen deklariert:

// Wiederholungsintervall in Millisekunden
@Resource long retryInterval = 3000;

Im vorherigen Beispiel ist der Feldstandardwert 3000. Zum Ändern dieses Werts können Sie ein Element "env-entry-value" verwenden, das Sie im XML-Implementierungsdeskriptor definieren.

Im folgenden Beispiel deklariert eine Anwendung einen einfachen Umgebungseintrag des Typs "Class" und definiert Class für die Injektion mithilfe eines Elements "env-entry-value" im XML-Implementierungsdeskriptor.

@Resource(name=TraceFormatter) Class<?> traceFormatter; 


<env-entry>
    <env-entry-name>TraceFormatter</env-entry-name>
    <env-entry-value>com.sample.trace.StdOutTraceFormatter</env-entry-value>
</env-entry>

Im vorherigen Beispiel wird der Feldwert auf das Class-Objekt "com.sample.trace.StdOutTraceFormatter" gesetzt.

Im folgenden Beispiel deklariert eine Anwendung einen einfachen Umgebungseintrag mit dem Namen "validationMode" als Unterklasse von Enum in der Klasse "com.sample.Order" und konfiguriert den Enum-Wert CALLBACK für die Injektion mithilfe von Elementen im XML-Implementierungsdeskriptor.

<env-entry>
    <env-entry-name>JPAValidation</env-entry-name>
    <env-entry-type>javax.persistence.ValidationMode</env-entry-type>
    <env-entry-value>CALLBACK</env-entry-value>
    <injection-target>
        <injection-target-class>com.sample.Order</injection-target-class>
        <injection-target-name>validationMode</injection-target-name>
    </injection-target>
</env-entry>

Im vorherigen Beispiel wird das Feld "validationMode" auf den Enum-Wert CALLBACK gesetzt. Verwenden Sie denselben Ansatz, wenn Sie Annotationen und XML-Code für die Deklaration einfacher Umgebungseinträge verwenden, z. B.:

@Resource (name=JPAValidation) 
javax.persistence.ValidationMode validationMode;


<env-entry>
    <env-entry-name>JPAValidation</env-entry-name>
    <env-entry-value>CALLBACK</env-entry-value>
</env-entry>
Anmerkung: Die Unterstützung einfacher Umgebungseinträge des Java-Typs "Class" und jeder Unterklasse von Enum ist neu in Java EE 6. Vor Java EE 6 haben Sie Ihre Anwendungen möglicherweise so entwickelt, dass sie diese Typen mithilfe des Elements "resource-env-ref" im XML-Implementierungsdeskriptors oder mithilfe der Annotation "javax.annotation.Resource" als Anwendungsressourcen deklarieren. Für Anwendungen, die diese Java-Typen mit der Annotation "javax.annotation.Resource" verwenden, muss die Systemeigenschaft "com.ibm.websphere.ejbcontainer.EE5Compatibility" aktiviert werden. Wenn Sie die Systemeigenschaft "EE5Compatibility" nicht aktivieren, wird das Element "binding-name" des Elements "resource-env-ref" in der Datei ibm-ejb-jar-bnd.xml ignoriert, da der Datentyp jetzt als einfacher Umgebungseintrag und nicht als Ressourcenumgebungsreferenz behandelt wird.
Anmerkung: Das Element <lookup-name> des Implementierungsdeskriptors und das Annotationsattribut lookup sind neu in Java EE 6. Sie geben den JNDI-Namen einer referenzierten EJB oder Ressource relativ zum Namenskontext "java:comp/env" an. Bei Verwendung in einem einfachen Umgebungseintrag können Sie <env-entry-value> nicht in demselben Element <env-entry> verwenden.

EJB-Referenzen (Enterprise JavaBeans)

Gemäß Beschreibung in der Spezifikation Java EE 6 können Sie Ihre Java EE-Anwendungen so entwickeln, dass sie Referenzen auf Enterprise-Bean-Homes und Enterprise-Bean-Instanzen mithilfe logischer Namen, so genannten EJB-Referenzen, deklarieren.

Wenn eine Anwendung eine Referenz auf eine EJB deklariert, wird die referenzierte EJB mit einer der folgenden Techniken aufgelöst.

  • Angabe einer EJB-Bindung in der Datei "ibm-ejb-jar-bnd.xml" oder in der Datei "ibm-web-bnd.xml"
  • Angabe eines Elements <ejb-link> in der Datei "ejb-jar.xml" oder in der Datei "web.xml"
  • Angabe eines Attributs "beanName" in der Annotation "javax.ejb.EJB"
  • Angabe eines Elements <lookup-name> in der Datei "ejb-jar.xml" oder in der Datei "web.xml"
  • Angabe eines Attributs "lookup" in der Annotation "javax.ejb.EJB"
  • Suche einer Enterprise-Bean, die die Schnittstelle implementiert, die als Typ der EJB-Referenz deklariert ist (so genannter AutoLink)

Der EJB-Container versucht, die EJB-Referenz aufzulösen, und verwendet dazu die zuvor beschriebenen Techniken in der angegebenen Reihenfolge.

Anmerkung: Wenn <lookup-name> oder lookup in einer EJB-Referenz verwendet wird, ist die Verwendung von <ejb-link> bzw. beanName in derselben EJB-Referenz nicht möglich.
Anmerkung: In allen der folgenden Beispiele für EJB-Referenzen wird davon ausgegangen, dass die Bean "SampleCart" nur eine einzige Schnittstelle hat. Wenn die Bean "SampleCart" mehrere Schnittstellen hat, fügen Sie am Ende der Bindung, dem Element <ejb-link> oder dem Attribut "beanName" das folgende Suffix hinzu: !com.sample.Cart.

Im folgenden Beispiel deklariert eine Anwendung eine EJB-Referenz mithilfe einer Annotation und stellt eine Bindung zur Auflösung bereit.

@EJB(name="Cart")
Cart shoppingCart;


<ejb-ref name="Cart" binding-name="java:app/SampleEJB/SampleCart"/>

Im folgenden Beispiel deklariert eine Anwendung eine EJB-Referenz mithilfe einer Annotation und stellt ein Element "ejb-link" zur Auflösung bereit.

@EJB(name="Cart")
Cart shoppingCart;


<ejb-local-ref>
    <ejb-ref-name>Cart</ejb-ref-name>
    <ejb-link>SampleEJB/SampleCart</ejb-link>
</ejb-local-ref> 

Im folgenden Beispiel deklariert eine Anwendung eine EJB-Referenz mithilfe einer Annotation und stellt ein Attribut "lookup" zur Auflösung über die Quellenbean "com.sample.SourceBean" bereit.

@EJB(name="Cart" lookup="java:app/SampleEJB/SampleCart")
Cart shoppingCart; 

Die Anwendung kann die EJB-Referenz alternativ, wie im folgenden Beispiel gezeigt, mithilfe eines Elements <lookup-name> im XML-Implementierungsdeskriptor deklarieren.

<ejb-local-ref>
    <ejb-ref-name>Cart</ejb-ref-name>
    <lookup-name>java:app/SampleEJB/SampleCart</lookup-name>
    <injection-target>
    <injection-target-class>com.sample.SourceBean</injection-target-class>
    <injection-target-name>ShoppingCart</injection-target-name>
    </injection-target>
</ejb-local-ref> 

Im folgenden Beispiel deklariert eine Anwendung eine EJB-Referenz mithilfe einer Annotation und stellt ein Attribut "beanName" zur Auflösung bereit.

@EJB(name="Cart" beanName="SampleEJB/SampleCart")
Cart shoppingCart;

Ressourcenumgebungsreferenzen

Gemäß Beschreibung in der Spezifikation Java EE 6 können Sie Anwendungen so entwickeln, dass sie Referenzen auf verwaltete Objekte deklarieren, die einer Ressource, wie z. B. einer Connector-CCI-InteractionSpec-Instanz oder anderen vom EJB-Container verwalteten Objekttypen, einschließlich javax.transaction.UserTransaction, javax.ejb.EJBContext, javax.ejb.TimerServcie, org.omg.CORBA.ORB, javax.validation.Validator, javax.validation.ValidatorFactory oder javax.enterprise.inject.spi.BeanManager, zugeordnet sind.

Wenn eine Anwendung eine Referenz auf ein verwaltetes Objekt deklariert, müssen Sie bei der Implementierung der Anwendung eine Bindung zum verwalteten Objekt angeben. Sie können die Bindung über die Administrationskonsole angeben, wenn Sie die Anwendung implementieren, oder Sie können die Bindung der WebSphere-XML-Bindungsdatei ibm-ejb-jar-bnd.xml oder ibm-web-bnd.xml hinzufügen.

Im folgenden Beispiel deklariert eine Anwendung eine Ressourcenumgebungsreferenz und gibt eine Bindung zur Ressource an:

@Resource(name="jms/ResponseQueue")
Queue responseQueue;


<session name="StatelessSampleBean">
    <resource-env-ref name="jms/ResponseQueue" binding-name="Jetstream/jms/ResponseQueue"/>
		</session>

Alternativ kann die Anwendung, wie im folgenden Beispiel gezeigt, die Ressourcenumgebungsreferenz mithilfe eines Attributs "lookup" deklarieren und keine Bindung erfordern:

@Resource(name="jms/ResponseQueue", lookup="Jetstream/jms/ResponseQueue")
Queue responseQueue;


<resource-env-ref>
    <resource-env-ref-name>jms/ResponseBean</resource-env-ref-name>
    <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
</resource-env-ref>

Wenn eine Anwendung eine Referenz auf einen containergesteuerten Objekttyp deklariert, wird keine Bindung verwendet. Der Container stellt die richtige Instanz des referenzierten Objekts bereit. Im folgenden Beispiel deklariert eine Anwendung eine Ressourcenumgebungsreferenz auf ein containergesteuertes Objekt:

@Resource
javax.validation.Validator validator;

Ressourcenreferenzen auf Ressourcenreferenzen

In Java EE 6 wird der Annotation "@Resource" ein neues Feld "lookup" hinzugefügt. Sie können eine Ressourcenreferenz jetzt wie im folgenden Beispiel für eine Ressourcenreferenz deklarieren.
@Resource(name="java:global/env/jdbc/ds1ref",
              lookup="java:global/env/jdbc/ds1",
              authenticationType=Resource.AuthenticationType.APPLICATION,
              shareable=false)
    DataSource ds1ref;
@Resource(name="java:global/env/jdbc/ds1refref",
              lookup="java:global/env/jdbc/ds1ref",
              authenticationType=Resource.AuthenticationType.APPLICATION,
              shareable=true)
    DataSource ds1refref;
Die Lookup-Operation verwendet die innere Verschachtelung von Referenzen, in diesem Fall "java:global/env/jdbc/ds1ref".

Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



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