2012-07-24 223 views
57

java:comp/env是什么意思?什么是java:comp/env?

什么是看起来像:

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

吗?

据我所知,查找,如:

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

查找该名MyDatasourcecontext.xmlweb.xml得到数据库的URL。 是这样吗? !但前者抬头是干什么的?

+1

的可能重复[什么是Java的:comp/env的/做(http://stackoverflow.com/questions/4099095/what-does-javacomp-env-do) – 2012-07-24 13:26:05

+4

@Marko Topolnik但这并不能回答我的问题。 – saplingPro 2012-07-24 13:33:39

+3

**请在投票结束之前打开并阅读链接以关闭此问题。不要只追求标题。** – saplingPro 2012-07-24 13:51:58

回答

46

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

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

+0

_this_节点的用途是什么? JNDI树中会有很多节点。 – saplingPro 2012-07-24 13:53:20

+2

我仍然不明白'java:comp/env'究竟是什么。 – saplingPro 2012-07-24 13:54:30

+7

每个JEE组件(webapp,EJB)都可以定义该组件的本地属性。这些属性可以通过'java:comp/env'访问。例如,请参阅http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html#web.xml_configuration。 EJB具有相同的东西。 – 2012-07-24 15:02:53