作者:李东龙
最近做的工程中用的了Spring Rmi技术,用他来实现java项目之间的远程方法调用。使用非常简单,下面给大家一个小demo。
服务端接口:
package com.server;
public interface ServerRmiI {
public String sayHi(String name);
}
服务端实现类:
package com.server;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ServerRmiImpl implements ServerRmiI {
@Override
public String sayHi(String name) {
return "Hi," + name;
}
//这个方法是为了启动发布服务的
public static void main(String[] args) {
System.out.println("服务启动中……");
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:com/server/applicationContext-bean.xml");
context.getBean("serverTest");
System.out.println("服务启动完成");
}
}
有了实现类,之后就可以写配置文件了,通过实现类的main方法,读取配置文件发布 rmi接口。spring配置:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="rmiserver" class="com.server.ServerRmiImpl"/>
<bean id="serverTest" class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="service" ref="rmiserver"/><!-- 接口实现类 -->
<property name="serviceName" value="serverRmiTest"/><!-- 发布的服务名称 -->
<property name="serviceInterface" value="com.server.ServerRmiI"/><!--接口 -->
<property name="registryPort" value="1021"/><!-- 端口号 -->
</bean>
</beans>
有了这些你就可以运行main方法发布服务了!
接下来咱们完成客户端的调用和配置! 在做配置之前,必须要做的就是把服务端的接口拿到客户端。 无论采取那种方式, 打成jar包也好,直接把接口连带路径全部都拿到客户端。 rmi要求客户端的接口地址和服务端的接口地址相同才可以。
客户端的配置:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="clentrmi" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<!-- 服务发布url -->
<property name="serviceUrl" value="rmi://127.0.0.1:1021/serverRmiTest"/>
<!-- 接口地址 -->
<property name="serviceInterface" value="com.server.ServerRmiI"/>
</bean>
</beans>
有了这样的配置之后,客户端就可以直接调用了!
package test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.server.ServerRmiI;
public class TestRmi {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-clent.xml");
ServerRmiI rmiI = (ServerRmiI) context.getBean("clentrmi");
System.out.println(rmiI.sayHi("rmi"));//调用方法
}
}
这样一个rmi的例子就诞生了!