我根本不了解@Resource mappedName元素

Ism*_*ush 4 java jndi java-ee

我已经读过这两本书,我不理解它们,有人可以举一个例子并用简单的英语解释一下吗?主要是它和"名称"元素之间的区别/

来自Oracle教程

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

来自Oracle Javadocs mappedName

public abstract String mappedName

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

默认值:""

Nik*_*los 11

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

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

@Resource
private DataSource theDatabase;
Run Code Online (Sandbox Code Playgroud)

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

@Resource(mappedName="java:datasources/jta/MyDb")
private DataSource theDatabase;
Run Code Online (Sandbox Code Playgroud)

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

  • `name`是相对于`java:comp/env`的JNDI名称,它是组件的*private*.这意味着组件和只有组件可以通过路径`java:comp/env/ResourceName`的JNDI访问资源. (6认同)