阅读:3360次
评论:0条
更新时间:2011-05-26
bbossgroups 3.2 即将发布。除对所有的子项目所做问题修复和功能改进外,新增加rmi服务组件发布和rmi客服端组件获取功能,本文提前对该功能做一个简单的介绍。
RMI服务的发布规则
和bbossgroups的中webservice服务发布方法一样,rmi服务的发布也有以下规则:
1.配置在mvc框架控制器配置文件中的rmi服务将被自动发布,无需额外配置
2.在独立的组件管理容器中发布的rmi服务,需将该容器对应的根配置文件添加到rmi服务的部署装配文件中,例如:
组件容器文件:
org/frameworkset/spi/remote/rmi/rmi.xml
那么需要将org/frameworkset/spi/remote/rmi/rmi.xml配置在装配文件:
org/frameworkset/spi/rmi/rmi-assemble.xml中:
1.配置在mvc框架控制器配置文件中的rmi服务将被自动发布,无需额外配置
2.在独立的组件管理容器中发布的rmi服务,需将该容器对应的根配置文件添加到rmi服务的部署装配文件中,例如:
组件容器文件:
org/frameworkset/spi/remote/rmi/rmi.xml
<properties> <property name="rmi_service_test" rmi:address="rmi_service_test" class="org.frameworkset.spi.remote.rmi.RMIServiceTest"/> </properties>
那么需要将org/frameworkset/spi/remote/rmi/rmi.xml配置在装配文件:
org/frameworkset/spi/rmi/rmi-assemble.xml中:
<properties> <!-- rmi服务组件装配文件,每个文件作为单独的容器来处理,这里装配的是classpath上下文中需要独立加载的rmi服务 mvc框架中需要加载的rmi服务只需要在对应的组件中标注rmi:address即可,当rmi引擎启动时会加载这两种模式下的 所有rmi服务. --> <property name="rmi.services.modules"> <array componentType="String"> <property value="org/frameworkset/spi/remote/rmi/rmi.xml"/> </array> </property> <!-- 本组件依赖于bboss-mvc.jar --> <property name="webapplicationcontext" factory-class="org.frameworkset.web.servlet.support.WebApplicationContextUtils" factory-method="getWebApplicationContext"/> </properties>
RMI服务的注册方法
当rmi服务在配置文件中配置完毕,接下来要做的事情就是将系统中所有配置好的rmi服务注册和发布到rmi注册表中以便客服端能够调用,本段介绍如何加载和启动已经配置好的rmi服务。
rmi服务的发布和注册和webservice服务的发布有点不同,webservice服务直接通过web.xml中配置webservice的处理servlet即可,无需额外的程序来管理,rmi服务需要额外的程序来管理和注册,用户只需要在程序中调用以下方法:
或者在web应用的部署描述文件web.xml中添加rmi注册servlet即可:
需要注意的是,rmi服务注册servlet启动顺序必须在mvc dispatchservlet之后,这样才能把mvc框架中配置的rmi服务注册成功。
rmi服务的发布和注册和webservice服务的发布有点不同,webservice服务直接通过web.xml中配置webservice的处理servlet即可,无需额外的程序来管理,rmi服务需要额外的程序来管理和注册,用户只需要在程序中调用以下方法:
org.frameworkset.spi.remote.rmi.RMIAssemble.loadAllRMIService();
或者在web应用的部署描述文件web.xml中添加rmi注册servlet即可:
<servlet> <display-name>rmi</display-name> <servlet-name>rmi</servlet-name> <servlet-class>org.frameworkset.spi.remote.rmi.RMIRegistServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet>
需要注意的是,rmi服务注册servlet启动顺序必须在mvc dispatchservlet之后,这样才能把mvc框架中配置的rmi服务注册成功。
RMI服务器组件接口和实现实例
本段介绍rmi服务器组件接口和实现实例
1.接口
2.组件实现
1.接口
package org.frameworkset.spi.remote.rmi; import java.rmi.RemoteException; /** * <p>Title: RMIServiceTestInf.java</p> * <p>Description: </p> * <p>bboss workgroup</p> * <p>Copyright (c) 2007</p> * @Date 2011-5-18 下午05:36:07 * @author biaoping.yin * @version 1.0 */ public interface RMIServiceTestInf extends java.rmi.Remote{ public String sayHello(String name) throws RemoteException; }
2.组件实现
package org.frameworkset.spi.remote.rmi; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; /** * <p>Title: RMIServiceTest.java</p> * <p>Description: </p> * <p>bboss workgroup</p> * <p>Copyright (c) 2007</p> * @Date 2011-5-18 下午05:09:21 * @author biaoping.yin * @version 1.0 */ public class RMIServiceTest extends UnicastRemoteObject implements RMIServiceTestInf{ public RMIServiceTest() throws RemoteException { super(); } public String sayHello(String name) throws RemoteException { System.out.println("你好," + name); return "from server:你好," + name; } }
RMI组件服务端和客服端配置以及调用示例
1.配置服务,通过 rmi:address属性指定发布服务的唯一地址:
1.1 服务器port的指定在rmi协议配置文件中:
/bbossaop/resources/org/frameworkset/spi/manager-rpc-rmi.xml
2.rmi客服端组件配置和获取:
2.1 配置
2.2 获取和使用:
<property name="rmi_service_test" rmi:address="rmi_service_test" class="org.frameworkset.spi.remote.rmi.RMIServiceTest"/>
1.1 服务器port的指定在rmi协议配置文件中:
/bbossaop/resources/org/frameworkset/spi/manager-rpc-rmi.xml
<!-- 服务器绑定端口 --> <property name="connection.bind.port" value="1099" />
2.rmi客服端组件配置和获取:
2.1 配置
<property name="rmi_service_client_test" factory-class="org.frameworkset.spi.remote.rmi.RMIUtil" factory-method="lookupService"> <construction> <property name="servicaddress" value="//172.16.25.108:1099/rmi_service_test"/> </construction> </property>
2.2 获取和使用:
BaseApplicationContext context ; @Before public void init() { context = ApplicationContext.getApplicationContext("org/frameworkset/spi/remote/rmi/rmi-client.xml"); } @Test public void test() throws RemoteException { RMIServiceTestInf test = (RMIServiceTestInf)context.getBeanObject("rmi_service_client_test"); System.out.println(test.sayHello("多多")); }
评论 共 0 条 请登录后发表评论