什么是 java:comp/env? [复制]
Posted
技术标签:
【中文标题】什么是 java:comp/env? [复制]【英文标题】:what is java:comp/env? [duplicate] 【发布时间】:2012-07-22 19:53:07 【问题描述】:java:comp/env
是什么意思?
看起来像什么:
Context envContext = (Context)initContext.lookup("java:comp/env");
做吗?
我理解这样的查询:
(DataSource)envContext.lookup("jdbc/MyDatasource")
在context.xml
或web.xml
中查找名称MyDatasource
以获取数据库的URL。 是这样吗? !! 但是前者的查找有什么作用呢?
【问题讨论】:
@Marko Topolnik 但这并不能回答我的问题。 请在投票前打开并阅读链接以关闭此问题。不要只看标题。 这对我来说确实像是一个答案。它是容器提供的根命名空间,供您在其中查找资源。 这对于试图从 Weblogic 迁移到 Tomcat 的人来说是一个很好的问题 【参考方案1】: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");
相对路径而不是绝对路径。这就是它的用途。
【讨论】:
this 节点是什么意思? JNDI 树中会有很多节点。 我还是不明白java:comp/env
到底是什么。
每个 JEE 组件(webapp、EJB)都可以定义该组件的本地属性。这些属性可通过java:comp/env
访问。例如,请参阅tomcat.apache.org/tomcat-7.0-doc/…。 EJB 也有类似的东西。【参考方案2】:
这是一个内存中的全局哈希表,您可以在其中按名称存储全局变量。
“java:” url 方案导致 JNDI 查找 javaURLContextFactory
类,该类通常由您的应用容器提供,例如here is Tomcat's implementation javadoc
另见NamingManager.getURLContext
【讨论】:
【参考方案3】:我知道我来晚了,但我问了同样的问题,我想我得到了一些答案。所以,如果我可以投入我的两分钱。
java:comp/env/jdbc/myDataSource
java:
就像来自连接字符串的jdbc:
。充当协议。
comp
是所有 JNDI 上下文的根。
env
是所有相关资源的子上下文。用户还有另一个。签出this。
jdbc
是 jdbc 资源的子上下文。有种类。检查上一个项目符号中的链接。
myDataSource
是您的 jdbc 资源的名称。
【讨论】:
这应该是公认的答案 - 解释清楚。 @joker:您从 Sun Java System Application Server 共享的链接对于理解 JNDI 中的术语非常有用。我在设置它时几乎无法在 tomcat 文档中找到它,因为它在那里从未解释过太多。我在 Sun 链接中也找到了管理指南,它清除了整个画面。谢谢。以上是关于什么是 java:comp/env? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
服务器找不到 java:comp/env/jdbc/my_db 数据源...在上下文“java:”中找不到名称 comp/env/jdbc