Java EE 应用程序资源声明

可以配置 Java™ Enterprise Edition (Java EE) 应用程序以声明外部资源与配置参数之间的依赖关系。可以将这些资源注入到应用程序代码,或者应用程序可以通过 Java 命名和目录接口 (JNDI) 来访问这些资源。

资源引用允许应用程序定义和使用逻辑名;部署应用程序时,可以将逻辑名绑定至资源。

Java EE 应用程序可以声明下列资源类型:简单的环境条目、Enterprise JavaBeans (EJB) 引用、Web Service 引用、资源管理器连接工厂引用、资源环境引用、消息目标引用、持久性单元引用以及持久上下文引用。

简单的环境条目

可以在 Java EE 应用程序中定义配置参数,以使用简单的环境条目来定制业务逻辑。如 Java EE 6 应用程序中所述,简单的环境条目值可能为下列其中一种 Java 类型:String、Character、Bye、Short、Integer、Long、Boolean、Double、Float、Class 以及 Enum 的任何子类。

注: Java 类型 Class 以及 Enum 的任何子类是 Java EE 6 中的新增类型。

应用程序提供者必须声明从应用程序代码访问的所有简单的环境条目。使用应用程序代码中的注释 (javax.annotation.Resource) 或者使用 XML 部署描述符中的 env-entry 元素来声明简单的环境条目。

在应用程序中的以下示例中,注释声明了环境条目:

// Retry interval in milliseconds
@Resource long retryInterval = 3000;

在前一个示例中,字段缺省值为 3000。可以使用您在 XML 部署描述符中定义的 env-entry-value 来更改此值。

在以下示例中,应用程序声明了类型为 Class 的简单环境条目,并且定义使用 XML 部署描述符中的 env-entry-value 元素来注入 Class。

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

在前一个示例中,字段值设置为 Class 对象 com.sample.trace.StdOutTraceFormatter。

在以下示例中,应用程序将一个称为 validationMode 的简单环境条目在 com.sample.Order 类中声明为 Enum 的子类,并配置 Enum 值 CALLBACK 以使用 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>

在前一个示例中,validationMode 字段设置为 Enum 值 CALLBACK。当您使用注释和 XML 代码来声明简单环境条目时,请使用同样的方法;例如:

@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>
注: Java 类型 Class 的简单环境条目支持以及 Enum 的任何子类都是 Java EE 6 的新增内容。以前,您可能已经开发了应用程序,以使用 XML 部署描述符中的 resource-env-ref 元素或者使用 javax.annotation.Resource 注释将这些类型声明为应用程序资源。对于将这些 Java 类型与 javax.annotation.Resource 注释配合使用的应用程序,必须启用 com.ibm.websphere.ejbcontainer.EE5Compatibility 系统属性。如果没有 EE5Compatibility 系统属性,那么会忽略 ibm-ejb-jar-bnd.xml 文件中的 resource-env-ref 元素的 binding-name 元素,因为现在已将该数据类型视为简单环境条目,而不是资源环境引用。
注: 部署描述符元素 <lookup-name> 和注释属性 lookupJava EE 6 中的新增内容。它们指定所引用 EJB 或资源相对于 java:comp/env 命名上下文的 JNDI 名称。如果在简单环境条目中使用了它们,那么您无法在同一 <env-entry> 中使用 <env-entry-value>

Enterprise JavaBeans (EJB) 引用

如 Java EE 6 规范中所述,您可以开发 Java EE 应用程序,以使用称为 EJB 引用的逻辑名来声明对于企业 Bean home 接口或企业 Bean 实例的引用。

当应用程序声明对于 EJB 的引用时,将使用下列其中一项技术来解析您引用的 EJB。

  • 在 ibm-ejb-jar-bnd.xml 文件或 ibm-web-bnd.xml 文件中指定 EJB 绑定
  • 在 ejb-jar.xml 文件或 web.xml 文件中指定 <ejb-link> 元素
  • 对 javax.ejb.EJB 注释指定 beanName 属性
  • 在 ejb-jar.xml 文件或 web.xml 文件中指定 <lookup-name> 元素
  • 对 javax.ejb.EJB 注释指定 lookup 属性
  • 查找用于实现声明为 EJB 引用的类型的接口(称为 AutoLink)的企业 Bean。

EJB 容器尝试使用前面的技术并按它们的列示顺序来解析 EJB 引用。

注: 如果在 EJB 引用中使用了 <lookup-name>lookup,那么无法在同一 EJB 引用中使用 <ejb-link>beanName
注: 下列所有 EJB 引用示例都假定 SampleCart Bean 只有单个接口。如果 SampleCart Bean 具有多个接口,那么在绑定、<ejb-link> 元素或者 beanName 属性末尾添加以下后缀:!com.sample.Cart。

在以下示例中,应用程序将使用注释来声明 EJB 引用,并提供绑定以进行解析。

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


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

在以下示例中,应用程序将使用注释来声明 EJB 引用,并提供 ejb-link 元素以进行解析。

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


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

在以下示例中,应用程序将使用注释来声明 EJB 引用,并在源 Bean com.sample.SourceBean 中提供 lookup 属性以进行解析。

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

应用程序可以选择在 XML 部署描述符中使用 <lookup-name> 元素来声明 EJB 引用,如以下示例中所示。

<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> 

在以下示例中,应用程序将使用注释来声明 EJB 引用,并提供 beanName 属性以进行解析。

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

资源环境引用

如 Java EE 6 规范中所述,您可以开发应用程序以声明对与资源(例如,连接器 CCI InteractionSpec 实例)相关联的受管对象或者由 EJB 容器管理的其他对象类型(其中包括 javax.transaction.UserTransaction、javax.ejb.EJBContext、javax.ejb.TimerServcie、org.omg.CORBA.ORB、javax.validation.Validator、javax.validation.ValidatorFactory 或 javax.enterprise.inject.spi.BeanManager)的引用。

在部署应用程序之后,当应用程序声明对于受管对象的引用时,您必须提供与该受管对象的绑定。当您部署应用程序时,可以使用管理控制台来提供此绑定,也可以将此绑定添加至 WebSphere® 绑定 XML 文件 ibm-ejb-jar-bnd.xmlibm-web-bnd.xml

在以下示例中,应用程序将声明资源环境引用,并提供与该资源的绑定:

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


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

应用程序可以选择使用 lookup 属性来声明资源环境引用,不需要绑定,如以下示例所示:

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

当应用程序声明对于容器管理的对象类型的引用时,未使用绑定。容器将提供所引用对象的正确实例。在以下示例中,应用程序将声明对于容器管理的对象的资源环境引用:

@Resource
javax.validation.Validator validator;

资源引用的资源引用

对于 Java EE 6,新增了用于 @Resource 注释的查询字段。您现在可以声明对于资源引用的资源引用,如以下示例中所示:
@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;
查询使用引用的最深入嵌套,在本例中为“java:global/env/jdbc/ds1ref”。

指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cejb_ref
文件名:cejb_ref.html