阅读更多

19顶
13踩

编程语言

原创新闻 Smartrcp——Adobe AIR以外的另一选择

2010-05-05 10:05 by 见习记者 smartinvoke 评论(47) 有20394人浏览

项目背景:

 

      笔者曾经做过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组件比较类似。

 

 

19
13
评论 共 47 条 请登录后发表评论
47 楼 fjraos 2011-08-04 09:02
现在smartrcp开发团队发展到程度了呢?
46 楼 Aaronic 2010-05-07 16:24
比PHPRPC如何?人家还跨多种平台呢
45 楼 twoheard 2010-05-07 13:19
结构图是用啥画的?
44 楼 smartinvoke 2010-05-07 13:18
croud 写道
探索精神值得鼓励,但不知道搞这东西出来干啥的
远程调用别人Adobe早就有BlazeDS、LiveCycle的解决办法了
Flex内存管理大多是编程技巧问题 不是没办法解决
smartrcp本身也是actionscript写的吧,既然这样还是得用Flash Player来跑



这个是针对桌面单机程序的。BlazeDS、LiveCycle是针对bs程序的,关注点不同。
43 楼 croud 2010-05-07 10:55
探索精神值得鼓励,但不知道搞这东西出来干啥的
远程调用别人Adobe早就有BlazeDS、LiveCycle的解决办法了
Flex内存管理大多是编程技巧问题 不是没办法解决
smartrcp本身也是actionscript写的吧,既然这样还是得用Flash Player来跑

42 楼 dawn023 2010-05-07 08:58
不看好Flex+RCP,到觉得Swing+RCP比较不错,只要开发一套组件和一套有效的UI设计工具,比这有前途。
41 楼 dualface 2010-05-06 21:37
smartinvoke 写道
dualface 写道
感觉这个项目技术上是行得通,但是市场恐怕不好接受。

Flex本身就不够成熟,比如窗口管理、输入焦点管理这些。虽然弄到Java里面去可以让开发者利用一大堆Java的第三方库,实现多线程等功能,但Flex本身的毛病还是没法用Java来解决的。

而且用了Flash ActiveX,就注定无法跨平台。那我觉得还不如直接用.NET好了,开发客户端的效率是Java+Flex的组合无法比拟的。


的确flex不是很成熟,内存管理是最大的问题。但flex是同类型平台中(ms sl,
javaFX)中最成熟的。
smartrcp让每个flex模块都运行于独立的flash player容器中。有效的解决了内存的问题。

smartrcp是跨平台的,它对flash访问部分做了抽象,只要有flash与eclipse的系统中,就可以有smartrcp的身影。


每个模块一个独立的flash player进程?那得占多少内存啊。。。
再说内存占用只是一方面的问题,Flex最大的问题就是做出来的UI太多小bug。一会儿输入焦点丢失了,一会儿窗口层叠出问题了。

这些问题是靠外部无法解决的。根本原因在于人们给Flash这个平台赋予了太多职责。原本只是个显示动画的平台,现在非得加上一大堆与窗口管理有关的东西,不但效率没保证,成熟度也达不到要求。

我以前弄AIR,开始是觉得挺爽。默认的界面就很漂亮,而且开发起来也快。可是随着UI的复杂度增加,各种小问题就冒出来了,越到后面越折腾人。

做桌面应用还是用.NET好,又快又稳,而且能够充分发挥Windows桌面的能力。至于要实现RCP那样的远程交互,也是非常简单的事情。
40 楼 qxucc 2010-05-06 17:20
用Flash Player和Java,不都是老美的玩意吗?

再说用了FlashPlayer,性能还能好得了?
39 楼 dawn023 2010-05-06 16:00
解决了你的需求了吗?怎么解决的?
1.无多线程支持;
2.不能调用其他语音开发 的dll
3.扩展性非常差
38 楼 plutoxb 2010-05-06 15:50
不错,我也看好这个
37 楼 nwangwei 2010-05-06 15:47
        
36 楼 qssoft.cn 2010-05-06 13:40
不错.. 支持SmartRCP... 加油... 
35 楼 timshaw9791 2010-05-06 12:55
希望lz不要泄气,我们很多人都看好这个方向。加油
34 楼 janken 2010-05-06 11:34
作者加油! 从这个项目刚刚出来的时候就关注了
33 楼 xiaocheng882000 2010-05-06 10:05
人多口杂,希望作者别被影响,该怎么地就怎么地!
对个人做的研究和探索应该给予必要的尊重
一个标题而已,多点宽容
32 楼 qq123zhz 2010-05-06 09:47
可以看看。
31 楼 9527oooooo 2010-05-06 09:39
关注一下~
30 楼 smartinvoke 2010-05-06 09:19
mblmh2008 写道
请勿三番五次的把自己公司的广告贴成新闻。
这种东西在坛子里边炫炫就得了,
毕竟你公司的作品没有达到微软、苹果、谷歌那样的水平
应用范围和使用人数也没那么多。
起个吸引人的眼球的名字,然后再文章里打死渲染这玩意儿多好多好。
还发布到新闻里来就不要怕别人骂你。
骂你你就忍着,还回嘴别人是什么市井小民,那你是什么?
你市井老鼠吗?


首先申明:并非公司项目,个人业余时间的创作。
29 楼 aninfeel 2010-05-06 08:58
原来又是山寨广告啊,拿分走人
28 楼 mblmh2008 2010-05-06 08:41
请勿三番五次的把自己公司的广告贴成新闻。
这种东西在坛子里边炫炫就得了,
毕竟你公司的作品没有达到微软、苹果、谷歌那样的水平
应用范围和使用人数也没那么多。
起个吸引人的眼球的名字,然后再文章里打死渲染这玩意儿多好多好。
还发布到新闻里来就不要怕别人骂你。
骂你你就忍着,还回嘴别人是什么市井小民,那你是什么?
你市井老鼠吗?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics