JKAS RMI

RMI(Remote Method Invocation)远程方法调用。能够让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端java 虚拟机中的对象上的方法

一、配置

[RMI]

;是否启用RMI
rmi_enable=1

;RMI服务所在包名
rmi_package=test.z.rmi

;RMI主机地址

rmi_host=localhost
;RMI端口

rmi_port=9888

 

二、服务命名

服务由接口文件和实现文件构成

接口文件必须继承JkasRmi接口

命名方式为服务名可自行命名,遵循驼峰命名规则

实现名由服务接口名+Impl方式命名

 

如:

Hello为服务接口名

HelloImpl为服务实现命名

 

三、配置服务表

服务表文件位置:data/rmitab

所有服务名必须写入服务文件rmitab,每行一个

如:

Hello

Test

 

四、案例

1、服务端

package test.z.rmi;
import java.rmi.RemoteException;
import org.jkas.core.JkasRmi;
public interface Hello extends JkasRmi {
    public String sayHello(String str) throws RemoteException;
}

 

package test.z.rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class HelloImpl extends UnicastRemoteObject implements Hello {
    public HelloImpl() throws RemoteException {
        super();
    }
    public String sayHello(String str) throws RemoteException {
        return "Hello," + str + "!";
    }
}

 

2、客户端(只支持JAVA)

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import test.z.rmi.Hello;
public class Client {
    public static void main(String args[]) {
        try {
            // 填写服务器ip
            Hello hello = (Hello) Naming.lookup("rmi://localhost:9888/Hello");
            System.out.println(hello.sayHello("Hello"));
        } catch (NotBoundException e) {
   System.out.println(e.toString());
        } catch (MalformedURLException e) {
            e.printStackTrace();
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}