我理解java:comp/env
是JNDI树中的节点,您可以在其中找到当前Java EE组件(Web应用程序或EJB)的属性,而且我知道每个EJB都有自己的组件环境,还有java:global
和java:app
以及java:module
,具体取决于我有一些问题
Context envContext = (Context)initContext.lookup("java:comp/env");
来获取initContext时我得到的上下文(全局,应用,模块,webApp或EJB上下文)?java:comp/env
下? / LI>
醇>
非常感谢。
答案 0 :(得分:1)
引用TomEE文档http://tomee.apache.org/lookup-of-other-ejbs-example.html
在webapp中,java:comp / env命名空间由所有servlet共享。 这基本上等同于Java EE中的java:module命名空间 6.理解这里的定义存在冲突,对于EJB,java:comp的作用域是组件(EJB本身)而不是 与webapps一样的模块。
引用JavaEE 6教程http://docs.oracle.com/cd/E19798-01/821-1841/girgn/index.html
java:global JNDI命名空间是查找远程的可移植方式 使用JNDI查找的企业bean。使用java:module命名空间 在同一模块中查找本地企业bean。该 java:app namespace用于查找打包的本地企业bean 在同一个应用程序中。也就是说,企业bean是打包的 在包含多个Java EE模块的EAR文件中。
根据以上链接,您将没有很多背景。
答案 1 :(得分:1)
关于存在EJB的java:comp/env
范围的问题3。
传统上(在JEE 6之前)java:comp/env
是war
模块的模块级别和jar
模块中EJB的EJB级别。
在该模型中,必须定义环境条目(通过resource-ref
中的env-entry
和ejb-jar.xml
,或者资源引用,因为JEE5可以在类级别使用@Resource
对于每一个EJB。
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>B1</ejb-name>
<ejb-class>p1.B1</ejb-class> <!-- ejb-class should be skipped if bean is already defined via annotation -->
<env-entry>
<env-entry-name>entry1</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>value1</env-entry-value
</env-entry>
</session>
</enterprise-beans>
</ejb-jar>
从JEE 6开始,可以将EJB部署为war
模块的一部分。无论war
模块是直接部署还是部分或ear
模块,它都在所有servlet,EJB和该模块中的任何其他代码之间共享一个java:comp/env
命名空间。可以在web.xml
中定义环境条目:
<web-app>
<env-entry>
<env-entry-name>entry1</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>value1</env-entry-value
</env-entry>
</web-app>
在这个基于war
的模型中,人们仍然可以ejb-jar.xml
来配置EJB的其他方面,但env-entry
中给定bean的ejb-jar.xml
最终会注入war
中所有其他bean的环境值。
因此,我总是会将war
档案用于所有内容(可能打包在ear
中)。
答案 2 :(得分:0)
- 当我使用Context envContext =(Context)initContext.lookup(“java:comp / env”);获取initContext我得到的上下文(全局,应用程序,模块,webApp或EJB上下文)?
醇>
您得到了您要求的那个,您正确描述为'当前Java EE组件(Web应用程序或EJB)的那个。
- 是否有适用于搜索不同范围的规则?
醇>
您在指定的范围内搜索。我不知道你的问题还有什么意思。
- 假设我有许多EJB的Web应用程序,这是否意味着我有许多初始上下文(一个用于webApp,一个用于每个EJB),或者所有这些资源都以某种方式收集在一个上下文java:comp / env?< / LI> 醇>
这个问题没有意义。您创建的InitialContexts
个InitialContext
。它们是物体。 他们所指的取决于您在中查找 "the current Java EE component (a webapp, or an EJB)"
的内容。如果你一直在查找java:comp/env
,你会一直这样做。所有“这些资源”分别以自己的名义“收集”,在 .icon-delete {
background-image: url(../images/delete.png) !important;
}
内。
答案 3 :(得分:0)
据我所知,默认情况下,范围将为全球