什么是java:comp / env?

时间:2012-07-24 13:24:42

标签: java java-ee jndi

java:comp/env是什么意思?

看起来像是什么:

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

做什么?

我理解如下:

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

MyDatasourcecontext.xml中查找名称web.xml以获取数据库的网址。 是这样吗? !! 但前者看起来做了什么?

3 个答案:

答案 0 :(得分:63)

java:comp/env是JNDI树中的节点,您可以在其中找到当前Java EE组件(Web应用程序或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");

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

答案 1 :(得分:7)

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

“java:”url方案会导致JNDI查找javaURLContextFactory类,该类通常由您的应用容器提供,例如: here is Tomcat's implementation javadoc

另见NamingManager.getURLContext

答案 2 :(得分:1)

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

java:comp/env/jdbc/myDataSource

  • java: 就像连接字符串中的 jdbc:。充当协议。
  • comp 是所有 JNDI 上下文的根。
  • env 是所有相关资源的子上下文。还有另一个用户。检查this
  • jdbc 是 jdbc 资源的子上下文。有类型。检查上一个项目符号中的链接。
  • myDataSource 是您的 jdbc 资源的名称。