2012-10-14 117 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