Posted on 2007-03-04 11:57
dennis 閱讀(1405)
評論(0) 編輯 收藏 所屬分類:
java
??? 在websphere server上的jsp、servlet中調用EJB很簡單了:
??????????? Context?ctx?=?new?InitialContext();
????????????MessageSender?msgSender?=?null;
????????????MessageSenderHome?home?=?(MessageSenderHome)?javax.rmi.PortableRemoteObject
????????????????????.narrow(ctx.lookup("MessageSender"),
????????????????????????????MessageSenderHome.class);
????????????msgSender?=?home.create();
????????????msgSender.sendMessage();
??? 如果要在服務器外部的普通java類的main方法中調用websphere上的EJB,需要注意幾個問題:
1.需要將websphere安裝目錄下的lib中的jar包加入classpath
2.拷貝websphere安裝目錄下\WebSphere\AppServer\properties\下面的implfactory.properties文件加入classpath
3.需要將websphere部署完成后生成的jar包(包含自動生成的存根類等,不然會報不能載入存根的error)加入classpath,比如WebSphere\AppServer\installedApps\dennis\JMSTest.ear\JMSTest.jar包
4.使用webphere自帶的ibm的JDK,也就是安裝目錄下WebSphere\AppServer\java即是,在eclipse中新建一個安裝的jre即可,替代策略是將此jdk下的jre的jar包加進classpath也行
??? 一個java類調用ejb的例子,調用SLSB:
package?net.rubyeye.testjms;
import?javax.naming.Context;
import?javax.naming.InitialContext;
import?net.rubyeye.testjms.interfaces.MessageSender;
import?net.rubyeye.testjms.interfaces.MessageSenderHome;
public?class?Test?{
????/**
?????*?@param?args
?????*/
????public?static?void?main(String[]?args)?{
????????try?{
????????????//?Hashtable?h?=?new?Hashtable();
????????????//?h.put(Context.INITIAL_CONTEXT_FACTORY,
????????????//?"com.ibm.websphere.naming.WsnInitialContextFactory");
????????????//?h.put(Context.PROVIDER_URL,?"corbaloc::127.0.0.1:port");
????????????Context?ctx?=?new?InitialContext();
????????????MessageSender?msgSender?=?null;
????????????MessageSenderHome?home?=?(MessageSenderHome)?javax.rmi.PortableRemoteObject
????????????????????.narrow(ctx.lookup("MessageSender"),
????????????????????????????MessageSenderHome.class);
????????????msgSender?=?home.create();
????????????msgSender.sendMessage();
????????}?catch?(Throwable?t)?{
????????????t.printStackTrace();
????????}
????}
}
在同一臺機器上使用上面的代碼即可調用,遠程調用去掉注釋,并替換相應的IP和port