什么是java:comp/env?

sap*_*Pro 77 java jndi java-ee

是什么意思java:comp/env

看起来像什么:

Context envContext = (Context)initContext.lookup("java:comp/env");
Run Code Online (Sandbox Code Playgroud)

做什么?

我明白这样的查找:

(DataSource)envContext.lookup("jdbc/MyDatasource")
Run Code Online (Sandbox Code Playgroud)

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

JB *_*zet 67

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

Context envContext = (Context)initContext.lookup("java:comp/env");
Run Code Online (Sandbox Code Playgroud)

允许定义直接指向此节点的变量.它允许做

SomeBean s = (SomeBean) envContext.lookup("ejb/someBean");
DataSource ds = (DataSource) envContext.lookup("jdbc/dataSource");
Run Code Online (Sandbox Code Playgroud)

而不是

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

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

  • 每个JEE组件(webapp,EJB)都可以定义此组件本地的属性.这些属性可以通过`java:comp/env`访问.例如,请参阅http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html#web.xml_configuration.EJB具有相同的功能. (9认同)
  • 我仍然不了解`java:comp/env`究竟是什么. (6认同)

jok*_*ker 10

我知道我已经迟到了,但我问了同样的问题,我想我得到了一些答案。所以,请允许我投入两分钱。

java:comp/env/jdbc/myDataSource

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


Ric*_*ich 7

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

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

另请参见NamingManager.getURLContext