【问题标题】:what is java:comp/env? [duplicate]什么是 java:comp/env? [复制]
【发布时间】:2012-07-22 19:53:07
【问题描述】:

java:comp/env 是什么意思?

看起来像什么:

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

做吗?

我理解这样的查询:

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

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

【问题讨论】:

  • @Marko Topolnik 但这并不能回答我的问题。
  • 请在投票前打开并阅读链接以关闭此问题。不要只看标题。
  • 这对我来说确实像是一个答案。它是容器提供的根命名空间,供您在其中查找资源。
  • 这对于试图从 Weblogic 迁移到 Tomcat 的人来说是一个很好的问题

标签: java jakarta-ee jndi


【解决方案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 链接中也找到了管理指南,它清除了整个画面。谢谢。
    猜你喜欢
    • 2011-05-05
    • 2011-11-19
    • 2020-08-29
    • 2012-09-23
    • 2014-11-20
    • 1970-01-01
    • 2021-01-29
    • 2010-10-12
    • 2019-01-27
    相关资源
    最近更新 更多