paoding-rose portal的实现技术,解析rose portal内部机制

转载 2015年07月09日 19:21:22

内容

这个wiki主要介绍rose portal的实现技术,解析rose portal内部机制。

妄语

我认为roes portal技术,是一个亮点,在实现上是独创。

rose portal是一个服务端portal技术,而非客户端技术。所谓服务端portal技术,是指所有工作发生在服务器上,客户端在整个过程中没有任何作用,使用rose portal不需要任何js技术的支持。

使用rose portal,您可以将一个页面切成互不相关的多个子模块(我们称之为"window"),如果和配置组件结合,您可以根据根据不同用户的选择为之选择不同的模板以及窗口。

虽然rose portal不依赖前端技术,但你也可以通过和前端技术的结合实现"rose pipe"技术,所谓rose pipe借助了rose portal,不仅仅能够加快了服务器的执行速度,更是降低了页面的渲染和传输等待时间。

关于rose pipe技术及其实现,详见 《RosePipe》

开发概述

rose portal是rose扩展开的一种重要技术,从某种角度其光耀甚至超过作为它基础的rose。

我们尽量把复杂和创意封装在实现代码中,暴露出来的api是极其简约的。如同 《第一支portal程序》 所述的那样,开发一个portal程序,你只需要把Portal参数声明在方法上,并在方法中调用portal.addWindow就完成了整个代码结构。这就是和普通rose唯一不同的地方,剩下就都一样了。

技术决策

本节简单介绍rose portal的技术方向决策,规范、统领技术的实现。

转发

servlet容器能够将一个请求从某一个地址转到另外的地址,由转发后的地址实际处理该请求。rose portal利用了这个特性。rose portal在处理window请求时,本质使用forward来实现。和普通的web请求不一样的地方是,所有window的请求都是由同一个起点地址(主控控制器)开始转发,而非由由一个它转发给一个window,然后在由该window转发给下一个window。

并发

主控制器把请求转发给不同的window并不是串行的,即不是等某个window执行完毕后,再由主控制器转发给下一个window。rose portal在此作了特别处理,每当您调用portal.addWindow时,就意味着转发已经开始,但是这个转发是由另外的thread来执行的(称为异步)。portal.addWindow并不wait,而是立即返回,所以当您调用多次addWindow时,可能意味着由多少个thread在为你同时执行(如果线程池线程充足)。

线程池

web容器本身提供了一个线程池,用于处理容器接收到的用户请求。rose portal框架下的主控是由这个线程池的线程执行的,但对于window控制器却非如此。rose portal另行依赖于独立容器线程池之外java.util.concurrent.ExecutorService服务,并把window的执行交由这个执行服务来执行。

在具体实现上,使用的是java.util.concurrent.ThreadPoolExecutor,这个执行服务提供了一个线程池的策略。

输出

作为一个服务端portal框架,无论服务端如何并行、甚至是“乱序”的并行,但是给用户的html或者其它的输出必须是一定的,和并行的调度无关的!

rose portal要把每个window的输出独立出来,window执行服务可以和普通控制器那样合并数据到模板并调用out.println“输出”,但是不可以真的由window自己决定向客户端输出!真正的输出必须由主控线程来统一控制。

rose portal目前采用的是window自行缓冲页面内容,并由主线程来负责实际输出的形式。

技术实现关键组件

技术难点

  • 如何使web容器在并发转发下不会出错?
  • 各个window如何进行独立输出?
  • 主线程和并发的window线程的交互以及结果合并。


以上转载自https://code.google.com/p/paoding-rose/wiki/Rose_Portal_Inside

Paoding Rose源码分析1-读取Rose配置文件

Paoding Rose是人人网公司做的一个开源的类似于Spring的Java框架,支持类似于Spring和MVC,ORM,数据库分表操作,给予Spring2.X 本文,研究下RoseAppConte...
  • lsm135
  • lsm135
  • 2016年10月14日 10:25
  • 814

Paoding Rose使用手册

本文转载自:http://www.54chen.com/rose.html rose手册计划 rose项目源代码地址:http://code.google.com/p/paoding-rose/...
  • WinWill2012
  • WinWill2012
  • 2015年05月28日 11:07
  • 2763

Paoding Rose学习(一)

Paoding Rose学习(一)本文包括一下几个内容 rose环境介绍 一个简单的基于rose的web程序 web.xml介绍 自动化部署 需要的环境 eclipse/Intellij IDE Ma...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2015年09月25日 16:48
  • 5736

paoding-rose 框架BaseDAO

用的paoding-rose 久了,感觉DAO层书写还是挺方便的..但是在其他非rose项目中各种baseDAO 用起来挺舒服的。 每每想到rose中update语句,因为修改字段或条件不同就要创建一...
  • zjh1n795
  • zjh1n795
  • 2016年04月26日 12:04
  • 1530

PAODING-ROSE与Redis集成

PAODING-ROSE与Redis集成Rose简介:人人网、糯米网释出的、开源的高效Java web开发框架。在小米米聊服务端再次被验证和使用。一个从零开始的创业公司,在大家技术背景不一的情况下,r...
  • liuwei_nciae
  • liuwei_nciae
  • 2016年02月15日 11:50
  • 1261

Paoding Rose源码分析1-读取Rose配置文件

Paoding Rose是人人网公司做的一个开源的类似于Spring的Java框架,支持类似于Spring和MVC,ORM,数据库分表操作,给予Spring2.X 本文,研究下RoseAppConte...
  • lsm135
  • lsm135
  • 2016年10月14日 10:25
  • 814

Paoding Rose学习(一)

Paoding Rose学习(一)本文包括一下几个内容 rose环境介绍 一个简单的基于rose的web程序 web.xml介绍 自动化部署 需要的环境 eclipse/Intellij IDE Ma...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2015年09月25日 16:48
  • 5736

Paoding Rose使用手册

本文转载自:http://www.54chen.com/rose.html rose手册计划 rose项目源代码地址:http://code.google.com/p/paoding-rose/...
  • WinWill2012
  • WinWill2012
  • 2015年05月28日 11:07
  • 2763

对rose框架的简单使用

刚到一家新公司,要求使用Rose框架,就了解学习了一下。 首先,Rose是一款人人网开源的遵循约定优于配置的原则的j2ee框架。在使用时,它的控制器必须以Controller结尾,放在**.contr...
  • gaohe1227
  • gaohe1227
  • 2016年11月06日 11:22
  • 2021

使用Rational Rose来绘制UML图

初次接触项目,需要使用UML来画类图,用例图。在网上找了些资料来学习,并且通过这博文来做笔记,以便以后翻看阅读,更可以跟大家分享下,小弟能力有限,如有误请提出来,我会及时纠正,谢谢! 绘制U...
  • qq_21996633
  • qq_21996633
  • 2015年01月30日 20:10
  • 1927
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:paoding-rose portal的实现技术,解析rose portal内部机制
举报原因:
原因补充:

(最多只允许输入30个字)