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