ejb中的资源注入
resource injection in ejb
我不明白 lookup
参数和 @Resource
注释的 name
参数之间的区别。我阅读了所有关于注释及其字段等的文档
我知道如何使用 name
来注入或绑定资源,但问题是没有找到任何示例来解释 lookup
和 name
之间的区别。
谁能举个例子或者说说它们的区别?
name
是 java:comp/env
命名空间中的 "virtual" 引用名称。在某种程度上,该引用需要指向已定义的 "physical" 资源。做到这一点的标准方法是使用 lookup
属性,但产品也有一种方法 "bind" 资源引用,因此在许多产品中,特定于产品的绑定在功能上等同于名称. (特定于产品的绑定仍然很重要,因为您不想依赖开发人员从操作环境等方面对数据源名称进行硬编码)
例如,您可能有 @Reference(name="jdbc/myDS", lookup="jdbc/oracleDS")
,这意味着 java:comp/env/myDS
将被定义为对绑定到默认 JNDI 命名空间的 jdbc/oracleDS
数据源的间接查找。
再例如,您可能有 @DataSourceDefinition(name="derbyDS")
和 @Resource(name="jdbc/myDS", lookup="java:comp/env/derbyDS")
。前者定义了一个实际的数据源(再次相对于 java:comp
),后者定义了一个间接查找。
我不明白 lookup
参数和 @Resource
注释的 name
参数之间的区别。我阅读了所有关于注释及其字段等的文档
我知道如何使用 name
来注入或绑定资源,但问题是没有找到任何示例来解释 lookup
和 name
之间的区别。
谁能举个例子或者说说它们的区别?
name
是 java:comp/env
命名空间中的 "virtual" 引用名称。在某种程度上,该引用需要指向已定义的 "physical" 资源。做到这一点的标准方法是使用 lookup
属性,但产品也有一种方法 "bind" 资源引用,因此在许多产品中,特定于产品的绑定在功能上等同于名称. (特定于产品的绑定仍然很重要,因为您不想依赖开发人员从操作环境等方面对数据源名称进行硬编码)
例如,您可能有 @Reference(name="jdbc/myDS", lookup="jdbc/oracleDS")
,这意味着 java:comp/env/myDS
将被定义为对绑定到默认 JNDI 命名空间的 jdbc/oracleDS
数据源的间接查找。
再例如,您可能有 @DataSourceDefinition(name="derbyDS")
和 @Resource(name="jdbc/myDS", lookup="java:comp/env/derbyDS")
。前者定义了一个实际的数据源(再次相对于 java:comp
),后者定义了一个间接查找。