分享

Eclipse RAP 入门(一)

 hehffyy 2012-05-21

由于今天刚启动学习进程, 先粗略的介绍一些环境方面的搭建。

 

Eclipse插件的使用跟官方网站有写区别, 目前采用Eclipse RCP 3.4

 

【强烈建议采用Eclipse RCP 3.5 将在一个星期内发布, 3.4不能用wizard建立HelloWorld工程, 相当失败】

 

1. 安装。

 

似乎Eclipse的插件安装都推荐采用网络Update的方式。

 

按照官网的文档【http://www./rap/gettingstarted.php

 

(不用去看视频教程, 基本废掉了,对Eclipse3.4而言,误导而已)

 

Update网址:

 

http://download./rt/rap/1.2/update

(如果更新有问题,可以从http://www./rap/downloads/下载, 注意是最新版本)

 

重启之后,出现欢迎页面, 其中有一个Install Target platform的向导,默认安装即可。

 

 

2. 试用Demo

 

从Plug in中抽取一个RAP Demo, 步骤如下:

 

  •  打开Plug in Development Perspective, 切换到Plug ins view,
  •  选中插件:   org.eclipse.rap.demo
  • 右键import as -> source project, 则可以将其抽取成Eclipse RAP工程。

接下来,就是启动:

 

启动的方式有很多, 无论从plugin.xml, 还是Menifest.mf启动, 还是从工程启动,或者是Run as 归根到底是

 

下面的设置(从Run as 中打开的对话框):

 

RAP 图一

 

在Eclipse 3.4的版本中,这里千万不要改第一个绿色框的rap, 否则将导致不可访问。

 

【后来会发现, 可以在扩展项中,增加branding, 就可以配置成其它的Sevelet name, 并且可以有不同的主题,

 

暂时记住这一点,默认的Servelet都是rap, 就OK!】

 

第二个框是EntryPoint, 是你制定Web访问的进入点, 可以从plugin.xml中设置或者MeniFest.mf文件中设置:

 

官方Demo都有设置的方法。 不再赘述。

 

启动RAP Application 及可以访问:

 

可能会遇到两个问题:

 

1. 启动后看到一堆错误Entry错误, 提示某些ID, 最后面出现了一个BadVersion Number, 表明你需要使用

 

1.6的JRE

 

2. 启动之后控制台没问题,但打开的浏览器中出现:

 

HTTP ERROR: 404

ProxyServlet: /rap

RequestURI=/rap

Powered by Jetty://

此时可能服务器还没有准备好, 需要再次刷新访问。

3. An entry point named 'XXX' does not exist.

说明你配置的EntryPonit存在问题, 多个工程尤其要注意这个问题, 可能你运行的是A工程,而实际上

Entry Point是B工程的, 更改设置即可,很简单。

4. 出现一大堆的Unkown ID,可能是依赖bundle没有加载成功, 上图里面的bundles中,点击add required bundles,就可以了。

RCP 工程和RAP工程的转化

 

今天做了一个从RCP插件工程转化到RAP的工作,

 

从自己的经验来看:

 

1. RCP 和RAP是不兼容的:

      

RCP的Target Platform和RAP的Target Platform 具有两个不同的插件空间, 因此在一个目标平台下, 两个工程是不能同时允许的。

 

 

2. 所谓RCP和RAP代码重用是指: RCP中引用的包名, 跟RAP几乎都是相同的。 只是外层的Jar包或者插件不同,

 

这样, 当RCP向RAP迁移时, 只需要改环境, 不需要改代码。

 

3. RCP和RAP在事件处理上面存在一些细微差别, 今天发现了一个Tree双击事件需要做一点处理。

 

4. 最大的问题来自单例的RCP模式和多用户访问的RAP模式, 请参考入门(五)的解释


1. MF没有除了Require-Bundle外,无任何区别

2. RAP的Require-Bundle只需要一个:org.eclipse.rap.ui
   不需要org.eclipse.ui;org.eclipse.core.runtime

3. RAP存在Luanch文件

4. 扩展点不同, 两者的扩展点都是Plugin.xml来管理, RAP多了一个
   EntryPoint, 作为应用程序的入口.

5. 鼠标双击事件和单击事件造成延时,鼠标双击事件对很多控件可能不响应。

6. 有两种形式运行RAP工程:OSGI Frame Work 或者 RAP Application, 前者可以指定端口[默认9090],后者端口是随机的,但会告知一个URI给你

7. 通过Eclipse rcp wizard做一些简单的改造就可以生成RAP。 操作步骤很简单。

  •     Dependencies中, 只需要有org.eclipse.rap.ui,  rcp中依赖的org.eclipse.ui和org.eclipse.core 以及runtime不再需要, 但需要在import pakage中导入javax的servelet包
  •     扩展点, 除了Entry point等rap需要的扩展点, 其他的rcp扩展点都可用。
  • RCP的Application类替换成RAP的扩展点类

     其他都不用改变。

RAP Branding设置,  跟Application直接相关

 

默认情况下, Application 访问的Sevelet为rap, 通过设置Branding, 可以修改访问路径:

 

注意下面的很多项不能为空


   1. 设置SevletName,请求名称 [默认为rap]
   2. DefaultEntryPointId, 请求对应的进入点[及应用]
   3. ThemeId, 主题,即显示界面的外观, 这个非常有价值
   4. title, 应用名称
   5. body,  附带的一个页面文件, 支持HTML, 比如可以告知用户页面正在载入
   6. favicon, 应用图标图标
   7. exitConfirmationClass. 关闭的提示

大多RCP是从RAP过来的, RCP是SignleTon模式, 而RAP却可以被不同站点访问. 因此这个问题就产生了:
No context available outside of the request service lifecycle, 
 

该文题产生的原因是, 在多现程中访问平台资源. 解决方案:
UICallBack.runNonUIThreadWithFakeContext(display, new

        Runnable ()  {
        public void run() {
        //Work Here! e.g.
        IWorkbench workBench = PlatformUI.getWorkbench();
       }});

 

        但会带来另外一个问题,  display的参数怎么得到, Display.getcurrent 和getDefault都实效的!
       解决方法: 从IEntryPoint中得到【定义一个Display的静态变量】.  每个EntryPoint是Session级别的,所以, 使用是没有问题的。

 

其他问题请查询官方wiki网站:

Eclipse RAP中最有技术含量部分来了。

 

大概思路是:

 

服务端, java swt控件

 

客户端, js文件, source处理文件,

 

毫无疑问这两个同事存放在Server端, 但js必须提供给客户端, 以满足自定义控件事件的响应。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多