websphere5.1上使用普通client調用EJB需要注意的問題
在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,需要注意幾個問題:MessageSender msgSender = null;
MessageSenderHome home = (MessageSenderHome) javax.rmi.PortableRemoteObject
.narrow(ctx.lookup("MessageSender"),
MessageSenderHome.class);
msgSender = home.create();
msgSender.sendMessage();
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();
}
}
}
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
文章轉自莊周夢蝶 ,原文發布時間5.17
最後更新:2017-05-17 12:01:50