`
binn.zeng
  • 浏览: 10574 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于整合ext与jsonrpc的一点经验

    博客分类:
  • ajax
阅读更多

      最近在自己的一个小项目中使用了ext+jsonrpc直接调用后台暴露的业务逻辑接口方式,在使用的过程中遇到了不少问题,在这里和大家分享一下:)

      最初在整合jsonrpc的时候遇到个问题,就是它的bridge是和session绑定的,很讨厌这种方式,得要在每个jsp中写那恶心的标签.后来自己找找,发现有个getGlobalBridge可以获取全局bridge,然后自己写了个小工具,让其可以把spring中的业务逻辑bean通过配置文件直接暴露出去.

/**
 * 映射JSONBridge与Spring所管理的对象.
 * 
 * @version 2008.07.04
 * @author bin
 */
public class JSONRPCSpringMappingListener implements ServletContextListener {

	/** 全局资源文件属性名 */
	private static String CONFIGNAME = "JSONRPCSpringMappingConfig";

	public void contextDestroyed(ServletContextEvent sce) {
	}

	public void contextInitialized(ServletContextEvent sce) {
		Properties properties = new Properties();
		WebApplicationContext context = WebApplicationContextUtils
				.getWebApplicationContext(sce.getServletContext());
		JSONRPCBridge bridge = JSONRPCBridge.getGlobalBridge();

		// 读取资源文件
		for (String propFile : sce.getServletContext().getInitParameter(
				CONFIGNAME).split(";")) {
			try {
				if (propFile.startsWith("classpath:")) {
					properties.load(new BufferedInputStream(
							new FileInputStream(new File(sce
									.getServletContext().getRealPath(
											"/WEB-INF/classes/")
									+ "/" + propFile.substring(10)))));
				} else {
					properties.load(new BufferedInputStream(
							new FileInputStream(new File(sce
									.getServletContext().getRealPath("/")
									+ propFile))));
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		// 分析资源文件,注册到全局bridge
		for (Object key : properties.keySet()) {
			String[] values = properties.getProperty(key.toString()).split(",");
			if (values.length > 1) {
				try {
					bridge.registerObject(key, context.getBean(values[0]),
							Class.forName(values[1]));
				} catch (BeansException e) {
					e.printStackTrace();
				} catch (ClassNotFoundException e) {
					e.printStackTrace();
				}
			} else {
				bridge.registerObject(key, context.getBean(values[0]));
			}
		}
	}

}

 这样我就可以在一个属性文件中编辑我要暴露的业务逻辑bean名字以及我需要暴露的接口了.

 

 

接下来在面对store的时候发现没有提供用方法提供数据的store于是自己又写了一小小的自定义store:

RpcStore = function(c) {
	RpcStore.superclass.constructor.call(this, Ext.apply(c, {
		proxy : new RpcProxy({
			rpcfn : c.rpcfn
		}),
		reader : new Ext.data.JsonReader(c, c.fields)
	}));
};
Ext.extend(RpcStore, Ext.data.Store);

RpcProxy = function(c) {
	RpcProxy.superclass.constructor.call(this);
	this.rpcfn = c.rpcfn;
};
Ext.extend(RpcProxy, Ext.data.DataProxy, {
	load : function(params, reader, callback, scope, arg) {
		// params = params || {};
		var result;
		try {
			if (Utils.hasProperty(params)) {
				result = reader.readRecords(this.rpcfn(params));
			}else{
				result = reader.readRecords(this.rpcfn());
			}
		} catch (e) {
			this.fireEvent("loadexception", this, arg, null, e);
			callback.call(scope, null, arg, false);
			return;
		}
		callback.call(scope, result, arg, true);
	}
});
Utils = {};
Utils.hasProperty = function(o){
	for(var p in o){
		return true;
	}
	return false;
}

 这样我在使用后台数据的时候只需要

store = new RpcStore({
	rpcfn : jsonrpc.somebean.somemethod,
	fields : ["somefield"]
});
store.load({params:{something:"something"}});
 

 

分享到:
评论

相关推荐

    JsonRPC, 简单的Json RPC PHP客户机/服务器只.zip

    JsonRPC, 简单的Json RPC PHP客户机/服务器只 JsonRPC PHP客户端和服务器一个简单的json rpc客户机/服务器。 特性仅限 json rpc 2.0服务器支持批处理请求和通知基于身份验证和IP的客户端限制自定义中间件完全单元...

    jsonrpc-frontend:前端应用程序发送 json-rpc 请求进行测试

    标签"前端"、"json"、"测试"、"javascript"、"json-rpc"提供了关于该项目的更多线索。这表明它是使用JavaScript编写的,主要用于前端开发,与JSON数据格式紧密相关,而且关注于测试。在实际应用中,前端开发者可能...

    jsonrpc-c-master 基于 json rpc 1.0 纯C开发的服务端代码和示例

    1. **库文件(Library)**: 实现了JSON-RPC 1.0协议的解析、序列化以及与网络通信相关的函数。 2. **示例服务器(Example Server)**: 展示如何使用库来创建一个基本的JSON-RPC服务端,可能包括处理请求、注册处理...

    Json-RPC的PHP扩展php-ext-JsonRPC.zip

    JsonRPC 2.0 Client and Server ============================= 轻量级 Json-RPC 2.0 客户端和服务端的php扩展,基于 multi_curl epoll的并发客户端,依据[jsonrpc](http://www.jsonrpc.org/)协议规范。 ...

    jsonrpc4j+springboot+maven实例

    <artifactId>jsonrpc4j <version>1.5.0 <groupId>javax.portlet <artifactId>portlet-api <version>2.0 Service代码: @JsonRpcService("/member") public interface MemberService { ... } 因为是基于...

    jsonrpc4j整合Spring+Maven轻量级远程调用

    在这个场景中,我们将讨论如何将JSONRPC4J与Spring框架和Maven构建工具整合,以创建一个高效、灵活的远程服务调用系统。 1. **JSONRPC4J简介** JSONRPC4J提供了简单的方式来实现JSON-RPC规范,该规范定义了客户端...

    jsonrpc测试工具testjsonrpc

    微信应用库可能包含了一系列与微信API交互的接口,而Test-Jsonrpc可以用来验证这些接口是否按规范工作。在解压并导入项目后,开发者需要按照文档或者示例来配置测试用例,然后运行测试以确保微信API的JSON-RPC实现...

    JSONRPC+JSON+Java

    关于JSONRPC的扩展,还可以探讨如何与HTTP协议结合,使用HTTP作为传输层,例如通过POST请求发送JSONRPC请求。此外,可以集成到Spring框架中,利用Spring的依赖注入和AOP特性,简化服务的注册和调用。 在实际应用中...

    jsonrpc-1.0.jar

    在实际开发中,`jsonrpc-1.0.jar` 可能会与其他Java库结合使用,例如HTTP客户端库(如Apache HttpClient)来处理HTTP通信,或者与JSON库(如Jackson或Gson)集成,以便于JSON对象的序列化和反序列化。 总的来说,`...

    JSONRPC

    JSONRPC(JSON Remote Procedure Call)是一种轻量级的远程过程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在JAVA WEB开发中,JSONRPC常被用来实现客户端和服务端之间的通信,尤其在...

    ajax jsonrpc包的使用

    JSON-RPC 是一种轻量级的远程过程调用(Remote Procedure Call)协议,它使用 JSON 格式作为数据交换格式,使得客户端与服务器之间的通信更加简单、高效。在 Web 开发中,AJAX (Asynchronous JavaScript and XML) ...

    JsonRpc.rar_C++ jsonrpc_JSON_JsonRpc.rar_json-rpc _用jsonrpc封装

    这些库提供了方便的API,用于序列化和反序列化C++对象到JSON格式,便于与JSON-RPC通信。 3. **JSON-RPC封装**: 你提到的"JsonRpc"可能是你自己编写的C++库,用于封装JSON-RPC通信过程。这样的封装可能包括以下几...

    jsonrpc所需jar包

    jsonrpc所需要的jar包,包括jackson-annotations-2.3.0.jar,jackson-core-2.5.4.jar,jackson-databind-2.6.2.jar,jsonrpc4j-1.0.jar

    Laravel开发-laravel-jsonrpc

    2. **Laravel 与 JSON-RPC 结合**:Laravel 提供了丰富的中间件和路由系统,可以轻松实现 JSON-RPC 服务器。通过定义 JSON-RPC 路由并创建对应的控制器方法,可以将 JSON-RPC 请求映射到 Laravel 应用的业务逻辑。 ...

    jsonrpc4j-0.27(包含jar,sources,javadoc)

    这使得与JSON-RPC交互变得简单,无需手动进行类型转换。 使用JSONRPC4J时,开发者需要注意的是,由于JSON-RPC协议的特性,远程调用可能会面临延迟、网络中断等问题。因此,在设计系统时,需要考虑到这些因素,如...

    Jsonrpc4j+Spring自动扫描配置

    当我们将Jsonrpc4j与Spring结合使用时,我们可以利用Spring的自动化配置能力来简化Jsonrpc4j的集成过程,从而更高效地构建分布式系统。 首先,让我们深入理解Jsonrpc4j的核心概念。JSON-RPC是一种轻量级的远程调用...

    springboot jsonrpc server

    非常适合java springboot好用的jsonrpc服务。 客户端调用: Content-Type:application/json {"id":"1","jsonrpc":"2.0","method":"multiplier","params":[5,8]} 服务端返回:{ "jsonrpc": "2.0", "id": "1", ...

    scrapy-jsonrpc, Scrapy对使用 JSON RPC控制spider的扩展.zip

    scrapy-jsonrpc, Scrapy对使用 JSON RPC控制spider的扩展 爬虫 jsonrpcScrapy jsonrpc是一个扩展,通过 json rpc控制一个正在运行的爬虫网络爬虫。 服务通过协议提供对Crawler对象的访问。安装使用 pip 安装 scrapy-...

    go-jsonrpc-websocket.rar

    在本文中,我们将深入探讨如何使用Go语言和jsonrpc库来构建一个基于Websocket的客户端,以便与服务端进行交互并处理接收到的通知消息。首先,让我们了解这些关键概念: 1. **Go语言(Golang)**:由Google开发的...

    jsonrpc4j-1.0

    jsonrpc4j-1.0.jar jsonrpc

Global site tag (gtag.js) - Google Analytics