`
nevergiveup0924
  • 浏览: 8699 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

RMI远程调用的跨平台使用Demo

阅读更多
最近项目中用到了RMI 粗略的学习了一下,写了一个跨平台远程调用的demo,供初学者参考!

声明远程调用接口,接口要继承Remote,并且每个接口方法都要抛出RemoteException异常,代码如下:
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IRMITest extends Remote {
    public String sayHello (String name) throws RemoteException ;
}

接口方法的实现:
import java.net.MalformedURLException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

import com.rmi.inf.IRMITest;

@SuppressWarnings("serial")
public class RMITestImpl extends UnicastRemoteObject implements IRMITest {
	
	public RMITestImpl() throws RemoteException{
		
	}

	@Override
	public String sayHello(String name) throws RemoteException {
		System.out.println("test()方法被远程调用:   hello ," + name);
		return "hello," + name + "-------successful";
	}
}

将实现接口生成的stub的文件和接口打成jar包,供客户端使用

服务器端:
import java.net.MalformedURLException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class RMIServer {

	public static void main(String[] args) throws MalformedURLException {

		try {
			System.setProperty("java.rmi.server.hostname", "192.168.1.159");
			String rootpath= Thread.currentThread().getContextClassLoader().getResource("").toString();
			System.setProperty("java.rmi.server.codebase", rootpath);

			Registry registry = LocateRegistry.createRegistry(5858); 
			
			RMITestImpl testImpl = new RMITestImpl();
			registry.rebind("hello", testImpl);
			
			System.out.println("server is ready");
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
}

客户端:

public class RMITestClient {

	public static void main(String[] args) {
		try {
			//在客户端加载策略文件
	        System.setProperty ("java.security.policy", "security.policy");
	        System.setSecurityManager(new RMISecurityManager());
			IRMITest test = (IRMITest)Naming.lookup("rmi://192.168.1.159:5858/hello");
			System.out.println("调用远程方法:" + test.sayHello("world"));
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		
	}
}


策略文件
grant {
	permission java.net.SocketPermission "*:1099-65535", "connect,accept,resolve";
};


分享到:
评论

相关推荐

    Java RMI(远程方法调用)Demo

    Java RMI,全称为Remote Method Invocation,是Java平台上的一个...对于初学者,通过实践Java RMI Demo可以深入理解远程方法调用的概念和流程。在实际项目中,根据需求可能会选择更为复杂但功能强大的分布式系统框架。

    RMI 跨平台调用的demo

    这个"RMI跨平台调用的demo"展示了如何在Windows客户端与Linux服务器端之间建立RMI连接并执行远程方法。 首先,我们要理解RMI的基本架构。RMI系统包括两部分:客户端(Client)和服务器端(Server)。客户端通过RMI...

    RMI-demo.zip_DEMO_rmi

    客户端是通过RMI调用远程服务器上的方法的程序。它需要知道服务器的地址和暴露的接口来建立连接。 3. **server**:同样是一个目录,很可能包含了服务器端的应用程序代码和配置。服务器端是提供RMI服务的一方,它...

    rmi-demo.zip_DEMO_Java RMI_rmi

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行方法调用,仿佛对象都在同一台机器上。本示例"rmi-demo.zip"是一个关于Java RMI的演示...

    RMI+EHCACHE Demo

    4. **客户端代码**:连接到RMI服务器,获取远程对象引用,通过RMI调用远程方法,并可能涉及Ehcache的使用,如缓存查询或更新操作。 5. **异常处理**:处理可能出现的网络、序列化或缓存相关异常。 6. **测试用例**:...

    Java RMI demo多对象

    Java Remote Method Invocation(RMI)是Java平台上的一个特性,它允许在分布式环境中进行对象间的交互,即在一台机器上的对象可以调用另一台机器上对象的方法,仿佛它们是在同一台机器上一样。这个特性使得Java成为...

    Spring RMI小例子

    - 运行客户端,通过RMI调用服务器上的方法,验证通信是否成功。 在这个小例子中,我们可能会看到如下文件: - `RemoteInterface.java`:远程接口定义。 - `RemoteImpl.java`:远程接口的实现。 - `ServerConfig....

    ehcache rmi集群demo

    4. **集群通信**:在需要访问缓存时,节点通过RMI调用其他节点的接口方法,实现跨节点的数据操作。 5. **同步策略**:为了保持数据一致性,可能需要实现一种同步策略,如基于版本号的乐观锁或者分布式锁机制。 6. ...

    基于JAVA RMI的聊天室

    Java Remote Method Invocation(RMI)是Java平台提供的一种用于在分布式环境中调用远程对象的方法。在这个“基于JAVA RMI的聊天室”项目中,开发者利用RMI技术构建了一个简单的多用户交互系统,让用户可以在不同的...

    RMI的简单完整例子

    - **跨平台**:由于Java的“一次编写,到处运行”特性,RMI也适用于不同操作系统。 通过这个RMI的完整demo,初学者可以深入理解RMI的工作原理,逐步掌握如何创建、运行和测试RMI应用程序。这是一个很好的实践项目...

    rmi和rpc Demo

    远程方法调用(Remote Method Invocation, RMI)与远程过程调用(Remote Procedure Call, RPC)是两种在分布式系统中实现跨网络通信的关键技术。它们允许一个程序在一台计算机上执行操作,这些操作实际上是在另一台...

    基于Spring+hibernate+mysql+rmi+swing的登录Demo

    RMI(Remote Method Invocation),即远程方法调用,允许Java对象在不同的Java虚拟机之间进行通信。在登录Demo中,RMI可能被用来实现客户端与服务器端的交互,使得用户可以在远程机器上登录系统,查看或修改用户信息...

    RMI demo

    - 跨平台性:基于Java的特性,RMI可以在任何支持Java的平台上运行。 - 异常处理:RMI内置了对网络异常的处理机制,简化了异常处理代码。 缺点: - 性能:相比其他协议(如HTTP、Web服务),RMI的性能可能较低,因为...

    基于.net TCP双向监听RMI组件Demo

    总的来说,.NET TCP双向监听RMI组件Demo是一个实用的教学资源,它帮助开发者理解并掌握.NET Remoting的使用,特别是利用TCP协议实现高效稳定的远程方法调用。通过深入研究和实践,开发者可以构建出自己的分布式应用...

    hessian demo 包括服务端和客户端

    Hessian是一种高效的RPC(Remote Procedure Call)协议,它允许Java应用程序之间进行远程方法调用,类似于RMI(Remote Method Invocation)。Hessian由Caucho公司开发,它的主要优点在于序列化效率高,能够将Java...

    (转)用c++实现java的rmi服务

    在IT行业中,远程方法调用(Remote Method Invocation,简称RMI)是一种允许程序在不同的网络节点上执行对象方法的技术。Java RMI是Java平台...同时,这也是一种跨语言通信的实践,对于提升跨平台开发能力大有裨益。

    java中的rmi技术

    7. **异常处理**:RMI调用可能会抛出`java.rmi.RemoteException`和其他网络相关的异常,需要适当地捕获和处理。 在实际应用中,RMI常常与EJB(Enterprise JavaBeans)和JMS(Java Message Service)等其他Java企业...

    CXF+RMI+HESSIAN

    在这个过程中,文件“JdbcDemo”可能是演示如何使用CXF、RMI和Hessian来实现数据库操作的示例代码。它可能包含了服务接口定义、服务实现、CXF配置、客户端代理生成和调用的代码片段。通过阅读和分析这个示例,你可以...

    Excavator(挖掘机)-Java RMI

    Java RMI是Java平台的核心特性之一,它提供了跨网络的远程对象交互的能力。通过RMI,开发者可以创建分布式应用程序,使得不同计算机上的对象能够互相调用方法。RMI主要包括以下组件: - **远程接口(Remote ...

Global site tag (gtag.js) - Google Analytics