2014-09-01 35 views
0

爲什麼只有JNDI被用來訪問遠程EJB(不同的JVM,不同的主機)?爲什麼不使用@EJB註釋?爲什麼要使用JNDI? - 遠程EJB調用

在所有的EJB書籍中都提到您可以使用@EJB註釋來訪問遠程EJB。

實施例:http://docs.oracle.com/javaee/7/tutorial/doc/ejb-intro004.htm

32.4.4遠程客戶端

企業bean的遠程客戶端具有以下特徵。

  • 它可以在不同的機器,並從企業Bean它 訪問不同的JVM上運行。(它不要求在不同的JVM運行。)

  • 它可以是一個Web組件,應用程序客戶端,或其他企業bean

  • 它可以是一個Web組件,應用程序客戶端,或另一個企業bean。

  • 對於遠程客戶端,企業bean的位置是透明的。

  • 企業bean必須實現業務接口。也就是說,遠程客戶端可能不會通過無界面視圖訪問企業Bean。

要創建的企業Bean允許遠程訪問,你必須:

  • 裝飾企業bean與@Remote註釋業務接口:

    @Remote公共接口InterfaceName {...}

  • 或者用@Remote修飾bean類,指定業務接口或 int erfaces:

    @Remote(InterfaceName.class) 公共類BeanName實現InterfaceName中{...}

到的企業Bean實現遠程業務接口是通過兩種依賴實現 客戶端訪問注入或JNDI查找。

  • 要通過 依賴注入獲得對企業bean的遠程業務接口的引用,使用javax.ejb。EJB註釋並指定企業bean的 遠程業務接口名稱:

    @EJB示例示例;

  • 要通過JNDI獲得對企業bean的遠程業務接口的引用 查找,使用javax.naming.InitialContext中接口的查找方法:

    ExampleRemote示例=(ExampleRemote) InitialContext.lookup( 「Java的:全球/對myApp/ExampleRemote」);

上面的代碼不正確?我還沒有看到一個使用依賴注入(@EJB)來訪問遠程EJB的任何代碼。這不可能?

幾個後說,這是不可能的使用@ EJB註釋用於調用遠程EJB:

PD:對不起。我的英語基礎。

+0

作爲你的[第二個鏈接(http://stackoverflow.com/a/16518704/3167508)狀態,「只能當應用程序在同一個服務器實例部署使用@EJB註釋。」 – EJP 2014-09-02 00:34:34

+1

它是由相矛盾如下:「企業bean的遠程客戶機具有以下特徵: 它可以在不同的機器和從企業bean它訪問不同的JVM上運行」 – DavidJesus03 2014-09-02 00:43:54

+1

也:「一個企業級bean實現遠程業務接口是通過兩種依賴注入(@EJB)或JNDI查找完成客戶端的訪問。」 – DavidJesus03 2014-09-02 00:48:00

回答

0

相信主要的原因是遠程的(不同的JVM)EJB實例的該注射通過

@EJB(lookup = "jndi_name")

僅由一些應用程序服務器並只與特定的配置支持。

即JBoss 7+僅當在獨立文件中定義remote-outbound-connection(並在包含對該連接的引用的部署包的META-INF文件夾中添加jboss-ejb-jar.xml)時才支持它。

此外:

  • @EJB只能在CDI工作管理豆

  • 使用這種方法迫使你定義每一次連接的連接屬性,同時與程序的查找你可以在每一個改變他們請求(你可以自由地手工處理情況和連接,如果需要的話)。