Smartrcp——Adobe AIR以外的另一选择
项目背景:
笔者曾经做过Adobe AIR的开发,深感其之不爽,无多线程支持,不能调用其他语音开发 的dll,扩展性非常差。所以经过一年多的时间开发了smartrcp平台,将Java与Flex整合于同一桌面程序中,使用Java与Flex开发桌面程序。Java负责后台逻辑,Flex负责界面显示。Java与Flex通过flash player接口实现进程内同步通信。
SmartRCP是什么
SmartRCP是一个使用Java与Flex 编写高度可扩展可配置可裁剪的桌面程序的开发平台。
它继承了java与flex的优势,并扬长避短,将它们的优势发挥得淋漓尽致。
整个系统构建在eclipse 插件体系之上,所以可以与现有的eclipse 插件体系融合;
同时充分利用flex module的优势,使整个程序的界面开发更具扩展性与配置性。
项目地址:http://code.google.com/p/smartrcp/
SmartRCP的目标
保证SmartRCP平台的高扩展性
保证SmartRCP平台的跨平台性
保证SmartRCP程序开发的便捷性与高效性
SmartRCP运行环境
1:jre1.6以上
2:flash player activex版
SmartRCP的优势
项目经理:
使用SmartRCP,可以缩短项目开发周期与开发成本
使用SmartRCP,可以将项目逻辑部分与GUI部分媾和降到最低易于项目的维护与扩展
通过SmartRCP的接口机制,Java程序员与Flex程序员可以并行开发互不影响
SmartRCP的模块通信机制可以很好的实现模块重用
Java程序员:
用SmartRCP开发桌面程序开发效率非常高,界面美观
我再也可以不用开发效率低运行缓慢的swing做界面开发了
SmarRCP依靠Flex做的界面非常漂亮很不错
依靠Java做后端服务,功能非常强大,比Adobe AIR程序更具扩展性和维护性
把界面设计部分交给Flex程序员与美工,我可以专注于程序业务逻辑部分
Flex程序员:
用SmartRCP开发桌面程序开发效率非常高,界面美观,而且功能非常强大
Flex调用Java就像调用本地代码一样方便
将复杂业务逻辑交由Java处理我们可以专注于界面开发,分工明确
SmartRCP开发框架对Flex的模块机制支持非常好,代码重用与维护性高
SmartRCP对Flex模块的载入和销毁机制,很好的解决了Flex内存不易释放 的问题
大家有什么疑问可以在 http://smartrcp.group.iteye.com/ 圈子进行讨论,我会及时的回复的
完整版下载地址(包含JRE):
http://smartinvoke.googlecode.com/files/smartrcp_1.0.a_20100429All.rar
精简版下载地址(无JRE):
http://smartrcp.googlecode.com/files/smartrcp_1.0.a_20100429.rar
smartrcp需要jre1.6以上的支持。
smartrcp开发入门系列:
smartrcp开源平台使用Java与Flex构建桌面程序 一(smartrcp版hello world)
smartrcp开源平台使用Java与Flex构建桌面程序 二(快速搭建程序整体布局)
smartrcp开源平台使用Java与Flex构建桌面程序 三(使用eclipse插件扩展smartrcp平台)
smartrcp开源平台使用Java与Flex构建桌面程序 四(smartrcp的运行原理)
运行示例程序:
下载并解压smartrcp后,打开windows控制台,切换到解压smartrcp.exe所在的目录,运行
smartrcp.exe -app http://smartrcp.googlecode.com/svn/org.smartrcp.demo/src/Splash.swf
命令就可以打开示例程序了,如下图:
smartrcp运行原理:
smartrcp的程序结构如下:
图片说明:
启动文件:继承自cn.smartinvoke.gui.SplashApp的mxml Application文件编译后
所得的swf文件。该文件有点儿像eclipse插件中的plugin.xml文件的作用,
它定义了整个应用程序的基本信息;菜单工具栏;与整体布局。
应用程序文件:继承自cn.smartinvoke.gui.RCPApplication的mxml Application文件编译后
所得的swf文件。该文件的主要作用是保存全局运行库,程序全局样式,嵌入资源等等
资源。Flex模块都是通过它进行加载的。
模块:可以被独立加载与运行的软件单元,在smartrcp平台中,模块可以为:
1:继承自RCPModule的mxml Module,它的最终发布形式为编译后的swf文件。
2:继承自cn.smartinvoke.gui.RCPApplication的mxml Application,它的最终发布形式
也为编译后的swf文件。
3:实现cn.smartinvoke.smartrcp.core.ISWTPartUnit接口的Java类。通过它实现的
public void createPartControl(Composite parent)方法可以定义界面显示。此类型
的模块为Java语音实现,通过ViewManager类实现与Flex实现模块的互调。它的最终发布
形式为java的jar文件。通过它可将Java与Flex界面整合到一个程序中。
smartrcp平台为每个运行的模块生成唯一ID号,同时创建一FlashViewer类型对象用于对相应模块的访问。
smartrcp规定:所有模块定义类的public方法都可以被其他模块访问到。
smartrcp保证所有运行的模块都有一FlashViewer类型对象与其对应,通过唯一ID号进行区分。
ViewManager类专门负责对所有FlashViewer类型对象进行管理。不同模块实例之间的调用都是通过调用
调用ViewManager的对应方法实现的。
smartrcp运行原理:
1: smartrcp在启动时获取-app参数值作为启动文件,该值必须为一有效的
swf文件绝对路径,该路径可以为本地文件路径,也可以是一完整的http
地址。smartrcp通过调用该swf文件得到如下信息:
1.1 应用程序根目录——当前smartrcp程序的运行目录,程序中的所有相对路径都是相对于该路径的。
1.2 运行文件——启动文件所在类即cn.smartinvoke.gui.SplashApp子类的cn.smartinvoke.rcp.CPerspective类的runtimeSwfPath属性所指的swf文件。
2:通过解析启动文件返回的cn.smartinvoke.rcp.CPerspective类型对象定义整个程序的菜单;工具栏; 视图布局,窗口 大小,标题等应用程序信息。
3:通过第二步解析得到的视图布局信息加载指定的模块以初始化整个应用程序。
开发smartrcp程序就是开发不同的模块,主要是针对模块编程。smartrcp的这种架构特点充分保证了程序的高扩展性与可维护性。充分保证了模块的复用性,因为可以将一模块编译为独立的flex application或osgi bundle Jar文件。smartrcp的模块功能与com组件比较类似。
下一篇: HTTP之HEAD method