浏览 1262 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-29
最后修改:2011-12-14
bbossgroups 3.4及后续版本在原有的rpc功能基础上做了非常大的改进,bboss rpc客户端可以类似于webservice和rmi的客户端方式对bboss aop框架、mvc框架中配置的任何组件发起远程调用。为了支撑这个功能,3.4版中新增了组件:
org.frameworkset.spi.ClientProxyContext 该组件提供了以下能力而在本地无需服务组件的实现类和配置文件,只需接口以及接口依赖的相关的类即可: 1.对mvc容器中配置的组件的远程调用 2.对其他类型容器中配置的组件的远程调用 三个主要的接口如下: 1.获取MVC容器中的服务组件调用代理 /** * 获取MVC容器中的服务组件调用代理 * @param <T> 泛型类型 * @param name 服务组件访问地址 * @param type 组件接口类型,使用泛型来实现接口的自动类型转换 * @return 服务组件调用代理 */ public static <T> T getWebMVCClientBean(String name,Class<T> type) 2.获取ApplicationContext类型容器中的服务组件调用代理 /** * 获取ApplicationContext类型容器中的服务组件调用代理 * @param <T> 泛型类型 * @param context 容器标识,一般是容器初始化的配置文件路径 * @param name 服务组件访问地址 * @param type 组件接口类型,使用泛型来实现接口的自动类型转换 * @return 服务组件调用代理 */ public static <T> T getApplicationClientBean(String context,String name,Class<T> type) 3.获取DefaultApplicationContext类型容器中的服务组件调用代理 /** * 获取DefaultApplicationContext类型容器中的服务组件调用代理 * @param <T> 泛型类型 * @param context 容器标识,一般是容器初始化的配置文件路径 * @param name 服务组件访问地址 * @param type 组件接口类型,使用泛型来实现接口的自动类型转换 * @return 服务组件调用代理 */ public static <T> T getSimpleClientBean(String context,String name,Class<T> type) 每种接口的使用实例如下,全部基于http协议实现: 1.获取mvc容器中组件的远程服务调用接口,mvc容器由服务端mvc框架自动初始化 ClientInf mvcinf = ClientProxyContext.getWebMVCClientBean( "(http::localhost:8080/bboss-mvc/http.rpc)" + "/client.proxy.demo?user=admin&password=123456", ClientInf.class); mvcinf.helloworld("aaaa,多多"); 2.获取DefaultApplicationContext类型容器中的服务组件调用代理 //服务器端容器org/frameworkset/spi/ws/webserivce-modules.xml必须是以下方式创建 // DefaultApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/spi/ws/webserivce-modules.xml"); ClientInf simpleinf = ClientProxyContext.getSimpleClientBean("org/frameworkset/spi/ws/webserivce-modules.xml",//容器标识 "(http::localhost:8080/bboss-mvc/http.rpc)/client.proxy.simpledemo?user=admin&password=123456",//服务组件地址 ClientInf.class);//服务接口 simpleinf.helloworld("aaaa,多多"); 3.获取服务器端默认容器中组件的远程服务调用接口 ClientInf defaultinf = ClientProxyContext.getApplicationClientBean( "(http::localhost:8080/bboss-mvc/http.rpc)" + "/client.proxy.simpledemo?user=admin&password=123456", ClientInf.class); defaultinf.helloworld("aaaa,多多"); 4.http协议补充说明 服务端必须在web.xml文件中配置以下servlet <servlet> <display-name>RPCHttpServLet</display-name> <servlet-name>RPCHttpServLet</servlet-name> <servlet-class>org.frameworkset.spi.remote.http.RPCHttpServLet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RPCHttpServLet</servlet-name> <url-pattern>*.rpc</url-pattern> </servlet-mapping> 5.http协议串说明 http::localhost:8080/bboss-mvc/http.rpc 协议部分 ip部分 port部分 应用上下文 匹配rpcservlet串 我们用()将上面的url串括起来,然后再添加服务端组件标识和认证参数user和password: /client.proxy.simpledemo?user=admin&password=123456 client.proxy.simpledemo为服务端组件,?user=admin&password=123456中的user参数就是认证账户,password参数就是认证口令,如果服务开启了认证机制,就需要在客户端设置这两个参数,反之无需配置。 我们可以在服务组件方法中通过org.frameworkset.spi.security.SecurityContext获取客户端传递过来的账户信息,静态方法: SecurityContext securityContext = SecurityContext.getSecurityContext(); String user = securityContext.getUser(); String password = securityContext.getPassword(); 6.通过配置文件来配置客户端调用组件的实例 可以通组件工厂模式来在aop配置文件中配置一个客户端代理组件,我们这里是以http协议为列,从mvc容器中获取服务client.proxy.demo的客户端调用实例。 先看配置文件: org/frameworkset/spi/remote/clientproxy/consumer.xml consumer.xml文件的内容如下: <properties> <property name="clientservice" factory-class="org.frameworkset.spi.ClientProxyContext" factory-method="getWebMVCClientBean"> <construction> <property name="servicaddress" value="(http::localhost:8080/bboss-mvc/http.rpc)/client.proxy.demo?user=admin&password=123456"/> <property name="serviceclass" value="org.frameworkset.spi.remote.clientproxy.ClientInf"/> </construction> </property> </properties> consumer.xm中配置了名称为clientservice的组件,该组件实例通过代理类org.frameworkset.spi.ClientProxyContext的静态方法getWebMVCClientBean来创建,通过构造器construction指定了getWebMVCClientBean方法需要的两个参数: 参数一 服务地址信息 (http::localhost:8080/bboss-mvc/http.rpc)/client.proxy.demo?user=admin&password=123456 参数二 服务接口类信息 org.frameworkset.spi.remote.clientproxy.ClientInf 这样我们就可以加载consumer.xml文件创建一个DefaultApplicationContext类型的容器,然后获取到组件的客户端调用实例,代码如下: //定义容器对象 DefaultApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/spi/remote/clientproxy/consumer.xml"); //获取客户端组件实例 ClientInf client = context.getTBeanObject("clientservice", ClientInf.class); //发起远程方法调用 client.helloworld("aaa"); 通过这种方式,我们就可以把之前通过代码调用ClientProxyContext创建客户端代理转换为通过aop容器管理创建客户端调用代理模式,这两种方式是等价的。 7.总结 本文介绍了通过ClientProxyContext来获取bboss中三种不同类型容器(mvc容器、独立容器、默认容器)中配置的组件客户端调用代理的方法,并以http协议为列介绍了使用方法;介绍了客户端如何传递认证信息的方法;介绍了协议串的配置方法和含义;同时也对比了通过代码直接创建代理和通过aop配置文件创建代理的两种方式,实际情况可以任意选择。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |