rap开发与rcp开发_使用RAP将RCP应用程序转换为Web应用程序

rap开发与rcp开发

使用Eclipse Rich Client Platform(RCP),您可以构建应用程序。 这些丰富的应用程序基于动态插件模型,并且使用常见的工具箱和扩展点来构建UI。 在开放工具开发中,Eclipse RCP被广泛使用。

Rich Ajax平台(RAP)项目使您可以使用Eclipse开发模型,插件和仅Java的API来构建支持Ajax的丰富Web应用程序。 RAP的目标是使RCP应用程序能够在Web浏览器中运行,而只需进行尽可能少的修改。

RAP和RCP具有相同的接口,但是它们的基本实现有很大不同。 RAP提供了一种称为RWT的SWT API的替代实现,它在Tomcat之类的servlet容器上运行。 客户端可以使用标准的Web浏览器(例如Internet Explorer或Chrome)访问它。

RAP和RCP应用程序用于不同的用户环境。 作为桌面应用程序,RCP一次只能与一个用户一起使用。 相反,RAP应用程序是基于Web的程序,可以由多个用户同时访问。 RAP基于Equinox,服务器端OSGi和运行时捆绑包。 每个Web应用程序一个OSGi实例在一个应用程序范围内运行。 与RCP相对,RAP必须处理用户会话和在用户会话之间共享的捆绑。

在本文中,将学习RAP的主要功能以及如何使用RAP将RCP应用程序迁移到Web。 您可以下载本文中使用的示例代码。

RAP和RCP的单一采购技术

RAP流行于从单一代码库(也称为单一来源)开发富客户端应用程序和Web应用程序。 您可以将现有的RCP开发技能和代码库重新用于基于Web的RAP应用程序。 对于当前版本的RAP 1.3.x,可以在RAP环境中重用现有RCP代码的70%-90%,而无需进行更改。

处理不同的API和功能

RCP和RAP具有不同的API,功能,UI库,扩展点和用户环境。

  • API:在RAP 1.3.x版中,并非所有RCP API在RAP中都可用,例如GC(图形上下文),MouseMove事件和FileDialog。 RAP有其自己的其他API,可满足特定于Web的需求PhaseListenerISessionStore等。 要处理不同的API,请考虑以下建议:
    • 在主机插件中为该问题定义一个接口。
    • 定义以不同片段实现接口的新类,以特定于平台的方式解决问题。
    • 通过Java反射在运行时加载特定于平台的实现。

    单一采购示例 ”部分中提供了示例源代码。

  • UI库:由于RCP和RAP具有不同的目标平台,因此它们具有不同的基础UI库。 主机插件包含RCP的公共代码和RAP需要在两个平台UI库依赖性(例如, org.eclipse.ui插件为RCP或org.eclipse.rap.ui插件用于RAP)。 两者都需要作为主机的必需插件导入。

    为了避免在使用不同目标运行时间时发生编译错误,请启用“属性”下的“ 可选”复选框, 如图1所示。 通过这种方式,RAP / RCP运行时将在开始执行时加载正确的库。

    图1.可选依赖项
    对于可选的依赖项
  • 扩展点(E-P):当前,并非所有RCP E-P都可以在RAP中使用(例如, bindingshelpSupport )。 由于特定于Web的要求,RAP包括一些附加的E-P,例如entrypointthemes

    引入了OSGi片段来处理不同的E-P,并对RCP和RAP使用相同的代码库。 片段是特殊的OSGi捆绑包; 它们扩展了另一个捆绑包,并且可以在运行时与扩展捆绑包合并。 首先,定义一个主机插件,其中包含RCP和RAP的通用代码。 然后,分别为RAP和RCP创建两个单独的片段,其中包括RAP和RCP的特定于平台的代码。 在运行时,将仅与主机插件一起安装一个相应的片段(RAP或RCP)。 因此,特定于平台的EP扩展名可以移至相应的片段,并且捆绑包结构保持完整。

  • 多用户环境:单例模式已广泛用于RCP。 但是,对于允许多个用户同时访问的基于Web的应用程序,需要基于会话的单例。 RAP提供了一个基类SessionSingletonBase该基类为每个会话提供了单例实现,并且避免了不同用户之间的应用程序状态共享。

    会话单例是特定于RWT的单例,它提供对会话范围内唯一实例的访问。 在一个用户会话的上下文中, getInstance(Class)将始终返回相同的对象。 但是,对于不同的用户会话,返回的实例将不同。

    要实现会话单例类,应调用SessionSingletonBase#getInstance() ,该类将照顾单例实例的适当范围。 清单1显示了这种模式。 请参阅相关主题 RAP的常见问题解答。

    清单1.会话单例示例
    package com.ibm.msdk.ui.configWas;
    
    import org.eclipse.rwt.SessionSingletonBase;
    
    public class SampleSessionSingleton{
        private SampleSessionSingleton(){}
    	
        public static SampleSessionSingleton getInstance(){
    	    return (SampleSessionSingleton)SessionSingletonBase
    		        .getInstance(SampleSessionSingleton.class);
        }
    }

单一采购示例

在本节中,将为HTML查看器提供一个示例RCP应用程序,以了解有关单一采购的更多信息。 您可以下载本文中使用的示例代码。 该示例具有一个用于显示HTML文件的视图,可以使用其工具栏上的“ 打开”按钮来打开该视图, 如图2所示:

图2. RCP HTML查看器示例
RCP HTML查看器示例的屏幕截图,其中已标识“打开”按钮

该示例使用浏览器窗口小部件显示HTML文件。 要实现该功能,您需要创建一个名为com.ibm.msdk.example的样本插件。

  1. 标识RCP中特定于平台的代码。

    如前所述,样本插件中有RAP / RCP平台特定的代码。 您必须首先从示例项目中提取通用代码。 通过分析代码,从RCP HTML查看器中识别出不支持RAP的API: FileDialogopen (在com.ibm.msdk.example.action包中),如清单2所示:

    清单2. RCP中特定于平台的代码
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.ui.IWorkbenchWindow;
    
    import com.ibm.msdk.example.utils.HtmlFileReader;
    
    public class ImportHtmlAction extends Action {
    	
    	public static final String ACT_IMPORT_FILE = "ACT_IMPORT_FILE";
    	
    	private IWorkbenchWindow workbenchWi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值