RMI的使用
来源:互联网 发布:excel数据分类汇总ppt 编辑:程序博客网 时间:2024/05/16 17:22
RMI(Remote Method Invocation)系统由以下几个部分组成:
运行过程服务的服务器
需要过程服务的客户端程序
过程服务的接口定义
远程服务的实现
RMI命名服务,使得客户端可以发现远程服务
示例程序:
远程接口:
Task.java
import java.io.Serializable;
public interface Task extends Serializable {
Object execute();
}
Compute.java
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Compute extends Remote {
Object executeTask(Task t)throws RemoteException;
}
服务器:ComputeEngine.java
import java.rmi.*;
import java.rmi.server.*;
//import compute.*;
public class ComputeEngine extends UnicastRemoteObject implements Compute{
public ComputeEngine() throws RemoteException
{
super();
}
public Object executeTask(Task t)
{
return t.execute();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
if (System.getSecurityManager() == null)
{
System.setSecurityManager(new RMISecurityManager());
}
String name = "rmi://162.105.146.223/Compute";
try {
Compute engine = new ComputeEngine();
Naming.rebind(name, engine);
System.out.println("ComputeEngine bound");
} catch (Exception e)
{
System.err.println("ComputeEngine exception: "
+ e.getMessage());
e.printStackTrace();
}
}
}
客户端:
Add.java
public class Add implements Task {
//int a,b;
//public Add(int i, int j)
public Add()
{
//this.a = i;
//this.b = j;
}
public Object execute() {
// TODO Auto-generated method stub
return 2;
}
}
ComputeAdd.java
import java.rmi.*;
//import compute.*;
public class ComputeAdd {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
if (System.getSecurityManager() == null)
{
System.setSecurityManager(new RMISecurityManager());
}
try {
String name = "//162.105.146.223" + "/Compute";
Compute comp = (Compute) Naming.lookup(name);
int a,b;
a = 5;
b = 10;
Add task = new Add();
int result = (Integer) (comp.executeTask(task));
System.out.println(result);
} catch (Exception e) {
System.err.println("ComputeAdd exception: " + e.getMessage());
e.printStackTrace();
}
}
}
运行步骤:
编译接口:
javac compute/Compute.java compute/Task.java
jar cvf compute.jar compute/*.class
将编译好的compute.jar放到apache目录下
编译服务器端:
javac -cp "D:/Program Files/apache2.2/htdocs/classes/compute.jar"
engine/ComputeEngine.java
策略文件:
policy.txt
1.start rmiregistry
2.start java -cp e:/zhangyan/java/compute;"d:/Program Files/apache2.2/htdocs/classes/compute.jar" -Djava.rmi.server.codebase=http://127.0.0.1/classes/compute.jar -Djava.rmi.server.hostname=localhost -Djava.security.policy=server.policy engine.server
3.java -cp e:/zhangyan/java/compute;"d:/Program Files/apache2.2/htdocs/classes/compute.jar" -Djava.rmi.server.codebase=http://127.0.0.1/classes/ -Djava.security.policy=server.policy client.ComputeAdd localhost
- RMI的使用
- RMI的使用
- spring rmi 的使用
- Java RMI的使用
- java-RMI的使用
- Eclipse RMI plugin的使用
- java RMI的简单使用
- 使用java RMI的步骤
- java中RMI的使用
- java分布式对象(RMI+部署使用RMI的程序)
- rmi使用
- RMI使用
- spring3.0.5的rmi集成使用
- java 分布式RMI的简单使用
- 使用Java的RMI完成远程调用
- 使用RMI 编译器生成stub的class
- Java RMI从基础例子到使用securityManager再到ssl的RMI在到spring的RMI
- Java RMI(2):项目中使用RMI
- ssh介绍
- 重构概述——摘自《重构》
- 如何知道可执行文件是32-bit还是64-bit
- 成熟男人必看的5个故事
- FLV视频文件的转换
- RMI的使用
- PHP缓存技术介绍!
- 关于PHP操作文件的一些FAQ总结
- 明白了这十个故事,你也就参悟了人生
- 今天开始写文章
- BCB里用MCI实现简单的录音功能(摘录自BCB Demo)
- 发现BCB6的TComInterface实现有点问题
- 红本本
- adapter