EJB3里的资源环境与环境注册项

资源环境和管理对象
资源环境的进入对象,不需要放入资源参考目录.一些资源可能有需要进入你的组件类别之内被从 JNDI ENC 获得或注入的其他额外的被管理的对象。
一个执行对象是一个资源,在部署时配置,并且在运行期间被EJB容器所管理.它们常常定义和部署通过一个JCA资源适配器.
此外的执行对象,资源环境项目被用到参考服务,像javax.transaction.UserTransaction 和javax.transaction.TransactionSynchronizationRegistry .
为了获取引用到其它的服务,可以使用@Resource注释。当使用这个注释时,authenticationType( ) 和 shareable( )属性是无意义的,并且指定它是不合法的.
@Stateful
public class TravelAgentBean implements TravelAgentRemote {
   @Resource private javax.transaction.UserTransaction utx;

...
}
如果你使用XML,你必需使用一个分开的<resource-env-ref>元素,它包含子元素<resource-env-ref-name> (必需的), <resource-env-ref-type> (必需的), and <mapped-name> (可选的), 如同<injection-target> (可选的)元素.
<resource-env-ref-name>元素与JNDI ENC名字相关联.<resource-env-ref-type>为引用的类型,<mapped-name> 和<injection-target>的使用相同的方法如同它们使用在<resource-ref>:
<ejb-jar>
   <enterprise-beans>
      <session>
         <ejb-name>TravelAgentBean</ejb-name>
      <resource-env-ref>
            <resource-env-ref-name>UserTransaction</res-ref-name>
            <resource-env-ref-type>javax.transaction.UserTransaction

</res-type>
            <injection-target>
               <injection-target-class>
                 com.titan.travelagent.TravelAgentBean
               </injection-target-class>
               <injection-target-name>utx
</injection-target-name>
            </injection-target>
         </resource-env-ref>
   </enterprise-beans>
</ejb-jar>
XML攫取引用到一个javax.transaction.UserTransaction 对象并且注入到travelAgentBean类的utx字段.


环境项目
ProcessPayment EJB 有一个配置属性为最小检查数.这些类型的配置属性被叫做环境项目.组件类使用环境项目来满足客户的需求.
虽然他们的定义可以使用注释,环境项目总是配置通过XML,通过他们配置数值并且不是注释.<env-entry>元素用于定义他们.这个元素包含子元素<description> (可选的), <env-entry-name> (必需的), <env-entry-type> (必需的), and <env-entry-value> (可选的),如同<injection-target> (可选的)元素.这是一个典型的<env-entry>定义:
<ejb-jar>
   <enterprise-beans>
      <session>
         <ejb-name>ProcessPaymentBean</ejb-name>
      <env-entry>
            <env-entry-name>minCheckNumber
</env-entry-name>
            <env-entry-type>java.lang.Integer</env-entry-type>
            <env-entry-value>2000</env-entry-value>
         </env-entry>
   </enterprise-beans>
</ejb-jar>
<env-entry-name>元素与java:comp/env上下文关联,例如,minCheckNumber项目可以访问使用java:comp/env/minCheckNumber路径的JNDI ENC查找:
InitialContext jndiContext = new InitialContext( );
int minValue = (Integer)jndiContext.lookup("java:comp/env/minCheckNumber");
作为一种选择,它可以查找同 EJBContext.lookup( )方法使用minCheckNumber名字.
<env-entry-type>的类型可以是String或多个原始包装类型中的一个,包括Integer, Long, Double, Float, Byte, Boolean, 和Short.
<env-entry-value>是可选的.它的值的指定可以通过Bean的开发者或延期的应用程序的集合或部署.
<injection-target>元素可以用于初始化一个字段或setter方法在环境项目值中.
<ejb-jar>
   <enterprise-beans>
      <session>
         <ejb-name>ProcessPaymentBean</ejb-name>
      <env-entry>
            <env-entry-name>minCheckNumber</env-entry-name>
            <env-entry-type>java.lang.Integer</env-entry-type>
            <env-entry-value>2000</env-entry-value>
            <injection-target>
               <injection-target-class>
                  com.titan.processpayment.ProcessPaymentBean
               </injection-target-class>
               <injection-target-name>minCheckNumber</injection-target>
            </injection-target>
         </env-entry>
   </enterprise-beans>
</ejb-jar>
前面的XML将会注入2000到minCheckNumber字段或调用一个setter方法名字为setMinCheckNumber( )在组件类中:
@javax.annotation.Resource注释可以用于引用环境项目代替<injection-target>元素:
@Resource(name="minCheckNumber") private int minCheckNumber = 100;
在这个例子中,2000将会被放入环境项目,描述在XML和注入到minCheckNumber字段.如果没有XML配置这个值,默认值将会是100,但是没有项目被创建在ENC中.一个通常的方式是注释你的字段使用@Resource和提供一个默认值为字段可以随意的覆盖在XML中.使用@Resource注释同String或原始类型值标识作为一个环境项目到EJB容器.当 @Resource指明环境项目,仅有name()属性是允许指定的.它不会做很多的判断使用@Resource为环境项目在类级,同样的没有方法初始化值在注释中.

你可能感兴趣的:(xml,bean,项目管理,配置管理,ejb)