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.
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>
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.
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
@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".