http://dev.csdn.net/article/49/article/49/49078.shtm
解决方案 »
- 高分求-判断当前时候是否到达零点零分
- java通过corba调用C++服务,返回大数据对象时出错
- 看看我的过滤器有什么问题?
- 一个SQL语句问题
- struts2配置文件问题
- oracle 如何选出很多个字段,并且按照其中一个字段不重复?
- telnet 远程连接登陆windows主机 执行 dir命令
- 请帮帮我,如何给text的鼠标变为手行?
- iis5+tomcat5.0.3整合_配置多站点虚拟主机图解手册,绝对第一篇完整手册(PDF)
- 请教:怎样将一个字符串中的XML内容读进JDOM?
- 急:用JAVA实现的socket通信中怎么实现HTTP协议的数据封装啊
- 做了一段时间的JSP开发啦,现在想学EJB,请各位指点一二,要从什么地方入手
给你个我试过的例子前段时间做过一个学生资料管理系统,用的就是RMI,感觉挺好用的.而且还很稳定.唯一不爽的地方就是如果修改了远程方法哪个一个字符,客户端和服务端都需要从新编译才可连接.
B/S结构中,从服务器端S是无法主动向客户端C进行“推”操作的,
但是rmi可以,客户端lookup到一个服务器端的远程对象后,可以
向服务器端注册一个存在于客户端上的远程对象,从而使得服务器
端能够主动向客户端“推”信息,最典型的就是从服务器端诸个更新
客户端界面的的某些状态,注意,这是服务器端发起的。
我猜想JMS大概就是根据这个原理来做的。
实际应用:1、实现一个接口,包含你要实现的方法。2、实现接口方法的类。3、实现服务端程序,端口号绑定一个服务名。4、实现客户端的方法引用,通过服务名寻找到服务,调用已实现的接口方法,完成相应功能。例如:
//接口,Hello.java
import java.rmi.Remote;
import java.rmi.*;
public interface Hello extends java.rmi.Remote {
//rmi应用程序必须继承自java.rmi.Remote
public String sayHello() throws java.rmi.RemoteException ;
//定义可以远程调用的接口
}
//实现接口的方法,HelloImpl.java
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObject implements Hello //实现Hello接口
{
private String name;
public HelloImpl (String s ) throws java.rmi.RemoteException
{
super(); //调用父类的构造函数
name = s;
}
public String sayHello() throws RemoteException
try{
return "Hello world!"; //实现Hello接口定义的方法
}catch (Exception e)
{
System.out.println("HelloImpl.main: an exception occured:");
e.printStackTrace(); //产生异常的话,打印出出错信息
}
}
//实现服务,HelloServer.java
import java.io.*;
import java.rmi.*;
public class HelloServer
{
public static void main (String args [])
{
System.setSecurityManager ( new RMISecurityManager()); //设置RMI程序需要的安全策略
try
{
Hello obj = new HelloImpl("HelloServer"); //生成一个HelloImpl的实例
Naming.rebind("//127.0.0.1:8801/HelloServer", obj); //将这个实例绑定到一个名字上
System.out.println("HelloImpl created and bound in
the registry to the name HelloServer");
}catch(Exception e) {
System.out.println("FileServer: "+e.getMessage());
e.printStackTrace();
}
}
}
//实现客户端调用远端方法,HelloClient.java
import java.rmi.*;
public class HelloClient
{
public static void main(String args[])
{
System.setSecurityManager(new RMISecurityManager() ); //设置RMI需要的安全策略
try
{
Hello obj = (Hello) Naming.lookup("//127.0.0.1:8801/HelloServer");
//从服务端获得一个Hello的远程对象
String message = obj.sayHello(); //远程调用Hello的方法
System.out.println(message); //将输出结果打印
} catch (Exception e)
{
System.out.println("Hello client : an exception occured");
e.printStackTrace(); //若有异常,输出异常信息
}
}
}接下来,编写一个文本文件,内容为:
grant {permission java.security.AllPermission "", "";
};并命名为rmi.policy,为了运行方便,把它与刚刚编写的程序防于同一个文件夹。
运行步骤如下:
1、javac *.java
2、rmic HelloImpl
3、rmiregistry 8801 注意,保留此窗口
4、新开一cmd窗口,在文件目录下运行
java -Djava.security.policy=rmi.policy HelloServer 注意,保留此窗口
5、java HelloClient
显示“Hello World!”。