2016-10-13 75 views
2

當我部署我的EJB模塊(包含會話bean)時;我看到在Glassfish的控制檯下方的輸出(在Netbeans的):瞭解Glassfish控制檯JNDI輸出

Info: EJB5181:Portable JNDI names for EJB NewSessionBean: [java:global/EJBModule1/NewSessionBean!com.Hello.NewSessionBeanRemote, java:global/EJBModule1/NewSessionBean] 
Info: EJB5182:Glassfish-specific (Non-portable) JNDI names for EJB NewSessionBean: [com.Hello.NewSessionBeanRemote, com.Hello.NewSessionBeanRemote#com.Hello.NewSessionBeanRemote] 

我有兩個問題:

1) Why does the remote interface have a JNDI reference? I thought it was just the EJB. 
2) Why is there a comma, which appears to separate two JNDI references per line? 

回答

3

1)爲什麼遠程接口有一個JNDI參考?我認爲它 只是EJB。

這不是它有一個JNDI參考,它只是一個便攜式JNDI參考,其中包括其實現的接口的名稱RemoteInterface。

請參見下面的解釋從here

客戶端應用程序需要使用全局JNDI名稱來查找一個EJB。沿着ejb規範的所有 都沒有提到這種全球jndi名稱的可移植性。這允許每個供應商以特定於供應商的方式爲EJB分配全局名稱。這意味着執行使用全局JNDI名稱查找的客戶端代碼本質上是 在應用服務器供應商實現中不可移植。

EJB 3.1通過強制要求每個容器必須分配(至少一個)明確定義的全局JNDI名稱給EJB來解決上述問題。一個(便攜式)全局JNDI的EJB的名稱的 一般語法 形式:

java:global/[<application-name>]/<module-name>/<bean-name>!<fully-qualified-bean-interface-name>

除了上述的名稱,如果EJB公開只是一個單一的客戶端 視圖(即它實現一個接口或沒有界面 視圖),所述容器還負責豆映射到

java:global/[<application-name>]/<module-name>/<bean-name>

  1. <application-name>默認爲包名稱(.ear文件名),而不捆綁擴展。這可以在 application.xml中覆蓋。此外,僅當 bean打包在.ear文件中時才適用。
  2. <module-name>默認爲沒有包擴展名的包名(.war或.jar)。再次,這可以在ejb-jar.xml中重寫。
  3. <bean-name>默認爲bean的非限定類名稱。但是,如果@Stateful@Stateless@Singleton使用名稱 屬性,則在那裏指定的值將用作bean的名稱 。

而且

2)爲什麼會出現一個逗號,這似乎分離兩個JNDI引用 每行?

因爲逗號用於分隔列表中的條目:)問題1的答案也應該回答這個問題,有一個條目只包含bean名稱和一個包含bean名稱+接口名稱的條目。

+0

感謝+1鏈接。你能夠看看我的其他問題在這裏:http://stackoverflow.com/questions/40045883/windows-client-and-linux-ubuntu-server? – w0051977