0

我是 EJB 3.1 领域的新手,并试图了解 JBoss Application Server 7.1 的一些基础知识。

目前我被困在一个 - 非常基本的 - 问题上。当服务器上的一个 bean 想要使用另一个 bean 时,我需要使用 InitialContext.lookup() 方法。如果我查看文献,我会发现这样的电话:

TheBean = (<Interface>) new InitialContext().lookup("<NameOfTheBean>/local");

但是这个电话对我不起作用。每次我收到这样的错误:

javax.ejb.EJBException: javax.naming.NameNotFoundException

经过数小时寻找解决方案后,我找到了使用另一个调用的代码示例,如下所示:

TheBean = (<Interface>) new InitialContext().lookup("ejb:/<Package>//<NameOfTheBean>!<Package>.<Interface>");

那么这个解决方案对我有用,但问题是为什么?有人知道为什么第一个调用会产生异常而第二个调用正常吗?

非常感谢!

4

1 回答 1

2

为什么?不同版本的 JBoss 在 JNDI 命名空间中部署具有不同默认名称的 bean。

  ctx.lookup("BeanName/local")

适用于 JBoss 4.xx 及更高版本,但不适用于 JBoss v7。例如,您可以在 JB7 的 server.log 中看到 bean 如何映射到 JNDI 名称(参见 java:/jboss/exported/... 以及它如何对应于您的第二次连续调用):

13:57:05,550 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor](MSC 服务线程 1-4)部署单元部署“navi-ejb3.jar”中名为 ProductionHistoryBean 的会话 bean 的 JNDI 绑定如下:

        java:global/navi-ejb3/ProductionHistoryBean!navi.ejb3.production.history

.ProductionHistoryRemote

        java:app/navi-ejb3/ProductionHistoryBean!navi.ejb3.production.history.Pr

演出历史远程

        java:module/ProductionHistoryBean!navi.ejb3.production.history.Productio

nHistoryRemote

        java:jboss/exported/navi-ejb3/ProductionHistoryBean!navi.ejb3.production

.history.ProductionHistoryRemote

        java:global/navi-ejb3/ProductionHistoryBean

        java:app/navi-ejb3/ProductionHistoryBean

        java:模块/ProductionHistoryBean
于 2012-10-15T08:01:45.793 回答