1、新建J2EE项目A、B,在A、B项目中建立com.A.xfire包
2、项目A、B中导入spring-2.5.6.jar
3、在A、B项目中使用建立接口类com.A.xfire.XfireFacade.java
package com.A.xfire;
/**
* XfireFacade接口类
*/
public interface XfireFacade {
public void xfireMothod();
}
4、在A项目中建立com.A.xfire.impl.XfireFacadeImpl实现接口类
package com.A.xfire.impl;
import com.A.xfire.XfireFacade;
public class XfireFacadeImpl extends JdbcDaoSupportimplements XfireFacade {
public void xfireMothod(){
/** 操作数据库 */
}
}
5、项目A中新建applicationContext-xfire.xml
6、在项目A中新建的applicationContext-xfire.xml文件中添加以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean id="xfireFacade" class="com.A.xfire.impl.XfireFacadeImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
<property name="port" value="1199"></property>
</bean>
<bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="serviceName" value="AXfireFacade"/>
<property name="service" ref="xfireFacade"/>
<property name="serviceInterface" value="com.A.xfire.XfireFacade"/>
<!-- <property name="registryPort" value="1199"/> -->
<property name="registry" ref="registry"></property>
</bean>
</beans>
7、在B项目中使用建立客户端连接,新建com.A.xfire.BXfireClient.java
package com.A.xfire;
import org.springframework.remoting.rmi.RmiProxyFactoryBean;
import com.A.xfire.XfireFacade;
public class BXfireClient {
private static XfireFacade xfireFacade;
private static String bServiceUrl = "rmi://192.168.1.1:1199";
public static String getBServiceUrl() {
return bServiceUrl;
}
public static void setBServiceUrl(String bServiceUrl) {
BXfireClient.bServiceUrl = bServiceUrl;
}
public static XfireFacade findBXfireFacade() {
if(xfireFacade == null) {
xfireFacade = registerXfireFacade();
}
return xfireFacade;
}
/**
* 查找xfire服务
*/
public static XfireFacade registerXfireFacade() {
RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean();
rmiProxyFactoryBean.setServiceInterface(XfireFacade.class);
rmiProxyFactoryBean.setServiceUrl(getBServiceUrl());
rmiProxyFactoryBean.setLookupStubOnStartup(false);
rmiProxyFactoryBean.setRefreshStubOnConnectFailure(true);
try {
rmiProxyFactoryBean.afterPropertiesSet();
} catch (RuntimeException e) {
e.printStackTrace();
}
if(rmiProxyFactoryBean.getObject() instanceof XfireFacade) {
xfireFacade = (XfireFacade) rmiProxyFactoryBean.getObject();
return xfireFacade;
}
return null;
}
}
8、注意如果接口有实体,实体类一定要implements Serializable
private static final long serialVersionUID = 1L;
9、在B项目其它类里调用RMI如下:
BXfireClient.findBXfireFacade().xfireMothod();