Java EJB容器中可能的JNDI查找

Java EJB容器中可能的JNDI查找,java,jakarta-ee,ejb-3.0,jndi,ejb-3.1,Java,Jakarta Ee,Ejb 3.0,Jndi,Ejb 3.1,我正在经历这个过程,并试图掌握进行JNDI调用的不同可能方式 您可以使用and(或基于初始上下文或SessionContext自行创建的上下文)来完成此操作。 根据您使用的语法不同,但我似乎找不到它背后的逻辑 所以我的问题是:什么时候可以使用什么语法在EJB容器环境中使用JNDI调用? 这个问题的其余部分只是说明我的观点 例如,我相信对于正确插入的sessioncontext或创建的initialcontext,这总是可能的: ctx.lookup(java:global[/<app-na

我正在经历这个过程,并试图掌握进行JNDI调用的不同可能方式

您可以使用and(或基于初始上下文或SessionContext自行创建的上下文)来完成此操作。 根据您使用的语法不同,但我似乎找不到它背后的逻辑

所以我的问题是:什么时候可以使用什么语法在EJB容器环境中使用JNDI调用?

这个问题的其余部分只是说明我的观点

例如,我相信对于正确插入的
sessioncontext
或创建的
initialcontext
,这总是可能的:

ctx.lookup(java:global[/<app-name>]/<module-name>/<bean-name>[!<fully-qualified-interface-name>])
ctx.lookup(java:comp/env ...)
// special ones like these
ctx.lookup("java:comp/UserTransaction");
ctx.lookup("java:comp/ORB");
ctx.lookup(java:global[/]/[!])
查找(java:comp/env…)
//像这样特别的
查找(“java:comp/UserTransaction”);
查找(“java:comp/ORB”);
有时(仅针对会话上下文?)此较短版本是可能的:

ctx.lookup(<bean-name>);
ctx.lookup();

嵌入式环境中
,只能使用
全局
引用吗?

我通常使用@EJB注释将EJB注入EJB容器中。因此,JDNI查找由服务器在部署时完成

例如JBOSS部署:

INFO[org.jboss.as.ejb3.deployment.processors.ejbndibingsdeploymentunitprocessor](MSC服务线程1-2)部署“MyProject.ear”的部署单元子部署“MyEJB.jar”中名为TestBean的会话bean的JNDI绑定如下:

java:global/MyProject/MyEJB/TestBean!my.project.TestBean
java:app/MyEJB/TestEJB!my.project.TestBean
java:module/TestEJB!my.project.TestBean
java:global/MyProject/MyEJB/TestEJB
java:app/MyEJB/TestBean
java:module/TestBean
有些符合EJB规范,有些依赖于应用程序服务器

如果必须从上下文进行查找,我认为最好的方法是使用java:global


您还可以在以下位置找到一些附加信息:

我通常使用@EJB注释在EJB容器中注入EJB。因此,JDNI查找由服务器在部署时完成

例如JBOSS部署:

INFO[org.jboss.as.ejb3.deployment.processors.ejbndibingsdeploymentunitprocessor](MSC服务线程1-2)部署“MyProject.ear”的部署单元子部署“MyEJB.jar”中名为TestBean的会话bean的JNDI绑定如下:

java:global/MyProject/MyEJB/TestBean!my.project.TestBean
java:app/MyEJB/TestEJB!my.project.TestBean
java:module/TestEJB!my.project.TestBean
java:global/MyProject/MyEJB/TestEJB
java:app/MyEJB/TestBean
java:module/TestBean
有些符合EJB规范,有些依赖于应用程序服务器

如果必须从上下文进行查找,我认为最好的方法是使用java:global


您还可以在以下位置找到一些附加信息:

jndi有点像文件系统。您可以使用基于您在树中的位置(您“cd”-ed到的位置)的相对路径来引用内容

默认情况下,注入的会话上下文“定位”在java:comp上,因此您可以引用java:comp中可用的内容,而无需提供“完整路径”

请注意,java:comp本身是相对于单个ejbbean的,或者由于历史原因是相对于整个Web模块的


我不是100%确定您对嵌入式环境的意思,但是如果您执行JNDI查找的代码不是任何预定义范围(如java:module、java:app等)的一部分,则只能使用java:global进行移植。

JNDI有点像文件系统。您可以使用基于您在树中的位置(您“cd”-ed到的位置)的相对路径来引用内容

默认情况下,注入的会话上下文“定位”在java:comp上,因此您可以引用java:comp中可用的内容,而无需提供“完整路径”

请注意,java:comp本身是相对于单个ejbbean的,或者由于历史原因是相对于整个Web模块的


我不是100%确定您对嵌入式环境的意思,但是如果您正在执行JNDI查找的代码不是任何预定义范围(如java:module、java:app等)的一部分,那么只有java:global可以移植使用。

我建议您阅读本()博客文章的所有5部分。非常有用,谢谢!我建议你阅读这篇()博客文章的全部5个部分。非常有帮助,谢谢!