Deklarationen von Java EE-Anwendungsressourcen
Sie können Ihre Java™ Enterprise Edition -Anwendungen (Java EE) konfigurieren, um Abhängigkeiten von externen Ressourcen und Konfigurationsparametern zu deklarieren. Diese Ressourcen können in den Anwendungscode eingefügt oder von der Anwendung über JNDI (Java Naming and Directory Interface) 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, Verbindungsfactory-Referenzen des Ressourcenmanagers, Ressourcenumgebungsreferenzen, Nachrichtenzielreferenzen, Persistenzeinheitenreferenzen und Persistenzkontextreferenzen.
Einfache Umgebungseinträge
Sie können Konfigurationsparameter in Ihren Java EE -Anwendungen definieren, um Geschäftslogik mithilfe einfacher Umgebungseinträge anzupassen. Wie in der Anwendung Java EE 6 beschrieben, können einfache Umgebungseintragswerte einer der folgenden Java-Typen sein: String, Character, Bye, Short, Integer, Long, Boolean, Double, Float, Class und jede 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:
// Retry interval in milliseconds
@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)
Wie in der Spezifikation Java EE 6 beschrieben, können Sie Ihre Java EE -Anwendungen entwickeln, um Referenzen auf Enterprise-Bean-Homes oder Enterprise-Bean-Instanzen mit logischen Namen, die als EJB-Referenzen bezeichnet werden, zu 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"
- Geben Sie ein Element < ejb-link> in der Datei ejb-jar.xml oder web.xml an.
- Angabe eines Attributs "beanName" in der Annotation "javax.ejb.EJB"
- Geben Sie ein Element < lookup-name> in der Datei ejb-jar.xml oder web.xml an.
- 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;
Alternativ kann die Anwendung die EJB-Referenz wie im folgenden Beispiel mit dem Element < 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
Wie in der Spezifikation Java EE 6 beschrieben, können Sie Anwendungen entwickeln, um Referenzen auf verwaltete Objekte zu deklarieren, die einer Ressource zugeordnet sind, wie z. B. eine Connecter CCI InteractionSpec -Instanz oder andere Objekttypen, die vom EJB-Container verwaltet werden, einschließlich javax.transaction.UserTransaction, javax.ejb.EJBContext, javax.ejb.TimerServcie, org.omg.CORBA.ORB, javax.validation.Validator, javax.validation.ValidatorFactoryoder javax.enterprise.inject.spi.BeanManager.
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 bereitstellen, wenn Sie die Anwendung implementieren, oder Sie können die Bindung zur XML-Datei der WebSphere® -Bindung ibm-ejb-jar-bnd.xml oder ibm-web-bnd.xmlhinzufü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".