87

什么意思java:comp/env

看起来像什么:

Context envContext = (Context)initContext.lookup("java:comp/env");

做 ?

我知道这样的查找:

(DataSource)envContext.lookup("jdbc/MyDatasource")

MyDatasourcecontext.xml或中查找名称web.xml以获取数据库的 URL。是这样吗 ?!!但是前者的查找是做什么的呢?

4

3 回答 3

74

java:comp/env是 JNDI 树中的节点,您可以在其中找到当前 Java EE 组件(webapp 或 EJB)的属性。

Context envContext = (Context)initContext.lookup("java:comp/env");

允许定义一个直接指向该节点的变量。它允许做

SomeBean s = (SomeBean) envContext.lookup("ejb/someBean");
DataSource ds = (DataSource) envContext.lookup("jdbc/dataSource");

而不是

SomeBean s = (SomeBean) initContext.lookup("java:comp/env/ejb/someBean");
DataSource ds = (DataSource) initContext.lookup("java:comp/env/jdbc/dataSource");

相对路径而不是绝对路径。这就是它的用途。

于 2012-07-24T13:41:57.780 回答
9

它是一个内存中的全局哈希表,您可以在其中按名称存储全局变量。

“java:” url 方案使 JNDI 查找一个javaURLContextFactory类,该类通常由您的应用程序容器提供,例如这里是 Tomcat 的实现 javadoc

另请参阅NamingManager.getURLContext

于 2015-11-18T03:38:01.963 回答
4

我知道我来晚了,但我问了同样的问题,我想我得到了一些答案。所以,如果我可以把我的两分钱。

java:comp/env/jdbc/myDataSource

  • java:就像jdbc:来自连接字符串一样。充当协议。
  • comp是所有 JNDI 上下文的根。
  • env是所有相关资源的子上下文。用户还有另一个。看看这个
  • jdbc是 jdbc 资源的子上下文。有种类。检查上一个项目符号中的链接。
  • myDataSource是您的 jdbc 资源的名称。
于 2021-02-23T00:55:23.270 回答