我根本不了解@Resource mappedName元素

时间:2013-09-12 08:30:11

标签: java java-ee jndi

我已经阅读过这两本书并且我不理解它们,有人可以举一个例子并用简单的英语解释一下吗?主要是它与“name”元素/

之间的区别

来自Oracle教程

  

mappedName元素是一个不可移植的,特定于实现的名称   资源应该映射到。因为name元素的时候   指定或默认,仅对应用程序是本地的,许多Java EE   服务器提供了一种在整个应用程序中引用资源的方法   服务器。这是通过设置mappedName元素来完成的。使用的   mappedName元素在Java EE服务器上是不可移植的   的实施方式。

来自Oracle Javadocs mappedName

  

public abstract String mappedName

     

此资源应映射到的产品特定名称。该   由name元素或默认定义的此资源的名称是   使用资源的应用程序组件的本地名称。   (它是JNDI java:comp / env命名空间中的一个名称。)许多应用程序   服务器提供了将这些本地名称映射到资源名称的方法   应用服务器已知。此映射名称通常是全局的   JNDI名称,但可以是任何表单的名称。应用程序服务器不是   也不需要支持任何特定形式或类型的映射名称   使用映射名称的能力。映射的名称取决于产品   并且通常依赖于安装。不能使用映射名称。

     

默认:“”

1 个答案:

答案 0 :(得分:10)

假设您在应用程序服务器中配置了一个连接池(javax.sql.DataSource)并放置在例如JNDI中。 java:datasources/jta/MyDb

假设应用程序的组件(可能是EJB)需要访问数据库。 DataSource可以注入:

@Resource
private DataSource theDatabase;

您的组件可能是通用的,即可以部署在多个环境中。或者在单一环境中可能存在许多数据源(java:datasources/jta/MyDb1java:datasources/jta/MyDb2,...)。如何将特定的DataSource映射到您的组件?

@Resource(mappedName="java:datasources/jta/MyDb")
private DataSource theDatabase;

(确切的细节可能会丢失或者是特定于应用程序服务器的,但我希望你能得到一般意见。)