个人认为ejb远程调用非常有用,性能应该比webservice之流要好很多,配置也并不是很复杂,搞了一个下午重要搞定,记录下来
1. 加入jar包javax.ejb_3.0.1.jar
2. 写服务端
package com.test;
public interface RmiInterface {
public Object callService(Object obj);
}
package com.test;
import java.util.HashMap;
import java.util.Map;
import javax.ejb.Remote;
import javax.ejb.Stateless;
@Stateless(mappedName="AipEJBAdapter")
@Remote({RmiInterface.class})
public class RmiEjbImpl implements RmiInterface{
public Object callService(Object obj) {
System.out.println("调用RmiEjbImpl.callService,参数:"+obj);
Map<String,Object> res = new HashMap<String,Object>();
res.put("nsrsbh", "dsagewgwre");
return null;
}
}
3. 把服务端这两个类打包成jar,部署web工程到weblogic,把这个jar放到lib下面
4. 在web目录下新建META-INF/application.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN'
'http://java.sun.com/dtd/application_1_3.dtd'>
<application>
<display-name>ejbtest</display-name>
<module>
<ejb>WEB-INF/lib/ejbtest.jar</ejb>
</module>
<module>
<web>
<web-uri>/</web-uri>
</web>
</module>
</application>
5. 启动服务器,在webloic控制台,deployments可以看到jar已部署成功,打开servers菜单,展开服务器,
View JNDI Tree 可以看到已经部署成功的ejb的jndi,记录
下
Binding Name,客户端调用时会用到
6. 客户端调用测试代码:
package com.test;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
public class RmiClientTest {
public static void main(String[] args) throws Exception {
Properties p = new Properties();
p.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
p.setProperty(Context.PROVIDER_URL, "t3://localhost:7001");
InitialContext init = new InitialContext(p);
RmiInterface rmi = (RmiInterface) init.lookup("AipEJBAdapter#com.test.RmiInterface");
rmi.callService("测试入参");
}
}
lookup的参数即为第5步中的Binding Name
注:服务端必须部署在weblogic下面,客户端可加入weblogic的jar包wlfullclient.jar,然后写个main测试即可