Declarações do recurso de aplicativo Java EE
É possível configurar aplicativos Java™ Enterprise Edition (Java EE) para declarar dependências de recursos externos e parâmetros de configuração. Esses recursos podem ser injetados no código do aplicativo ou podem ser acessados pelo aplicativo por meio de Java Naming and Directory Interface (JNDI).
Referências de recursos permitem que um aplicativo defina e use nomes lógicos que é possível ligar a recursos quando o aplicativo é implementado.
Os tipos de recurso a seguir podem ser declarados pelos aplicativos Java EE: entradas de ambiente simples, referências de Enterprise JavaBeans (EJB), referências de serviço da Web, referências de connection factory do gerenciador de recursos, referências de ambiente de recursos, referências de destino de mensagens, referências de unidade de persistência e referências de contexto de persistência.
Entradas de Ambiente Simples
É possível definir parâmetros de configuração em seus aplicativos Java EE para customizar lógica de negócios com o uso de entradas de ambiente simples. Conforme descrito no aplicativo Java EE 6, os valores de entrada de ambiente simples podem ser um dos seguintes tipos Java: String, Character, Bye, Short, Integer, Long, Boolean, Double, Float, Class e qualquer subclasse de Enum.
O provedor de aplicativos deve declarar todas as entradas de ambiente simples acessadas a partir do código do aplicativo. As entradas de ambiente simples são declaradas com o uso de anotações (javax.annotation.Resource) no código do aplicativo ou com o uso de elementos env-entry no descritor de implementação XML.
No exemplo a seguir de um aplicativo, anotações declaram entradas de ambiente:
// Tentar novamente o intervalo em milissegundos
@Resource long retryInterval = 3000;
No exemplo anterior, o valor padrão do campo é 3000. É possível usar env-entry-value, que você define no descritor de implementação XML para alterar este valor.
No exemplo a seguir, um aplicativo declara uma entrada de ambiente simples do tipo Class e define Class para ser injetado usando um elemento env-entry-value no descritor de implementação 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>
No exemplo anterior, o valor do campo está configurado como o objeto Class com.sample.trace.StdOutTraceFormatter.
No exemplo a seguir, um aplicativo declara uma entrada de ambiente simples chamada validationMode como uma subclasse de Enum na classe com.sample.Order e configura o valor Enum de CALLBACK para injetar usando elementos no descritor de implementação 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>
No exemplo anterior, o campo validationMode está configurado para o valor Enum CALLBACK. Use a mesma abordagem quando você usar anotações e código XML para declarar entradas de ambiente simples; por exemplo:
@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>
Referências do Enterprise JavaBeans (EJB)
Conforme descrito na especificação Java EE 6, é possível desenvolver seus aplicativos Java EE para declarar referências a homes de enterprise bean ou instâncias de enterprise bean usando nomes lógicos chamados referências EJB.
Quando um aplicativo declara uma referência a um EJB, o EJB de referência é resolvido com uma das seguintes técnicas.
- Especificar uma ligação EJB no arquivo ibm-ejb-jar-bnd.xml ou arquivo ibm-web-bnd.xml
- Especificar um elemento <ejb-link> no arquivo ejb-jar.xml ou arquivo web.xml
- Especificar um atributo beanName na anotação javax.ejb.EJB
- Especificar um elemento <lookup-name> no arquivo ejb-jar.xml ou arquivo web.xml
- Especificar um atributo de consulta na anotação javax.ejb.EJB
- Localizar um enterprise bean que implementa a interface declarada como o tipo da referência EJB (chamada AutoLink).
O contêiner EJB tenta resolver a referência EJB usando as técnicas anteriores na ordem em que estão listadas.
No exemplo a seguir, um aplicativo declara uma referência EJB usando uma anotação e fornece uma ligação para resolução.
@EJB(name="Cart")
Cart shoppingCart;
<ejb-ref name="Cart" binding-name="java:app/SampleEJB/SampleCart"/>
No exemplo a seguir, um aplicativo declara uma referência EJB usando uma anotação e fornece um elemento ejb-link para resolução.
@EJB(name="Cart")
Cart shoppingCart;
<ejb-local-ref>
<ejb-ref-name>Cart</ejb-ref-name>
<ejb-link>SampleEJB/SampleCart</ejb-link>
</ejb-local-ref>
No exemplo a seguir, um aplicativo declara uma referência EJB usando uma anotação e fornece um atributo de consulta para resolução do bean de origem com.sample.SourceBean.
@EJB(name="Cart" lookup="java:app/SampleEJB/SampleCart")
Cart shoppingCart;
O aplicativo poderia declarar alternativamente a referência EJB usando o elemento <lookup-name> no descritor de implementação XML, como no exemplo a seguir.
<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>
No exemplo a seguir, um aplicativo declara uma referência EJB usando uma anotação e fornece um atributo beanName para resolução.
@EJB(name="Cart" beanName="SampleEJB/SampleCart")
Cart shoppingCart;
Referência de Ambiente de Recursos
Conforme descrito na especificação Java EE 6, é possível desenvolver aplicativos para declarar referências a objetos administrados que estão associados a um recurso, como uma instância Connecter CCI InteractionSpec, ou a outros tipos de objetos gerenciados pelo contêiner EJB, incluindo javax.transaction.UserTransaction, javax.ejb.EJBContext, javax.ejb.TimerServcie, org.omg.CORBA.ORB, javax.validation.Validator, javax.validation.ValidatorFactory ou javax.enterprise.inject.spi.BeanManager.
Quando um aplicativo declara uma referência a um objeto administrado, você deve fornecer uma ligação ao objeto administrado quando o aplicativo é implementado. É possível fornecer a ligação usando o console administrativo quando você implementa o aplicativo ou incluir a ligação no arquivo XML de ligação do WebSphere, ibm-ejb-jar-bnd.xml ou ibm-web-bnd.xml.
No exemplo a seguir, um aplicativo declara uma referência de ambiente de recursos e fornece uma ligação para o recurso:
@Resource(name="jms/ResponseQueue")
Queue responseQueue;
<session name="StatelessSampleBean">
<resource-env-ref name="jms/ResponseQueue" binding-name="Jetstream/jms/ResponseQueue"/>
</session>
O aplicativo poderia declarar alternativamente a referência de ambiente de recursos usando o atributo de consulta, e não exigir uma ligação, como no seguinte exemplo:
@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>
Quando um aplicativo declara uma referência a um tipo de objeto gerenciado por contêiner, uma ligação não é usada. O contêiner fornece a instância correta do objeto de referência. No exemplo a seguir, um aplicativo declara uma referência de ambiente de recursos para um objeto gerenciado por contêiner:
@Resource
javax.validation.Validator validator;
Referências de Recurso para Referências de Recurso
@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;
A consulta usa o aninhamento mais
íntimo de referências, que, nesse caso, é "java:global/env/jdbc/ds1ref".