eclipse rcp_客户端和服务器上的Eclipse RCP和OSGi

RPC Software借助Eclipse RCP和OSGi为家具行业的ERP订单管理软件提供开源解决方案。Eclipse RCP的模块化结构允许在客户端和服务器之间重用代码,简化部署。通过Eclipse RCP的插件机制,实现了定制报告和功能,满足不同客户的需求。同时,Eclipse服务器使用Tomcat插件结构,便于重用和维护。
摘要由CSDN通过智能技术生成

eclipse rcp

介绍

像其他许多行业一样,合同家具行业具有不断变化的要求,这些要求必须反映在行业公司所使用的软件中。 伊利诺伊州芝加哥市的RPC Software通过在其产品中使用开源软件的基础在该市场中获得了成功。 该公司正在利用Eclipse RCP,DotProject和SugarCRM等技术来提供比其竞争对手更快,更具成本效益的解决方案。 本案例研究对这些技术,使用它们所获得的开发知识以及所汲取的经验进行了深入研究。

RPC Software开发了家具行业使用的ERP订单管理软件。 在提供RPC产品之前,业内公司经常使用以Microsoft Visual Studio语言编写的专有软件,例如Visual Basic和基于DOS的解决方案以及CA的Visual Objects。 当今的公司正在寻找广泛的解决方案,以处理许多不同的业务活动,例如销售,报价,订单输入,时间跟踪,仓储,会计和报告。 结果,满足这种要求的软件不仅需要可扩展和强大,而且本质上还需要模块化。

像许多其他行业一样,近年来也一直在努力使信息更加透明,并使家具经销商定期与之互动的供应商和客户可以访问。 这种变化有两种主要驱动方式。 业内最早的公司正在转向开放数据交换格式,例如OFDA-XML。 其次,诸如项目跟踪之类的业务流程正在报告并通过Web应用程序公开,以允许合作公司共享信息。

解决方案概述

RPC Software的客户需要可以快速且专门适应其业务需求的软件。 他们还需要具有为每天使用该应用程序的员工提供强大的客户端功能的能力,以及将报表功能向其业务的其他层次和向合作伙伴公开的能力。 考虑到行业中客户的这些要求,RPC决定利用开源软件为其解决方案提供基础。 RPC的产品阵容包括使用Eclipse RCP和Apache Tomcat的富客户端ERP客户端/服务器组件,基于开源DotProject PHP应用程序的基于Web的项目管理解决方案,以及即将发布的使用开源SugarCRM的基于Web的CRM产品。作为其基础。

选择基于Web的解决方案作为项目管理和CRM产品的原因是,经销商,客户和供应商之间的需求共享,而无需安装胖客户端。 对于ERP产品,基于SWT / JFace小部件集的丰富功能以及其OSGi基础提供的模块化基础结构来选择Eclipse RCP。

Eclipse RCP的中心是建立在其上的OSGi规范。 根据Wikipedia的定义,OSGi框架提供:

该框架实现了完整的动态组件模型-在独立的Java / VM环境中缺少该模型。 可以远程安装,启动,停止,更新和卸载应用程序或组件(以捆绑形式出现),而无需重新启动-详细说明了Java包/类的管理。 生命周期管理是通过API完成的,这些API允许远程下载管理策略。 服务注册表允许捆绑软件检测新服务或服务消失,并进行相应调整。 ( http://en.wikipedia.org/wiki/OSGi

CORE产品由客户端和服务器组成。 两者都广泛使用OSGi来将代码组织成功能组件,并在服务器和客户端层上重复使用该代码。 Eclipse RCP允许将类和资源模块化到称为插件的jar文件中,这些jar文件是OSGi捆绑包的超集。 RCP软件客户端针对其每个功能区域均分为核心业务插件。 它还利用了第三方API的插件,例如Hibernate和Jasper Reports。 CORE Business服务器也被构造为一组插件。 这允许在客户端和服务器上轻松重用业务逻辑插件。

为了进一步简化其应用程序的部署,RPC已将客户端和服务器结构化为包含在同一安装中。 Eclipse RCP定义了通过在插件中结合XML和配置文件定义的入口点的概念。 该框架使用插件之间的依赖元数据来确定需要为特定入口点启动哪些插件。 对于客户端,使用客户端入口点执行基于普通exe的Eclipse RCP启动过程。 此客户端启动不包括那些提供基于服务器功能的插件。 比较而言,当作为服务器运行时,将使用开源JNIWrapper产品创建Windows服务,该产品使用不同的入口点启动Eclipse RCP安装,该入口点包括Tomcat服务器实例软件包作为插件,但不包括包含UI特定逻辑或是客户端依赖项,例如SWT插件。

CORE Business客户处理与ERP相关的常见任务,例如创建提案,装载物料清单和会计。 服务器组件提供输入数据的基于Web的报告,这些报告使每个公司组织的成员都可以查看高级别的活动摘要。 通过CORE Business客户端输入订单时,还将在Core Vision产品的数据库中自动创建产品ID。 当在CORE Vision中进行时间表更改时,可以在核心业务中查看它们。 同样,在核心业务中进行的CRM更改将反映在CORE CRM中,反之亦然。 RPC处理两个数据库的集成。 单独使用DotProject和SugarCRM等产品的公司将无法访问此类集成。

Eclipse RCP客户端

CORE Business产品的核心是它对Eclipse RCP富客户端框架的使用。 客户每天都使用CORE Business客户端来满足ERP需求,例如会计,管理报告,项目定价,创建或建议等。出于许多原因,选择Eclipse RCP的原因是其他技术。 由于客户的信息输入和数据大小要求,基于Web的应用程序不是可行的选择。 除了Eclipse RCP和SWT之外,还考虑了诸如C#和Swing之类的富客户端窗口小部件框架。 SWT的原生外观和逼真度是关键卖点。 Eclipse RCP附带的开箱即用功能(例如,窗口,菜单和首选项)对于RPC软件也很有吸引力。

OSGi和Eclipse RCP提供的模块化已被CORE Business客户端中的RPC Software广泛使用。 客户经常需要诸如自定义报告和计算逻辑之类的项目。 在某些情况下,并非所有客户端都需要诸如“时间输入”之类的功能。 Eclipse RCP基于插件的基础结构允许RPC Software通过分发一组核心应用程序插件以及针对特定客户端需求的自定义插件来解决这些要求。

Eclipse RCP框架具有基于xml的格式,插件可使用该格式将其提供的功能通知核心应用程序。 RPC使用此功能的一个示例是自定义报告。 以下XML代码段显示了如何在运行时通过特定于客户的custom.plugin。*。core样式插件添加自定义采购订单报告。

<extension id= "xsltTransforms" point= "com.rpc.core.xsltTransforms" >
<xsltTransform id= "com.rpc.core.vendor.model.PurchaseOrder.pdf" >
<run class= "com.rpc.core.reporting.DefaultTransformSourceProvider" >
<parameter name= "location" value= "reports/PurchaseOrder.xsl" />
</run>
</xsltTransform>
</extension>

这种控制方式的价值在于,自定义插件中包含了所有配置更改和在运行的应用程序中包含功能所需的元信息。 无需进行任何更改即可使应用程序的核心插件或菜单系统意识到新功能。 Eclipse RCP框架在运行时发现了所有内容并将其连接在一起。

Eclipse服务器

RPC软件不仅在CORE Business客户端中而且在基于Tomcat的CORE Business服务器中都使用Eclipse RPC的插件结构。 CORE Business服务器公开了与通过基于CORE Business Eclipse RCP的客户端输入的数据相关的报告功能。 在设计CORE Business Server时,很明显,需要重用客户机上也存在的许多相同的逻辑和组件,例如Hibernate和Jasper Reports。 对重用要求最明显的解决方案是将服务器上需要的类重新打包为WAR文件中包含的jar。 该解决方案将需要复杂的构建脚本,随着类结构的改变,这些脚本需要不断进行修改。 相反,让Tomcat“知道插件”似乎容易得多。

Eclipse IDE将Tomcat的嵌入式版本用于其帮助系统。 RPC能够以此为起点来实现所需的功能。 此时,他们将servlet.jar文件移动到了自己的插件中,这样它们就可以被他们创建的其他需要Servlet API的插件使用。 他们还修改了现有的Tomcat插件,以使用Eclipse JDT编译器而不是标准Java编译器。 这使CORE Business只需捆绑JRE即可,而无需捆绑JDK。 最后,修改了包含JSP页面的插件使用的类加载器,以加载所需的系统插件,例如org.eclipse.core.runtime。

package org.eclipse.help.internal.appserver;
public class PluginClassLoaderWrapper extends URLClassLoader {
...
/**
* This is a workaround for the jsp compiler that needs to know the
* classpath.
*/

public URL[] getURLs() {
Set urls = getPluginClasspath( _plugin );
return (URL[]) urls.toArray( new URL[urls.size()]);
}

private Set getPluginClasspath(String pluginId) {
// Collect set of plug-ins
Set plugins = new HashSet();
addPluginWithPrereqs(pluginId, plugins);
// Collect URLs for each plug-in
Set urls = new HashSet();
for (Iterator it = plugins.iterator(); it.hasNext();) {
String id = (String) it.next();
try {
Bundle b = Platform.getBundle(id);
if (b != null ) {
// declared classpath
String headers = (String) b.getHeaders().get(Constants. BUNDLE_CLASSPATH );
ManifestElement[] paths =ManifestElement.parseHeader(Constants. BUNDLE_CLASSPATH , headers);
if (paths != null) {
for ( int i = 0; i < paths. length ; i++) {
String path = paths[i].getValue();
addBundlePath(urls, b, path);
}
} else {
// RPC custom code:
try { String bundleJarPath = b.getLocation();
if (bundleJarPath.equals(Constants. SYSTEM_BUNDLE_LOCATION )) {
SystemBundle systemBundle = (SystemBundle) b;
bundleJarPath = ((SystemBundleData) systemBundle.getBundleData()).getBundleFile().getBaseFile().toURL().getPath();
bundleJarPath =bundleJarPath.substring(bundleJarPath.lastIndexOf( "plugins/" ));
} else if (bundleJarPath.startsWith( "initial@reference:file:" )) {
bundleJarPath =b.getLocation().replaceFirst( "initial@reference:file:", "" );
} else {
bundleJarPath =b.getLocation().replaceFirst( "update@", "" );
}
if (bundleJarPath.endsWith( "/" )) {
bundleJarPath = bundleJarPath.substring(0, bundleJarPath.lastIndexOf( "/" ));
}
if (bundleJarPath.startsWith( "plugins/" ) && bundleJarPath.endsWith( ".jar" )) {
URL installURL = Platform.getInstallLocation().getURL();
bundleJarPath = installURL.getPath() + bundleJarPath;
urls.add(new URL(installURL.getProtocol(), installURL.getHost(), bundleJarPath));
}
} catch (Exception ex) {
}
// RPC custom code:
}
// dev classpath
String[] devpaths =DevClassPathHelper.getDevClassPath(pluginId);
if (devpaths != null ) {
for (int i = 0; i < devpaths. length; i++) {
addBundlePath(urls, b, devpaths[i]);
}
}
}
} catch (BundleException e) {
}
}
return urls;
}
// RPC custom code:
private void addBundlePath(Set urls, Bundle b, String path) {
URL url = b.getEntry(path);
if (url != null ) {
try {
urls.add(FileLocator.toFileURL(url));
} catch (IOException ioe) {
}
}
}
// RPC custom code:
...
}

与传统的Java WAR部署设置相比,该解决方案具有许多优势。 首先,RPC现在能够在客户端和服务器层上使用完全相同的插件,从而促进重用并减少维护。 其次,部署设置本质上也没有那么复杂。 作为战争文件,RPC必须在每个客户端站点上安装Tomcat并配置WAR以进行部署。 通过将它们的服务器捆绑为Eclipse RCP插件的交钥匙集,他们可以在每次安装客户端时节省大量配置和测试,同时获得可靠性。

浏览器整合

核心业务应用程序的另一个有趣的元素是其报告功能的发展。 随着应用程序的增长,许多报告选项已用于满足客户需求,例如Apache FO,Jasper Reports和标准Java打印API。 尽管某些报告基于服务器,而其他报告可以直接在客户端中运行,但是客户希望能够查看基于服务器的报告而不必切换到浏览器。 RPC通过利用SWT嵌入式浏览器组件来满足这一需求。 使用几行类似于下面所示的代码,他们能够直接在基于Eclipse RPC的客户端中从服务器呈现基于HTML的报告。

final Browser browser = new Browser(shell, SWT.NONE);
browser.setUrl("http://eclipse.org");

客户端除了显示来自服务器的报告外,还包括易于使用的功能,例如下拉组合框,可直接在客户端中选择报告视图类型。 然后生成一个动态URL,并将请求发送到服务器。

得到教训

总体而言,RPC软件发现Eclipse RCP是满足其开发需求的非常强大的框架。 它使他们能够在保持单一代码库的同时满足客户的不同需求。 作为自然界中的开源,它们还可以根据需要增强缺少的功能。 总体而言,Java通过使用诸如Hibernate,Apache FO和Jasper Reports之类的API,可以更快地进行应用程序开发。 他们估计,如果不使用Eclipse RCP,则最初的应用程序开发将花费30个月而不是14个月。

RPC Software也很满意Eclipse作为Eclipse RCP开发的IDE。 通常,PDE开发环境使RCP开发成为与Java开发相当的一流活动。 插件功能支持文件的许多自定义编辑器降低了如果需要手动编辑配置文件的情况下的进入障碍。 他们还能够利用Eclipse IDE插件(例如Jasper Report Generator和Eclipse TPTP插件)来加快开发活动。

未来发展方向

RPC计划在将来继续利用开源软件来增强其产品。 如前所述,他们即将推出的CORE CRM产品将通过SugarCRM提供基于Web的CRM访问其解决方案套件。 他们还正在考虑将CORE Business产品中使用的各种报告技术迁移到Eclipse BIRT产品。 最后,将在该产品的下一版本中完成工作,以通过Eclipse Update站点功能向CORE Business客户端安装分发产品更新和供应商目录。

翻译自: https://www.infoq.com/articles/rpc-eclipse/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

eclipse rcp

Eclipse Rich Client Application 开发自学教程 For The Eclipser salever 2011-3-28 根据最新版本的Eclipse 3.6 重新编写,每章都可独立于其他章节,内附的代码均可直接运行, 适合Eclipse 开发者参考。 声明 本教程素材来源于网络,经过本人的整理、添加以及部分的重写,将原有的 Eclipse3.3 版本的 一些内容完全迁移到 Eclipse3.6 版本上来。基于开源以及分享的精神,特地将教程分享到网络上, 希望所有需要的朋友因此而受益,也希望大家能有版本意识,转载时注明来自 salever@126.com。 之前有一套基于 Eclipse3.3 版本的教程,也是本人整理,由于本人的疏忽,导致网络上的版本 各不相同,但分享已久,无法改变,希望大家谅解并使用新版本的教程。 本教程由本人发布在 www.ceclipse.org 以及本人的 blog 中,希望对大家有所帮助,也希望各位 喜欢分享的朋友在转载时注明,谢谢。 序 Eclipse RCP 允许开发者使用 eclipse结构风格设计弹性的可扩展的应用程序,可重用Eclipse中 已存在的方法和编码模式。俗话说,万事开头难。Eclipse RCP 入手可能会比较困难、费时。接下 来我们将主要讲述如何让RCP 工作. 基于 Eclipse 3.6。 将涉及以下内容:创建第一个 RCP 程序,创建菜单和工具栏,查看,编辑,对话,外部 JAR 的用法,向一个 RCP应用程序产品中添加标志和帮助。 每一章都基本独立于其他章节。 目录 1 富客户端平台 ...................................................................................................................................... 9 1.1 概述 ............................................................................................................................................... 9 1.2 ECLIPSE RCP 建设风格——插件,扩展和扩展点 ..................................................................... 9 1.3 RCP与PLUGIN ................................................................................................................................ 9 2 创建第一个RCP程序 ........................................................................................................................ 11 2.1 创建一个RCP程序 ...................................................................................................................... 11 2.2 启动RCP程序 .............................................................................................................................. 15 2.3 程序VS 产品 .............................................................................................................................. 17 2.4 维护LAUNCH配置 ....................................................................................................................... 17 2.5 可能的APPLICATION ID 错误: .................................................................................................. 20 2.6 应用程序的PLUGIN ID ................................................................................................................ 21 3 ACTIONS的用法(菜单栏和工具栏) ............................................................................................ 22 3.1 概述 ............................................................................................................................................. 22 3.2 通过编码添加 ............................................................................................................................. 22 3.3 “扩展”方式添加菜单和工具栏 .................................................................................................. 25 3.4 添加全局快捷键 ......................................................................................................................... 31 3.4.1 Command+Handler+Binding 绑定 ...................................................................................... 31 3.4.2 Action+Command+Binding绑定 .......................................................................................... 33 4 系统托盘 ............................................................................................................................................ 37 5 视图 .................................................................................................................................................... 42 5.1 添加示例视图 ............................................................................................................................. 42 5.2 添加自定义视图 ......................................................................................................................... 47 5.3 向VIEW里添加ACTION ................................................................................................................ 52RCP/Plug-in开发自学教程 版权所有 转载请注明salever@126.com - 5 - 6 编辑器 ................................................................................................................................................ 58 6.1 概述 ............................................................................................................................................. 58 6.2 创建工程 ..................................................................................................................................... 58 6.3 添加编辑器 ................................................................................................................................. 59 6.4 调用编辑器 ................................................................................................................................. 67 6.5 实例:文本编辑器实现 ............................................................................................................. 68 6.5.1 新建工程 .............................................................................................................................. 68 6.5.2 添加菜单栏和工具栏 .......................................................................................................... 70 6.5.3 添加编辑器 .......................................................................................................................... 75 7 对话框 ................................................................................................................................................ 86 7.1 概述 ............................................................................................................................................. 86 7.2 预定义的对话框 ......................................................................................................................... 87 7.2.1 概述 ...................................................................................................................................... 87 7.2.2 创建工程 .............................................................................................................................. 87 7.2.3 添加菜单 .............................................................................................................................. 87 7.2.4 调用对话框 .......................................................................................................................... 87 7.3 用户自定义对话框 ..................................................................................................................... 89 7.3.1 概述 ...................................................................................................................................... 89 7.3.2 创建SWT/JFace工程 ........................................................................................................... 89 7.3.3 自定义Dialog ....................................................................................................................... 91 7.3.4 说明 ...................................................................................................................................... 97 8 向导 .................................................................................................................................................... 98 8.1 概述 ............................................................................................................................................. 98 8.2 示例 ............................................................................................................................................. 98 9 首选项 .............................................................................................................................................. 106RCP/Plug-in开发自学教程 版权所有 转载请注明salever@126.com - 6 - 9.1 首选项 ....................................................................................................................................... 106 9.2 使用首选项 ............................................................................................................................... 106 9.3 首选项页 ................................................................................................................................... 112 10 添加状态栏 .................................................................................................................................... 117 10.1 简介 ......................................................................................................................................... 117 10.2 安装状态栏 ............................................................................................................................. 117 10.3 初始化状态条 ......................................................................................................................... 118 10.4 控制状态栏 ............................................................................................................................. 120 11 透视图 ............................................................................................................................................ 123 11.1 简介 ......................................................................................................................................... 123 11.2 添加透视图 ............................................................................................................................. 123 11.3 显示透视图工具栏 ................................................................................................................. 128 11.4 显示透视图菜单 ..................................................................................................................... 130 12 进度条 ............................................................................................................................................ 133 12.1 简介 ......................................................................................................................................... 133 12.2 进度条对话框 ......................................................................................................................... 133 12.3 JOB进度条 ................................................................................................................................ 135 13 使用第三方JAR ............................................................................................................................. 140 13.1 概述 ......................................................................................................................................... 140 13.2 向构建路径中添加JAR ........................................................................................................... 140 13.3 使JAR在你的运行路径里有效 ................................................................................................ 141 14 提示和策略 .................................................................................................................................... 143 14.1 控制台日志 ............................................................................................................................. 143 14.2 保存用户的布局 ..................................................................................................................... 145RCP/Plug-in开发自学教程 版权所有 转载请注明salever@126.com - 7 - 14.3 获得DISPLAY ............................................................................................................................ 146 14.4 使用ECLIPSE的“保存”ACTION ................................................................................................. 146 14.5 向你的程序添加错误日志视图 ............................................................................................. 146 15 产品 ................................................................................................................................................ 149 15.1 概述 ......................................................................................................................................... 149 15.2 PRODUCT配置文件 ................................................................................................................... 149 15.3 测试你的产品 ......................................................................................................................... 153 15.4 欢迎页面 ................................................................................................................................. 153 15.5 商标 ......................................................................................................................................... 154 15.6 风格化LAUNCHING .................................................................................................................. 155 15.7 发布你的产品 ......................................................................................................................... 156 15.8 创建一个帮助插件工程 ......................................................................................................... 159 16 专题一 ECLIPSE的版本和发行包 .............................................................................................. 164 16.1 版本 VERSION ......................................................................................................................... 164 16.1.1 版本的理解 ...................................................................................................................... 164 16.1.2 Eclipse的版本 ................................................................................................................... 164 16.1.3 版本的选择和下载 .......................................................................................................... 164 16.2 发行包 EDITION ...................................................................................................................... 166 16.2.1 发行包的理解 .................................................................................................................. 166 16.2.2 Eclipse的发行包 ............................................................................................................... 166 17 专题二 ECLIPSE的国际化与语言包 .......................................................................................... 169 17.1 国际化 ..................................................................................................................................... 169 17.1.1 Externalize Strings ............................................................................................................ 169 17.1.2 中文属性文件 .................................................................................................................. 175 17.1.3 国际化文件 ...................................................................................................................... 176 17.1.4 指定语言环境 .................................................................................................................. 176RCP/Plug-in开发自学教程 版权所有 转载请注明salever@126.com - 8 - 17.1.5 Propedit工具 ..................................................................................................................... 177 17.2 语言包 ..................................................................................................................................... 177 17.2.1 Babel小组 ......................................................................................................................... 177 17.2.2 中文语言包的下载 .......................................................................................................... 178 18 专题三 DECORATOR与MARKER的使用 ................................................................................. 180 18.1 简介 ......................................................................................................................................... 180 18.2 扩展DECORATOR ...................................................................................................................... 180 18.3 扩展MARKER ........................................................................................................................... 184 19 专题四 RUN/DEBUG LAUNCHER实现 .................................................................................... 190 19.1 ECLIPSE RUN/DEBUG 实现流程 ............................................................................................... 190 19.2 扩展CONFIGURATIONTYPE ....................................................................................................... 192 19.3 扩展ILAUNCHSHORTCUT ......................................................................................................... 194 19.4 创建RUN/DEBUG CONFIGURATION界面 .................................................................................. 197 19.5 指定RUN/DEBUG显示图片 ..................................................................................................... 204 19.6 说明 ......................................................................................................................................... 205 20 专题五 EQUINOX P2 方式实现RCP自动更新 ......................................................................... 207 20.1 概述 ......................................................................................................................................... 207 20.2 示例 ......................................................................................................................................... 207 20.2.1 Feature概念 ....................................................................................................................... 207 20.2.2 配置Product ..................................................................................................................... 210 20.2.3 配置Feature ...................................................................................................................... 211 20.2.4 product导出 ...................................................................................................................... 213 20.2.5 配置Equinox P2 ............................................................................................................... 214 20.2.6 配置 Update Site ............................................................................................................. 215 21 专题六 COMMON NAVIGATOR FRAMEWORK初探 ............................................................. 216
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值