用RMI和CORBA开发JAVA分布式程序
2008-04-25 13:52
483 查看
用RMI和CORBA开发JAVA分布式程序
C/S模式
客户机/服务器模式是服务器和客户机交换信息进行分布计算的一种形式。在这个模式里,客户机和服务器都用同一种语言—它们都理解的协议进行通信。C/S模式有不同的方式,典型的应用是低层SOCKET分布式模式
基于系统的分布式对象是通过定义好的接口来隔离客户端请求和服务器端服务的对象集。数据请求和执行是分开的,这是C/S模式与分布式模式的主要区别。在一个分布式模型里,客户端发送消息给一个对象,这个对象判断消息决定哪种服务执行。服务或者方法,SELECTION被对象或者代理来执行。RMI
RMI应用起步
FileInterface提供了一个下载文件的方法,返回文件的字节集。CodeSample1:FileInterface.
importJAVA. RMI.Remote;
importJAVA. RMI.RemoteException;
publicinterfaceFileInterfaceextendsRemote{
publicbyte[]downloadFile(StringfileName)throws
RemoteException;
}注意:为了客户端能装载包含远程接口的远程对象,接口必须定义为Public必须扩展Remote接口,为了实现远程对象接口里的每个方法必须抛出RemoteException异常
应用远程接口
下一步是实现接口FileInterface,一个简单的应用在代码二。注意为了实现接口
FileInterface,类
FileImpl
必须扩展
UnicastRemoteObject
。
这说明类
FileImpl
创建一个单一,不能复制的通过
TCP
传输的
RMI
对象,CodeSample2:FileImpl.
importJAVA.io.*;
importJAVA. RMI.*;
importJAVA. RMI.server.UnicastRemoteObject;
publicclassFileImplextendsUnicastRemoteObject
implementsFileInterface{
privateStringname;
publicFileImpl(Strings)throwsRemoteException{
super();
name=s;
}
publicbyte[]downloadFile(StringfileName){
try{
Filefile=newFile(fileName);
bytebuffer[]=newbyte[(int)file.length()];
BufferedInputStreaminput=new
BufferedInputStream(newFileInputStream(fileName));
input.read(buffer,0,buffer.length);
input.close();
return(buffer);
}catch(Exceptione){
System.out.println("FileImpl:"+e.getMessage());
e.printStackTrace();
return(null);
}
}
}
服务器端开发
第三步是RMISecurityManager
实例并安装它
2
创建一个远程对象的实例
3
用
RMI
注册对象。CodeSample3:FileServer.
importJAVA.io.*;
importJAVA. RMI.*;
publicclassFileServer{
publicstaticvoidmain(Stringargv[]){
if(System.getSecurityManager()==null){
System.setSecurityManager(newRMISecurityManager());
}
try{
FileInterfacefi=newFileImpl("FileServer");
Naming.rebind("//127.0.0.1/FileServer",fi);
}catch(Exceptione){
System.out.println("FileServer:"+e.getMessage());
e.printStackTrace();
}
}
}这句
Naming.rebind("//127.0.0.1/FileServer",fi)说明
Naming.rebind("//127.0.0.1:4500/FileServer",fi)
客户端开发
下一步就是importJAVA.io.*;
importJAVA. RMI.*;
publicclassFileClient{
publicstaticvoidmain(Stringargv[]){
if(argv.length!=2){
System.out.println("Usage:JAVAFileClientfileNamemachineName");
System.exit(0);
}
try{
Stringname="//"+argv[1]+"/FileServer";
FileInterfacefi=(FileInterface)Naming.lookup(name);
byte[]filedata=fi.downloadFile(argv[0]);
Filefile=newFile(argv[0]);
BufferedOutputStreamoutput=new
BufferedOutputStream(newFileOutputStream(file.getName()));
output.write(filedata,0,filedata.length);
output.flush();
output.close();
}catch(Exceptione){
System.err.println("FileServerexception:"+e.getMessage());
e.printStackTrace();
}
}
}运行这个应用为了运行这个应用,我们必须先生成骨干码,然后编译服务器端,客户端代码,
命令行:
将生成两个文件:RMIcFileImpl
FileImpl_Stub.class和
FileImpl_Skel.class.客户端代理和服务端骨干。下一步,编译SERVER,CLIENT代码最后,开始
命令行
>
注册完成后,就可以开始服务器端应用。如果应用了RMIregistryportNumber
grant{
peRMIssion JAVA.security.AllPe RMIssion"","";
};注意:这只是一个简单的安全策略,如果比较重要的应用,你需要用更严格的安全策略。拷贝所有的类除了客户端类。确认安全策略在policy.txt后,用下面命令开始服务器端应用。
命令行
>
为了在不同的机器开始客户端应用,你需要拷贝(JAVA-D JAVA.security.policy=policy.txtFileServer
FileInterface.class)和(
FileImpl_Stub.class).
命令行
>
JAVAFileClientfileNamemachineName
相关文章推荐
- 用RMI和CORBA开发JAVA分布式程序(二)
- 用RMI和CORBA开发JAVA分布式程序(二)
- 用RMI和CORBA开发JAVA分布式程序
- 用RMI和CORBA开发JAVA分布式程序
- 用RMI和CORBA开发JAVA分布式程序(二)
- RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序
- 用RMI开发基于Java的企业分布式应用
- 使用Java中RMI机制来实现分布式程序
- RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序
- 使用RMI和CORBA进行分布式java程序设计
- 使用JAVA中RMI机制来实现分布式程序(2)
- RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序
- 使用Java中RMI机制来实现分布式程序
- java分布式对象(RMI+部署使用RMI的程序)
- 使用JAVA中RMI机制来实现分布式程序(2)
- RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序
- Java微信小程序开发_00_资源帖
- 使用Eclipse开发Java程序
- Java程序开发流程(图文解说版)