java 网络编程,RMI,EJB之间那些屁事(一)
?????????? 在java的开发中不可避免的遇到java网络编程,RMI,EJB的使用,他们的关系是什么呢? RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI是非常容易使用的,但是它非常的强大。RMI的基于特定接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。
RMI基本原理
????????? 要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO来实现,其中传输协议比较出名的有http、tcp、udp等等,http、tcp、udp都是在基于Socket概念上为某类应用场景而扩展出的传输协议,网络IO,主要有bio、nio、aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。
?????? 由此可知RMI底层采用网络编程的,既RMi基于套接字编程的,RMI是EJB远程调用的基础,仅用RMI技术就可以实现远程调用,使用EJB是为了实现组件,事物,资源池,集群等功能。
下面RMI学习:
服务接口:
package com.easyway.space.basic.network.sockets.rmi;import java.net.MalformedURLException;import java.rmi.Naming;import java.rmi.NotBoundException;import java.rmi.RemoteException;import java.util.HashMap;import java.util.Map;/** * Rmi监控的客户端的服务 * * 客户端查找远程对象,并调用远程方法 * * @author longgangbai * */public class RmiMonitorClient {//用户缓存使用的实例public Map<Class,Object> serviceMap=new HashMap<Class,Object>();public RmiMonitorService monitorService;public String ip="localhost";public int port=8889;public int interactive(int funindex ,String param){ try { if(monitorService==null) { monitorService=getMonitorService(RmiMonitorService.class); }return monitorService.interactive(funindex, param);} catch (RemoteException e) {e.printStackTrace();}return 0;} /** * 查找服务对象的应用 * @param clazz * @return */public RmiMonitorService getMonitorService(Class clazz){try {Object object=serviceMap.get(clazz);if(object==null){monitorService=(RmiMonitorService)Naming.lookup("rmi://"+ip+":"+port+"/monitor");serviceMap.put(RmiMonitorService.class, monitorService);}else{ monitorService=(RmiMonitorService)serviceMap.get(clazz);}return monitorService;} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NotBoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return monitorService;}public static void main(String[] args) {RmiMonitorClient client=new RmiMonitorClient();int result=client.interactive(9, "i love you");System.out.println("result ="+result);}}?
1 楼 空谷悠悠 2011-01-12 非常的失望!
这里似乎服务程序和客户端程序都必须运行在本机,假如如客户端运行在其它机器上呢?LZ尝试或将localhost改为其它机器的IP吗?如果行,又该怎么操作,求解答
2 楼 longgangbai 2011-01-17 晕死,兄弟,EJB的分布式与ip没有关系的,不知道哥们怎么想的?ip改为非localhost如果不行,怎么还是分布式呢?空谷悠悠 写道非常的失望!
这里似乎服务程序和客户端程序都必须运行在本机,假如如客户端运行在其它机器上呢?LZ尝试或将localhost改为其它机器的IP吗?如果行,又该怎么操作,求解答
晕死,兄弟,EJB的分布式与ip没有关系的,不知道哥们怎么想的?ip改为非localhost如果不行,怎么还叫分布式呢?
3 楼 lhc1986 2012-06-21 rmi貌似不是基于套接字编程的吧,虽然都是通过ip+端口形式 4 楼 longgangbai 2012-07-04 lhc1986 写道rmi貌似不是基于套接字编程的吧,虽然都是通过ip+端口形式
貌似是的,个人简介纯属个人简介。