前段日子有網友問如何調用不在一個應用服務器上的EJB的問題,自己試驗了一下,下面舉個例子把這個問題說清楚:
假設我們寫了一個Session Bean,實現了一些業務方法,部署到了A服務器的sunone application server上,然後我們又寫了一個JSP,並將其部署到了B服務器上的sunone application server中,該JSP將調用A服務器上那個session bean的一些業務方法,這其中需要注意兩點:
1、在使用JNDI lookup A服務器上的那個session bean的時候,需要如下配置環境變量:
Properties env = new PropertIEs();
env.put("Java.naming.factory.initial",
"com.sun.jndi.cosnaming.CNCtxFactory");
env.put("Java.naming.provider.url", "iiop://192.168.0.2:3700");
其中192.168.0.2就是A服務器的IP地址,當然也可以寫A服務器的主機名
當然,有些文章或書上可能是這種寫法,也是可以的:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory");
env.put(Context.PROVIDER_URL, "iiop://192.168.0.2:3700");
2、眾所周知,遠程調用需要在調用端有被調用類的stub類,對應到J2EE應用中,也就是ejb的clIEnt類,一般來說,這個類都是在部署我們的J2EE應用時自動生成的,所以需要將包含這個類的jar包放到WEB-INF/lib目錄下(如果是使用一個web app來作為客戶端調用EJB)以便應用服務器能找到這些stub類並正確還原出調用對象來
明確了以上兩點後,基本上就沒有問題了,有興趣的朋友可以自己試驗一下