阅读:3230次   评论:0条   更新时间:2011-05-26    
bbossgroups 3.2 即将发布。除对所有的子项目所做问题修复和功能改进外,新增加rmi服务组件发布和rmi客服端组件获取功能,本文提前对该功能做一个简单的介绍。

RMI服务的发布规则 Top

和bbossgroups的中webservice服务发布方法一样,rmi服务的发布也有以下规则:
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服务的注册方法 Top

当rmi服务在配置文件中配置完毕,接下来要做的事情就是将系统中所有配置好的rmi服务注册和发布到rmi注册表中以便客服端能够调用,本段介绍如何加载和启动已经配置好的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服务器组件接口和实现实例 Top

本段介绍rmi服务器组件接口和实现实例
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组件服务端和客服端配置以及调用示例 Top

1.配置服务,通过 rmi:address属性指定发布服务的唯一地址:
<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 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics