簡體   English   中英

如何指定從中獲取EJB的服務器?

[英]How do I specify a server to get an EJB from?

在Java EE中,從遠程服務器獲取EJB的方法是在JNDI中查找它。 規范定義了給定bean類型的JNDI名稱。

但是,這似乎僅是要從本地計算機上獲取Bean時才使用。 我想像大多數用戶一樣將bean從遠程服務器上刪除。 如何指定服務器URL? 是否將映射傳遞給InitialContext構造函數?

注意: 另一個問題幾乎相同,但是自從規范定義可移植JNDI名稱以來,這個問題已經過時。

您可以使用與運行服務器端時完全相同的代碼來進行遠程EJB的JNDI查找:

Context context = new InitialContext();  // No properties needed
MyEJB myEjbInstance = (MyEJB) context.lookup("ejb/MyEJB");

或者,當然,您可以注入它:

@EJB
private MyEJB myEjbInstance;

要使命名上下文起作用,您必須將應用程序作為Java EE 應用程序客戶端運行 應用程序客戶端與常規的獨立Java程序完全一樣,具有標准的main方法; 唯一的區別是它需要以不同的方式運行。 Java EE Spec中沒有指定這種方式,因此每個應用程序服務器都有其自己的方式。

例如,GlassFish要求應用程序客戶端在類路徑中包括一些特殊的jar ,並設置幾個系統屬性 具體來說,您必須在目錄路徑中包含lib/gf-installer.jar及其清單所引用的所有jar,並且必須設置org.omg.CORBA.ORBInitialHostorg.omg.CORBA.ORBInitialPort系統屬性。

我想從遠程服務器上獲取bean

是的,您需要指定運行/監聽遠程服務器(JNDI服務)的IP /端口。

如何指定服務器URL?

您必須設置屬性: java.naming.provider.url並將其提供給InitialConetxt使用。

這可以通過不同的方式完成:

  1. 使用jndi.properties文件
  2. 使用系統屬性
  3. 創建InitialContext對象的新實例時,將值傳遞到Hashtable中。

實例化InitialConetct的此屬性和其他必要屬性的具體值取決於供應商。 JBoss的示例可能是:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://yourServer:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

請記住,如果不指定URL,則無法從遠程服務器獲取EJB存根。 “遠程”是指客戶端和服務器在不同的JVM中運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM