2012-10-14 84 views
0

我是EJB 3.1领域的新手,并试图通过JBoss Application Server 7.1获得一些基础知识。JBoss 7.1中的InitialContext.lookup()参数

目前我被困在一个非常基本的问题。当服务器上的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>"); 

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

非常感谢!

+0

你真的需要一个JNDI查找吗? “@ EJB”是不是也适用? –

回答

2

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

ctx.lookup("BeanName/local") 

适用于JBoss 4.x.x及更高版本,但不适用于JBoss v7。 你可以在你看到的server.log JB7你的豆子如何映射到JNDI名称, 例如(请参阅Java:/ JBoss的/导出/ ...以及它如何符合您的第二个连续的调用):

13:57:05,550 INFO    [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC  service thread 1-4) JNDI bindings for session bean named ProductionHistoryBean in deployment unit deployment "navi-ejb3.jar" are as follows: 

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

.ProductionHistoryRemote 

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

oductionHistoryRemote 

     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:module/ProductionHistoryBean 
+0

不知道他们改变了“调用”豆的方式。谢谢,我明白了! – FredFloete