java rmi 使用方法

server

package Server;

import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.registry.LocateRegistry;

import Service.Calc;
import ServiceImpl.CalcImpl;

public class Server{
     // 由于这里测试我们是最终用户,所以直接将异常抛给虚拟机
     public static void main(String[] args) throws Exception
     {
          System.setSecurityManager(new RMISecurityManager()); //权限
          System.setProperty("java.rmi.server.hostname","192.168.1.119");  //指定外网IP

          LocateRegistry.createRegistry(9000);
          //System.setProperty("java.security.policy", "/home/ufo/workspace_java/RMIServer/Calc.policy");
          Calc c = new CalcImpl(); 

          Naming.rebind("rmi://192.168.1.119:9000/Calc", c); 

          System.out.println("rmi server start ...");
     }
}

  

service

package Service;

import java.rmi.*;

public interface Calc extends Remote {
	public int add(int x,int y) throws RemoteException;
}

  service impl

package ServiceImpl;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import Service.Calc;

public class CalcImpl extends UnicastRemoteObject implements Calc{

	/**
	 *
	 */
	private static final long serialVersionUID = 6523564220840187253L;

	public CalcImpl() throws RemoteException {
		super();
		// TODO Auto-generated constructor stub
	}

	@Override
	public int add(int x, int y) {
		// TODO Auto-generated method stub
		System.out.println("add called!");
		return x+y;
	}

}

  

client

package client;

import java.rmi.*;
import java.net.MalformedURLException;
import Service.Calc;

public class Client
{
    // 同样为了方便,直接异常抛出
    public static void main(String[] args) throws Exception
    {
        System.setSecurityManager(new RMISecurityManager());
        try
        {
            // 这里因为是在本地所以省略了地址跟协议,若在网络中的远程方法调用,需要这样写
            // Converter c = (Converter)Naming.lookup("rmi://192.168.0.13/convert");
            Calc c = (Calc)Naming.lookup("rmi://192.168.1.119:9000/Calc");
            int rmb = c.add(10,20);
            System.out.println("add result : " + rmb);
        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
        }
        catch (RemoteException e)
        {
            e.printStackTrace();
        }
        catch (NotBoundException e)
        {
            e.printStackTrace();
        }
    }
}

  

客户端和服务器端都需要制定 类权限文件,即启动时命令  java -Djava.security.policy=./Calc.policy   server.Server[client.Client]

Calc.policy

grant {
permission java.security.AllPermission;
};

客户端还需要有服务的接口声明

时间: 2024-07-31 12:41:28

java rmi 使用方法的相关文章

Java RMI远程方法调用

参考: 利用java-RMI进行大文件传输 RMI远程方法调用的简单方法和实例 RMI是类似RPC的一种远程方法调用协议,比RPC类型的WebService更简单,也可以跨进程访问 先来创建一个model或者javaBean,注意,该类必须实现序列化Serializable  public class Person implements Serializable {     private int id;     private String name;     private int age;

Java学习笔记之RMI远程方法调用

RMI 应用通常有两个分开的程序组成,一个服务端程序和一个客户端程序.一个典型的服务端程序创建一些远程对象,使得对这些远程对象的引用可以被访问,等待客户端调用这些远程对象提供的方法.一个典型的客户端程序获取远程引用,指向一个或者多个服务端上的远程对象,然后调用这些远程对象所提供的方法.通常我们称这为分布式对象应用程序. 3.1 RMI的工作方式 分布式对象应用程序需要做的事情: l 查找(定位)远程对象. 应用程序可以使用各种不同的机制取得远程对象的引用.比如应用程序可以通过 RMI 提供的简单

java.rmi.Naming 远程访问对象方法

RMI:远程方法调用(Remote Method Invocation).能够让在某个java虚拟机上的对象像调用本地对象一样调用另一个java 虚拟机中的对象上的方法. RMI远程调用步骤: 1,客户对象调用客户端辅助对象上的方法 2,客户端辅助对象打包调用信息(变量,方法名),通过网络发送给服务端辅助对象 3,服务端辅助对象将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象 4,调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象 5,服务端辅助对象将结果打包,发

在Ubuntu中启动./jmeter-server报错Server failed to start: java.rmi.RemoteException: Cannot start. ranxf is a loopback address.解决方法

执行失败错误信息: [email protected]:/home/ranxf/apache-jmeter-3.1/bin# ./jmeter-server Writing log file to: /home/ranxf/apache-jmeter-3.1/bin/jmeter-server.log Created remote object: UnicastServerRef [liveRef: [endpoint:[127.0.1.1:45261](local),objID:[-77439

java RMI入门指南

感觉这篇文章不错,直接转了 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体如今它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方式之中的一个.事实上它能够被看作是RPC的Java版本号.可是传统RPC并不能非常好地应用于分布式对象系统.而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信.实现远程对象之间的无缝远程调用. RMI眼下使用Java远程消息交换协议JRMP

JAVA RMI分布式原理和应用

RMI(Remote Method Invocation)是JAVA早期版本(JDK 1.1)提供的分布式应用解决方案,它作为重要的API被广泛的应用在EJB中.随着互联网应用的发展,分布式处理任务也随之复杂起 来,WebService也得到普遍的推广和应用.        在某些方面,例如跨语言平台的分布式应用,RMI就显得力不从心了.在实际的应用中,是采用WebService还是传统的RMI来实现?这是一个需要权衡的问题,两者的比较如下所述:        1. 比起WebService,它

Java RMI之HelloWorld篇

Java RMI之HelloWorld篇 Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方法调用的任何对象必须实现该远程接口. Java RMI不是什么新技术(在Java1.1的时代都有了),但却是是非常重要的底层技术. 大名鼎鼎的EJB都是建立在rmi基础之上的,现在还有一些开源的远程调用组件,其底层技术也是rmi. 在大力鼓吹Web Serv

对JAVA RMI的认识

RMI的定义 RPC (Remote Procedure Call):远程方法调用,用于一个进程调用另一个进程中的过程,从而提供了过程的分布能力. RMI(Remote Method Invocation):远程方法调用,即在RPC的基础上有向前迈进了一步,提供分布式对象间的通讯.允许运行在一个java 虚拟机的对象调用运行在另一个java虚拟机上对象的方法.这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中. RMI的全称宗旨就是尽量简化远程接口对象的调用.

Java RMI 入门案例

Java Remote Method Invocation(Java RMI) 是一个 Java API, 执行远程方法的调用,相当于 Remote Procedure Calls(RPC).Java RMI 支持直接传输序列化的 Java 类,以及分布式的垃圾回收. 案例概况 实现一个简单的 Java RMI 可通过以下四步骤: 1. 启动 rmiregistry 2. 定义服务接口,实现服务接口,通过 rmic 工具创建存根文件( stub ) 3. 实现服务端功能,并启动 4. 实现客户端