作者:李東龍
最近做的工程中用的了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的例子就誕生了!