Java RMI是Java编程语言用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。
JAVA RMI极大地依赖于接口。在需要创建一个远程对象时,程序员通过传递一个接口来隐藏底层实现细节。客户端得到的远程对象句柄正好与本地的根代码连接,由后者负责透过网络通信。
服务端
接口类:UserDao.java
package com.inface;
public interface UserDao{
public String getUserList();
public int sum(int a, int b);
}
实现类:UserDaoImpl.java
package com.impl;
import com.inface.UserDao;
public class UserDaoImpl implements UserDao {
public String getUserList() {
return "Hello,Get the user list from database!";
}
public int sum(int a, int b) {
return a+b;
}
}
配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<!-- 实现类 -->
<beans:bean id="userDaoRmi" class="com.impl.UserDaoImpl">
</beans:bean>
<beans:bean id="userSvcExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
<!-- 服务类 (实现类)-->
<beans:property name="service" ref="userDaoRmi"/>
<!-- 服务名 -->
<beans:property name="serviceName" value="userDaoService"/>
<!-- 服务接口 -->
<beans:property name="serviceInterface" value="com.inface.UserDao"/>
<!-- 服务端口 -->
<beans:property name="registryPort" value="9111"/>
</beans:bean>
</beans:beans>
测试类:TestRMI
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.inface.UserDao;
public class TestRMI {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationcontext.xml");
System.out.println("RMI服务伴随Spring的启动而启动了.....");
}
}
客户端
配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<beans:bean id="userDaoProxy" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<beans:property name="serviceUrl" value="rmi://localhost:9111/userDaoService"/>
<beans:property name="serviceInterface" value="com.inface.UserDao"/>
</beans:bean>
</beans:beans>
测试类:(此处要将服务端的接口拷过来)
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.inface.UserDao;
public class TestRMI {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) ctx.getBean("userDaoProxy");
System.out.println(userDao.getUserList());
System.out.println(userDao.sum(145, 487));
}
}