什么是java:comp / env?

java:comp/env是什么意思?

看起来像什么:

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

做?

我明白,一个查找像:

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

context.xmlweb.xml查找名称MyDatasource以获取数据库的URL。 是这样吗 ? 但是前者查找的是什么呢?

java:comp/env是JNDI树中的节点,您可以在其中find当前Java EE组件(Web应用程序或EJB)的属性。

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

允许定义一个直接指向这个节点的variables。 它允许做

 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"); 

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

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

“java:”urlscheme使JNDI寻找一个javaURLContextFactory类,通常由你的应用程序容器提供,例如这里是Tomcat的实现javadoc

另请参阅NamingManager.getURLContext