2009-08-11 103 views
3

我有兩個單獨安裝的WebSphere。 (實際上一個是帶有EJB 3.0和Web服務功能包的WebSphere Application Server V6.1,另一個服務器是WebSphere ESB Server V6.2)。但是,我知道ESB實際上是建立在WAS之上的,所以它具有regualr WAS服務器所具有的所有配置設置。在不同的WebSphere服務器上進行EJB JNDI查找

在我的ESB服務器中,我試圖公開一個寫爲EJB 3.0的服務,該服務將部署到WAS 6.1服務器。我的問題不是如何讓EJB 2.1調用調用EJB 3.0。我們已經做到了。我的問題是如何跨物理虛擬機進行調用。 WebSphere Application Server從ESB服務器運行在它自己的單元/節點/服務器中。根據我在IBM文檔中讀到的內容,可以在WAS上設置一個名稱空間綁定,以指向另一個WAS實例上的遠程EJB。因此,您可以使用JNDI在一個真正駐留在另一個WAS實例中的WAS實例上查找一個bean。這種方法的優點在於你想要的EJB的位置被抽象到容器級別,並且你不必拖拽IP地址和端口的屬性文件,以便在它改變服務器時訪問該bean。 。您只需對遠程EJB進行標準的JNDI查找,即可獲得它。

聽起來像是可以做到的。 (請參閱以下鏈接: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/tnam_view_bindings.html)特別要遵循EJB和間接命名空間綁定的鏈接。

但我一直在對我的頭撞了一會兒。這說得通。它看起來可以完成。而間接命名空間綁定看起來最有前途。但我無法讓它工作得很好。我的ESB服務器不斷抱怨在我所要求的上下文中找不到comp/env/ejb。非常困惑這一個。

只是想知道有沒有人做過這種事情。你能給我一個具體的例子,說明你如何在WAS中設置這樣做?任何幫助表示讚賞

回答

4

那麼,我已經與IBM談論如何做到這一點,並感到驚訝的是他們的答案。他們回答說,如果您在同一臺服務器或服務器集羣中將EJB與EJB進行對話,那麼通過IIOP使用EJB RMI。使用JNDI可以抽象出bean實際在哪裏運行(在集羣環境中)。

如果您要從一臺服務器(或服務器集羣)跨到另一臺服務器(或服務器集羣),而不管目標和源是否在同一個單元中,IBM建議您使用消息傳遞或Web服務。他們認爲這是一種更好的應用程序抽象方法,以防止它們彼此「捆綁」。他們的確說過你可以讓EJB通過CORBA與RMI交談,但是隻有在絕對必要的時候纔會這樣做。當然,您需要知道通過CORBA進入的IP和端口號(以及在集羣環境中每個集羣成員的時間)。

再一次,這種驚訝我,但它確實有道理。我以爲我會與世界分享這些想法,特別是如果您正在使用WebSphere。

0

如何從Tomcat

  1. 使用IBM JDK作爲查找運行Tomcat的
  2. 找到bootstab端口,使用IIOP在PROVIDER_URL
+0

IBM JDK現在很難從我看到的東西中獲得。從他們的網站可用的過時。並且可以得到的更新版本與其他產品(如WebSphere Application Server)一起打包,這引發了一個問題......如果您使用的是Tomcat,爲什麼要購買那些產品以獲得IBM JDK?那麼爲什麼不使用WAS呢? – 2010-06-09 14:10:33

0

我堅持了同樣的問題。試圖包括所有的WebSphere和IBM ORB罐子後發現這篇文章在IBM 使用的Oracle JDK客戶端如何查找在WebSphere Application Server中的EJB和其他資源 - http://www-01.ibm.com/support/docview.wss?uid=swg21382740

主要用來代替WsnInitialContextFactory

的CNCtxFactory
//props.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory"); 
Hashtable env = new Hashtable(); 
      env.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory"); 
      env.put("java.naming.provider.url", iioppath); 
+0

不是我所追求的。我在兩個容器中運行(即在WebSphere中)。我想跨越WebSphere的實例。但是這裏有一點 - 我不想知道單元,節點和服務器名稱,因爲這些名稱可能會在每個環境中發生變化。因此,爲什麼我想在服務器2上查找一個EJB,因爲如果它在服務器1上是本地的。從我的問題的上面的鏈接看,它看起來是可能的。只是想知道是否。 – 2011-10-05 12:54:58

相關問題