簡體   English   中英

使用 InitialContext 查找 Liberty

[英]Using InitialContext for lookups on Liberty

我正在將 Ear 應用程序從 WebSphere 8.5 遷移到 WebSphere Liberty。

有 2 個 EJB 應用程序 A 和 B 部署在不同的系統上。

在代碼中,每當 B 必須與 A 交談時,步驟是

a) 創建 InitialContext 並傳遞 A 的 EJB URL

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL, url);
InitialContext ic = new InitialContext(env)

b) 使用這個 InitialContext 然后進行 JNDI 查找

要將此代碼遷移到 Liberty,我需要將 EJB 接口的所有 JNDI 查找替換為 java 命名空間。

遷移工具還建議使用默認 InitialContext 並且不要在 Liberty 上傳遞 INITIAL_CONTEXT_FACTORY 和 PROVIDER_URL

InitialContext  context = new InitialContext();

我的問題是,在 A 和 B 位於遠程系統上的上述場景中,如果有自由,這將如何工作? 我們不需要提供 EJB Url 嗎?

另一個相關問題是此更改是否向后兼容 Websphere 8.5

在 Liberty 上, java:名稱空間查找僅在查找同一服務器進程中的 bean 時可用。 要在服務器進程之間查找 bean,您必須使用corbaname查找,其中corbaname將包括目標服務器的主機和 IP 地址。 可以在此處找到有關此內容的詳細信息:

https://www.ibm.com/support/knowledgecenter/SSD28V_liberty/com.ibm.websphere.wlp.core.doc/ae/twlp_ejb_remote.html

此外,可以在 open-liberty 源測試項目中找到一個示例,該項目顯式測試了在進程之間查找遠程 EJB 的不同方式:

https://github.com/OpenLiberty/open-liberty/blob/integration/dev/com.ibm.ws.ejbcontainer.remote_fat/fat/src/com/ibm/ws/ejbcontainer/remote/fat/tests/Server2ServerTests。爪哇

該測試的實際 servlet(在兩台服務器之一上運行)可以在這里找到:

https://github.com/OpenLiberty/open-liberty/blob/integration/dev/com.ibm.ws.ejbcontainer.remote_fat/test-applications/RemoteClientWeb.war/src/com/ibm/ws/ejbcontainer/remote/客戶端/網絡/RemoteTxAttrServlet.java

測試使用localhost因為兩台服務器都在同一個系統上,所以如果它們在不同的系統上,則需要更換。

至於使用 WebSphere 傳統 8.5 的可移植性,答案是否定的。 WebSphere 傳統版和 Liberty 都支持在java:查找位於同一服務器進程中的 bean 的名稱空間的遠程接口,但是在進程之間查找 EJB 的行為不兼容。

暫無
暫無

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

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