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();
}
}
}