`
ahua186186
  • 浏览: 562008 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

GAEA-58服务端初始化生成的服务“动态代理类”和“代理工厂类”

 
阅读更多
以服务实现类NewsService为例:


思考:不明白作者为什么要这样生成服务代理类,根据服务名用反射获取服务实例不行吗?性能貌似也不低啊。 还是说为了热部署才这么做的,我能想到的只有这么个需求才会这么做。



ProxyFactoryCreater类动态生成的代码:


//动态代理工厂类

public class  ProxyFactory1439795760927 implements IProxyFactory{

	private IProxyStub proxyNewsServicedemo =null;
	private IProxyStub demo1 =null;
	private IProxyStub demo2 =null;
	
	public void IProxyFactory(java.util.List $1);
	{	
		proxyNewsServicedemo=(com.bj58.spat.gaea.server.contract.context.IProxyStub)$1.get(0);
		demo1=(com.bj58.spat.gaea.server.contract.context.IProxyStub)$1.get(1);
		demo2=(com.bj58.spat.gaea.server.contract.context.IProxyStub)$1.get(2);
	}
	
	//动态生成代理工程的getProxy方法
	public IProxyStub getProxy(String lookup) {
	
		if(lookup.equalsIgnoreCase("NewsService"))
			{
				return proxyNewsServicedemo;
			}
			
			if(..){
				..
			}
			if(..){
				..
			}
			if(..){
				..
			}
			return null;
		}
	}

}






ProxyClassCreater类动态生成的代码:




//动态代理类
						
						
public class NewsServiceProxyStub1439795944146{			
	/******************服务实现类对象start*************************/
	private static INewsService serviceProxy = new NewsService();
	
	/******************服务实现类对象end*************************/
	
	/**********************具体的服务调用start********************************************/
	public GaeaResponse getNewsByID(GaeaContext context) ServiceFrameException 
	{
		IConvert convert = ConvertFacotry.getConvert(context.getGaeaRequest().getProtocol());
		RequestProtocol request = (RequestProtocol)context.getGaeaRequest().getProtocol().getSdpEntity();
		java.util.List listKV = request.getParaKVList();
		if(listKV.size() == 1 && (((KeyValuePair)listKV.get(0)).getKey().toString().equalsIgnoreCase("int")|| ((KeyValuePair)listKV.get(0)).getKey().toString().equalsIgnoreCase("Integer")))
		
		{
						
						java.util.List listOutPara = new java.util.ArrayList();
						int arg0 = 0;
						try {
							arg0 = convert.convertToint(((KeyValuePair)listKV.get(0)).getValue());
						} 
						catch (Exception e) 
						{
						throw new ServiceFrameException("method:NewsServiceProxyStub1439546304065.getNewsByID--msg:parse gaeaRequest error", 
							context.getChannel().getRemoteIP(), 
							context.getChannel().getLocalIP(), 
							context.getGaeaRequest().getProtocol().getSdpEntity(), 
							com.bj58.spat.gaea.server.util.ErrorState.ParaException, e);
						
						}
						
						
						try {
							entity.News returnValue = serviceProxy.getNewsByID(arg0);
							return new com.bj58.spat.gaea.server.contract.context.GaeaResponse(returnValue, listOutPara);
						} 
						catch (Exception e) {
							throw new ServiceFrameException("method:NewsServiceProxyStub1439546304065.getNewsByID--msg:invoke real service error", 
							context.getChannel().getRemoteIP(), 
							context.getChannel().getLocalIP(),
							context.getGaeaRequest().getProtocol().getSdpEntity(),
							com.bj58.spat.gaea.server.util.ErrorState.ServiceException, e);
						  }
		}
		 
		throw newServiceFrameException("method:NewsServiceProxyStub1439546304065.getNewsByID--msg:not fond method error", 
	 	context.getChannel().getRemoteIP(),
	  context.getChannel().getLocalIP(), 
	  context.getGaeaRequest().getProtocol().getSdpEntity(), 
	  com.bj58.spat.gaea.server.util.ErrorState.NotFoundMethodException, null);
		  
	}
		//............省去多个服务

		/**********************具体的服务调用end ********************************************/
	public GaeaResponse invoke(GaeaContext context) throws ServiceFrameException 
	{
		String methodName = ((RequestProtocol)context.getGaeaRequest().getProtocol().getSdpEntity()).getMethodName();
		if(methodName.equalsIgnoreCase("getNewsByID"))
		{
			return getNewsByID(context);
		}
		if(methodName.equalsIgnoreCase("getNewsByCateID"))
		{
			return getNewsByCateID(context);
		}
		
		if(..){
			..
		}
		if(..){
			..
		}
		if(..){
			..
		}
		if(..){
			..
		}
		
		throw new ServiceFrameException("method:NewsServiceProxyStub1439547291816.invoke--msg:not found method ("+methodName+")", 
		context.getChannel().getRemoteIP(), 
		context.getChannel().getLocalIP(),
		context.getGaeaRequest().getProtocol().getSdpEntity(),
		com.bj58.spat.gaea.server.util.ErrorState.NotFoundMethodException, null);
	
	}

}
分享到:
评论

相关推荐

    PyPI 官网下载 | gaea-0.1.15.tar.gz

    《PyPI官网下载:gaea-0.1.15.tar.gz——深入解析Python库的构建与发布》 PyPI(Python Package Index)是Python世界中的一个核心组成部分,它是Python开发者发布自己创建的软件包的地方,让全球的Python用户能够...

    Gaea 服务通讯框架

    在58code-Gaea-4c84011这个压缩包中,包含了Gaea框架的源代码和其他相关资源,这对于开发者深入理解Gaea的内部机制、进行二次开发或者调试优化提供了极大的便利。通过阅读和学习这些源码,我们可以了解到Gaea是如何...

    Gaea - Object Database Viewer-开源

    Gaea支持JDO标准,意味着它可以处理各种JDO兼容的对象数据库,提供透明的数据持久化服务,使开发人员能够专注于业务逻辑,而不是底层数据库操作。 **动态执行实例和类结构**: 这一特性表明Gaea允许用户在运行时...

    Python库 | gaea-1.6.6.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:gaea-1.6.6.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | gaea-0.1.22.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:gaea-0.1.22.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    gaea 和JDBC z整合

    当我们谈论“gaea 和 JDBC 整合”时,意味着我们需要将GAEA的分布式服务框架与JDBC驱动程序结合,以便在GAEA上实现对数据库的高效、灵活的操作。 GAEA框架的设计目标是提供一种可扩展、高可用性和高性能的解决方案...

    gaea:自动生成工具,基于md数据字典生成SQL语句,后台管理系统页面等

    生成api项目gaea [项目类型] create -n apiserver //创建基础的 api 项目➜ gaea api create -n ./apiserver//创建带登录和菜单组件的api项目(常用)➜ gaea api create -login " http://192.168.5.93:6688|B128F...

    gaea:Gaea是一个基于Gin的Web框架,参考gin https

    文档安装安装脚手架通过脚手架可一键创建Gaea模板的api项目生成框架此处以“ myproject”为项目名称$ rigger new api myproject正克隆到 ' /winshare/go/src/myproject ' ...myprojec项目已创建完成, 使用: cd /...

    Gaea:Gaea是一个mysql代理,由小米b2c-dev团队开发

    简介Gaea是小米中国区电商研发部研发的基于MySQL协议的数据库中间件,目前在小米商城大陆和海外得到广泛使用,包括订单,社区,活动等多项业务。Gaea支持分库分表,sql路由,读写分离等基本特性,更多详细功能可以...

    灰度图生成地形导出obj模型

    直接raw格式灰度图生成地形,先创建地形,属性设置栏,导入灰度图,Terrain-Export To Obj ,选择保存位置即可导出,灰度图片png加贴图创建地形,导出obj格式,运行状态下点击界面按钮等待即可保存

    GAEA词库释义.zip

    此文件中包含有GAEA软件各个功能的释义,有助于你更好、更方便、更快捷地学习并掌握GAEA软件各个功能点。

    《58同城架构演进与优化二三事》沈剑

    - **自研系统**:开发了专门的图片存储系统,以及一套完整的开发框架(包括Web框架Argo和服务框架Gaea),大大降低了站点和服务的开发成本。 #### 四、更大流量挑战及解决方案 - **面临的新挑战**:如何应对更高的...

    服务通讯框架Gaea.zip

    Gaea是服务通讯框架(Service Communication Framework)支持跨平台具有高并发、高性能、高可靠性,并提供异步、多协议、事件驱动的中间层服务框架。 标签:Gaea

    gaea

    首先,gaea系统基于Web技术构建,使用了现代化的开发框架和工具,如Python的Django框架,这使得系统具有高度可扩展性和灵活性。Django是一个高级的Python Web框架,能够快速开发安全且实用的Web应用程序。gaea利用...

    anji-plus-AJ-Captcha-Images-master.zip

    例如,可以利用Java的`java.awt.image.BufferedImage`类创建和操作图像,通过随机算法生成拼图,再用`javax.imageio.ImageIO`进行保存和读取。同时,为了防止恶意破解,可能还会采用一些加密技术对生成的拼图和答案...

    proxy与mycat对比测试

    Proxy通常指的是数据库代理服务器,它位于应用服务器和数据库服务器之间,起到路由请求、负载均衡和透明化数据访问的作用。例如,MySQL Proxy可以智能地分配读写操作到合适的数据库实例,以提高系统的响应速度和可用...

    Gaea决策引擎产品白皮书_专家系统_

    它能将业务决策逻辑从系统逻辑中抽离出来,使两种逻辑可以独立于彼此而变化,使非技术业务人员能直接参与到业务规则管理工作中,使受限于复杂多变且不断发展的业务规则的应用程序和流程实现灵活的决策自动化。...

    用Go构建高性能数据库中间件

    他随后将Go应用于微服务架构、数据库和缓存中间件以及一些业务基础服务,例如库存代理、人群服务、ID生成器等。徐成选将分享的主题划分为以下几个部分: 1. GoinXiaomi,即Go在小米的应用。在2014年,Go被引入小米...

    Gaea:盖亚发动机

    在Gaea的核心功能中,最突出的是其基于物理的渲染(PBR)系统,这使得生成的地形在光照效果上显得更加真实。用户可以调整各种参数,如土壤类型、岩石纹理、植被覆盖等,以模拟不同的地理环境。此外,Gaea还支持导入...

    02.GAEA基础介绍 · 语雀.mhtml

    02.GAEA基础介绍 · 语雀.mhtml

Global site tag (gtag.js) - Google Analytics