这个查找地址在Wildfly 8中意味着什么?

时间:2015-07-30 13:49:04

标签: java java-ee jndi wildfly-8

我使用Wildfly 8测试了我的第一个sessoin bean。我使用以下代码获取bean的代理

InitialContext ctx = new InitialContext();
Object obj = ctx.lookup("java:global/EJBDemo/FirstDemoEJB");

当我打印出对象时,我得到以下输出

  

远程EJB StatelessEJBLocator的代理{appName ='',moduleName ='EJBDemo',distinctName ='',beanName ='FirstDemoEJB',view ='interface com.demo.ejb.FirstDemoEJBRemote'}

我可以使用上面的查找继续使用RMI并获得所需的结果。

但是,我观察到Wildfly在部署时列出了其他查找路径。

java:global/EJBDemo/FirstDemoEJB!com.demo.ejb.FirstDemoEJBRemote
java:app/EJBDemo/FirstDemoEJB!com.demo.ejb.FirstDemoEJBRemote
java:module/FirstDemoEJB!com.demo.ejb.FirstDemoEJBRemote
java:jboss/exported/EJBDemo/FirstDemoEJB!com.demo.ejb.FirstDemoEJBRemote

当我使用其他查找名称名称(在!标记之前的部分)时,我得到以下输出

  

EJBDemo / FirstDemoEJB - 服务jboss.naming.context.java.app.TestEJB.EJBDemo.FirstDemoEJB

但我不能像在java:global lookup中那样获得所需的结果。

我的问题是Wildfly列出的这些其他查找路径是什么意思?它们也可以用于JNDI查找吗?如果是这样怎么办?

1 个答案:

答案 0 :(得分:0)

在Java EE 6之前,每个应用程序服务器(Weblogic,JBoss,Glassfish等)都有自己的JNDI命名约定,那么应用程序并不是跨服务器的便携式设备。

在Java EE 6中,规范标准化了JNDI地址。

来自https://docs.oracle.com/cd/E19798-01/821-1841/girgn/index.html

  

三个JNDI名称空间用于可移植JNDI查找:java:global,   java:module和java:app。

     

java:global JNDI命名空间是查找远程的可移植方式   使用JNDI查找的企业bean。 JNDI地址属于   以下表格:

     

java:global [/ application name] / module name / enterprise bean   name [/ interface name]应用程序名称和模块名称默认为   应用程序和模块的名称减去文件扩展名。   只有在打包应用程序时才需要应用程序名称   在EAR内。只有企业才需要接口名称   bean实现了多个业务接口。

     

java:module命名空间用于查找本地企业bean   在同一个模块中。 JNDI使用java:module命名空间进行寻址   具有以下形式:

     

java:module / enterprise bean name / [interface name]接口名称   仅当企业bean实现多个时才需要   业务界面。

     

java:app命名空间用于查找本地企业bean   打包在同一个应用程序中。也就是说,企业bean是   打包在包含多个Java EE模块的EAR文件中。 JNDI   使用java:app命名空间的地址具有以下形式:

     

java:app [/ module name] /企业bean名称[/ interface name]   模块名称是可选的。只有在需要时才需要接口名称   enterprise bean实现了多个业务接口。

     

例如,如果企业bean MyBean打包在Web中   应用程序归档myApp.war,模块名称是myApp。便携式   JNDI名称是java:module / MyBean使用的等效JNDI名称   java:global namespace是java:global / myApp / MyBean。