Déclarations de ressource d'application Java EE
Vous pouvez configurer vos applications Java™ Enterprise Edition (Java EE) pour déclarer des dépendances sur les ressources externes et des paramètres de configuration. Ces ressources peuvent être injectées dans le code applicatif ou l'application peut y accéder via Java Naming and Directory Interface (JNDI).
Les références de ressources permettent à une application de définir et d'utiliser des noms logiques que vous pouvez associer à des ressources lors du déploiement de l'application.
Les types de ressources suivants peuvent être déclarés par des applications Java EE : entrées d'environnement simples, références Enterprise JavaBeans (EJB), référence de service Web, références de fabrique de connexions de gestionnaire de ressources, références d'environnement de ressource, références de destination de message, références d'unité de persistance et références de contexte de persistance.
Entrées d'environnement simples
Vous pouvez définir des paramètres de configuration dans vos applications Java EE pour personnaliser une logique métier à l'aide d'entrées d'environnement simples. Comme décrit dans l'application Java EE 6, les valeurs d'entrée d'environnement simples peuvent être de l'un des types Java suivants : String, Character, Bye, Short, Integer, Long, Boolean, Double, Float, Class et toute sous-classe d'Enum.
Le fournisseur d'applications doit déclarer toutes les entrées d'environnement simples auxquelles accède le code d'application. Les entrées d'environnement simples sont déclarées à l'aide d'annotations (javax.annotation.Resource) dans le code d'application ou à l'aide d'éléments env-entry dans le descripteur de déploiement XML.
Dans l'exemple suivant, tiré d'une application, les annotations déclarent des entrées d'environnement :
// Retry interval in milliseconds
@Resource long retryInterval = 3000;
Dans l'exemple précédent, la valeur par défaut de la zone est 3000. Vous pouvez utiliser une valeur env-entry-value que vous définissez dans le descripteur de déploiement XML pour modifier cette valeur.
Dans l'exemple suivant, une application déclare une entrée d'environnement simple de type Class et définit la classe à injecter à l'aide d'un élément env-entry-value dans le descripteur de déploiement XML.
@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>
Dans l'exemple précédent, la valeur de zone est définie par l'objet Class com.sample.trace.StdOutTraceFormatter.
Dans l'exemple suivant, une application déclare une entrée d'environnement simple appelée validationMode en tant que sous-classe d'Enum dans la classe com.sample.Order et configure la valeur Enum, CALLBACK, à injecter, à l'aide d'éléments du descripteur de déploiement XML.
<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>
Dans l'exemple précédent, la zone validationMode est définie par la valeur Enum CALLBACK. Appliquez la même approche lorsque vous utilisez des annotations et du code XML pour déclarer des entrées d'environnement simples, par exemple :
@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>
Références Enterprise JavaBeans (EJB)
Comme décrit dans la spécification Java EE 6, vous pouvez développer vos applications Java EE pour déclarer des références aux répertoires Home de bean enterprise ou aux instances de bean enterprise à l'aide de noms logiques appelés références EJB.
Lorsqu'une application déclare une référence à un EJB, l'EJB référencé est résolu à l'aide de l'une des techniques suivantes.
- Indiquez une liaison EJB dans le fichier ibm-ejb-jar-bnd.xml ou le fichier ibm-web-bnd.xml
- Indiquez un élément <ejb-link> dans le fichier ejb-jar.xml ou le fichier web.xml
- Indiquez un attribut beanName dans l'annotation javax.ejb.EJB
- Indiquez un élément <lookup-name> dans le fichier ejb-jar.xml ou le fichier web.xml
- Indiquez un attribut lookup dans l'annotation javax.ejb.EJB
- Localisez un bean enterprise qui implémente l'interface déclarée en tant que type de la référence EJB (désigné par le terme AutoLink).
Le conteneur d'EJB tente de résoudre la référence EJB à l'aide des techniques précédentes, dans l'ordre où elles apparaissent.
Dans l'exemple suivant, une application déclare une référence EJB à l'aide d'une annotation et fournit une liaison pour la résolution.
@EJB(name="Cart")
Cart shoppingCart;
<ejb-ref name="Cart" binding-name="java:app/SampleEJB/SampleCart"/>
Dans l'exemple suivant, une application déclare une référence EJB à l'aide d'une annotation et fournit un élément ejb-link pour la résolution.
@EJB(name="Cart")
Cart shoppingCart;
<ejb-local-ref>
<ejb-ref-name>Cart</ejb-ref-name>
<ejb-link>SampleEJB/SampleCart</ejb-link>
</ejb-local-ref>
Dans l'exemple suivant, une application déclare une référence EJB à l'aide d'une annotation et fournit un attribut lookup pour la résolution, à partir du bean source com.sample.SourceBean.
@EJB(name="Cart" lookup="java:app/SampleEJB/SampleCart")
Cart shoppingCart;
L'application peut également déclarer la référence EJB à l'aide de l'élément <lookup-name> dans le descripteur de déploiement XML, comme dans l'exemple suivant.
<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>
Dans l'exemple suivant, une application déclare une référence EJB à l'aide d'une annotation et fournit un attribut beanName pour la résolution.
@EJB(name="Cart" beanName="SampleEJB/SampleCart")
Cart shoppingCart;
Références d'environnement de ressource
Comme décrit dans la spécification Java EE 6, vous pouvez développer des applications pour déclarer des références vers des objets administrés qui sont associés à une ressource, telle qu'une instance de Connecter CCI InteractionSpec ou d'autres types d'objet gérés par le conteneur EJB, y compris javax.transaction.UserTransaction, javax.ejb.EJBContext, javax.ejb.TimerService, org.omg.CORBA.ORB, javax.validation.Validator, javax.validation.ValidatorFactory ou javax.enterprise.inject.spi.BeanManager.
Lorsqu'une application déclare une référence vers un objet administré, vous devez fournir une liaison à cet objet lorsque l'application est déployée. Vous pouvez fournir la liaison à l'aide de la console d'administration lorsque vous déployez l'application ou vous pouvez ajouter la liaison au fichier XML de liaison WebSphere, ibm-ejb-jar-bnd.xml ou ibm-web-bnd.xml.
Dans l'exemple suivant, une application déclare une référence d'environnement de ressource et fournit une liaison à la ressource :
@Resource(name="jms/ResponseQueue")
Queue responseQueue;
<session name="StatelessSampleBean">
<resource-env-ref name="jms/ResponseQueue" binding-name="Jetstream/jms/ResponseQueue"/>
</session>
L'application peut également déclarer la référence d'environnement de ressource à l'aide de l'attribut lookup et ne requiert pas de liaison, comme dans l'exemple suivant :
@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>
Lorsqu'une application déclare une référence à un type d'objet géré par conteneur, aucune liaison n'est utilisée. Le conteneur fournit l'instance correcte de l'objet référencé. Dans l'exemple suivant, une application déclare une référence d'environnement de ressource à un objet géré par conteneur : :
@Resource
javax.validation.Validator validator;
Références de ressource vers références de ressource
@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;
L'attribut lookup utilise l'imbrication de références la plus profonde qui, en l'occurrence, est "java:global/env/jdbc/ds1ref".