什么是java:comp/env范围规则?

Mel*_*ius 8 java

据我所知,java:comp/env在JNDI树在那里你可以找到当前的Java EE组件(web应用程序,或EJB)特性的节点,我也知道,每个EJB都有自己的组件环境,也有java:globaljava:appjava:module视我有一些问题

  1. 当我Context envContext = (Context)initContext.lookup("java:comp/env");用来获取initContext 时我得到的上下文(全局,应用程序,模块,webApp或EJB上下文)?
  2. 是否有一些规则适用于搜索不同的范围?
  3. 假设我有许多EJB的Web应用程序,这是否意味着我有许多初始上下文(一个用于webApp,一个用于每个EJB),或者所有这些资源都以某种方式在一个上下文中收集java:comp/env

非常感谢.

Cur*_*ind 1

  1. 当我使用 Context envContext = (Context)initContext.lookup("java:comp/env"); 时 要获取 initContext 我到底得到什么上下文(全局、应用程序、模块、webApp 或 EJB 上下文)?

引用 TomEE 文档http://tomee.apache.org/lookup-of-other-ejbs-example.html

在 web 应用程序中,java:comp/env 命名空间由所有 servlet 共享。这本质上相当于 Java EE 6 中的 java:module 命名空间。请理解,这里的定义存在冲突,对于 EJB,java:comp 的作用域是组件(EJB 本身),而不是像 web 应用程序那样是模块。

  1. 不同范围的搜索是否有一定的规则?

引用自JavaEE 6教程http://docs.oracle.com/cd/E19798-01/821-1841/girgn/index.html

java:global JNDI 名称空间是使用 JNDI 查找查找远程企业 Bean 的可移植方法。java:module 命名空间用于查找同一模块内的本地企业 Bean。java:app 命名空间用于查找打包在同一应用程序中的本地企业 Bean。也就是说,企业 Bean 打包在包含多个 Java EE 模块的 EAR 文件中。

  1. 假设我有一个包含许多 EJB 的 Web 应用程序,这是否意味着我有许多初始上下文(一个用于 webApp,一个用于每个 EJB),或者所有这些资源都以某种方式收集在一个上下文 java:comp/env 下?

根据上面的链接,您将不会有很多上下文。