使用Eclipse富客户端平台和RADV6创建EJB客户端(二)

使用Eclipse 富客户端平台和Rational Application Developer V6创建EJB 客户端(二)

相关文章:

使用Eclipse富客户端平台和RAD V6创建EJB客户端(一)

使用 SWT 布局小窗口构建视图

现在我们将要构建视图。download file 中提供了 View 类。我们将会导入该类(装载我们通过视图模板生成的类)并且接下来检验代码的相关部分。启动之前,我们需要确定我们的插件所依赖的插件。在视图中我们将会使用标准窗口小部件工具箱(SWT)布局小窗口,因此我们需要设置包括布局小窗口的 Eclipse 插件的相关性。

选择 Dependencies 选项卡然后选择 Add (图 39)。定位 org.eclispe.ui.forms 插件。

图 39. 相关性

导入 download file 中提供的 View 类,装载所生成的类。在 src 文件夹下,右键单击com.ibm.issw.temperature.form.views 包,然后选择 Import (图 40)。

图 40. 导入视图

选择 File System 然后接下来选择 Next。浏览目录 C:/RCPEJBClient/View ,并且将三个文件导入包中,如图 41 所示。

图 41. 导入文件系统资源

您应该获得将要装载现有类的警告。选择 Yes To All (图 42)。

图 42. 装载类警告

打开导入的 TemperatureView.java (图 43)。

图 43. 打开导入的视图

我们将会集中于两种方法(图 44):

createPartControl(组合)—— 用于构建您的源自不同 SWT 小窗口的视图。

handleEvent() —— 在 inner 类中,提供了当点击 SWT 小窗口命令按钮时调用的逻辑。

图 44. Main 方法

createPartContol() 方法如清单 1 所示。代码使用了 FormToolkit 类帮助关于父组件的创建组件;在该情况下,创建所需的标签、按钮、以及文本框,并且将侦听器赋给按钮。侦听器是 View 的内部类。

清单 1

public void createPartControl(Composite parent){toolkit = new FormToolkit(parent.getDisplay());form. = toolkit.createScrolledForm(parent);form.setText(RcpMessages.getString("TemperatureView.Title"));GridLayout layout = new GridLayout(2,false);form.getBody().setLayout(layout);Label label = toolkit.createLabel(form.getBody(),"Enter temperature in Celsius: ");Text textBox = toolkit.createText(form.getBody(), "", SWT.BORDER);GridData gdText = new GridData(8);textBox.setLayoutData(gdText);Button button = toolkit.createButton(form.getBody(),RcpMessages.getString("TemperatureView.Button"),SWT.PUSH);Label result = toolkit.createLabel(form.getBody(), "");result.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));MyListener listener = new MyListener();listener.setInput(textBox);listener.setResult(result);listener.setParent(parent);listener.setFormToolkit(toolkit);button.addListener(SWT.Selection,listener);}

内部类的事件处理方法如清单 2 所示。在这一类中,读取了文本框的值以及使用 EJB 客户端 API 调用 EJB。代码查找 EJB home 并且获得远程接口。接下来调用该方法并且用结果值填充结果标签。(要记住,最好将 EJB 调用隐藏在业务委派之后而不是在插件代码中直接调用。对本文来说,我们简化了代码。通常不推荐从 view 中直接调用 EJB。)

清单 2.

public void handleEvent(Event event){try{InitialContext ctx = new InitialContext();String jndi = RcpMessages.getString("TemperatureView.JNDIName");Object bj = ctx.lookup(jndi);TempConverterHome homeRef = (TempConverterHome) PortableRemoteObject.narrow(obj, TempConverterHome.class);TempConverter serviceRef = homeRef.create();retVal = serviceRef.celciusToFarenheight(Integer.parseInt(textBox.getText()));System.out.println("TemperatureAction.testEJB EJB SuccessfulReturn=" +  + retVal);result.setText(textBox.getText() + " degrees Celsius isapproximately " +Integer.toString(retVal) + " degrees Fahrenheit!");} catch (Exception th){System.out.println("TemperatureAction.testEJB EJB call ex="+ th);th.printStackTrace();result.setText(th.getClass().getName() + ": " +th.getMessage());}}

也许您已经注意到了属性文件是用于避免 EJB JNDI 名称的硬编码以及应用程序服务器的定位。当部署 RCP 应用程序时,您可以将属性文件改变为针对实际的远程 EJB 定位。

清单 3

TemperatureView.JNDIName=ejb/TempConverterTemperatureView.Title=Celsius to Fahrenheit Temperature ConverterTemperatureView.Button=Convert to Fahrenheit

当构建插件时,您通常需要将插件添加到您的 plug-in.xml文件并且选择扩展点(在该情况下,您扩展了 View 插件)。对于我们来说这是额外的,因为我们在向导中使用 View 模板。您可以在 Extensions 选项卡中查看或者您可以浏览 plug-in.xml 资源。扩展配置如清单 4 所示。

清单 4

创建您自己的 RCP 工作台和透视图

因为我们正在开发 RCP 应用程序,使用缺省的 Eclipse 工作台,工作台是按照 IDE 定制的,不是很理想的。因此,我们将会构建我们自己的工作台以及透视图。我们将会导入类,下载文件提供了这些类,导入到我们的插件中,接下来向工作台以及透视图的 plug-in.xml 中添加条目。

右键单击 src 文件夹然后选择 Import (图 45)。

图 45. 导入类

选择 File system 然后选择 Next。浏览 C:/RCPEJBClient/RCPCode/src 文件夹并且导入三个类,如图 46 所示。

图 46. 导入类

将类导入 (默认包),它是根(图 47)。

图 47. 导入类

让我们检验这些类:

RcpWorkbenchAdvisor —— 用于创建我们的工作台。代码设置了某种配置,例如大小和标题,并且禁用某种缺省项。

清单 5

public class RcpWorkbenchAdvisor extends WorkbenchAdvisor {public String getInitialWindowPerspectiveId() {return "MyRCPPerspective";}public void preWindowOpen(IWorkbenchWindowConfigurer configurer) {super.preWindowOpen(configurer);configurer.setInitialSize(new Point(750, 600));configurer.setShowCoolBar(false);configurer.setShowStatusLine(false);configurer.setTitle("Temperature Converter");}}

MyRCPPerspective —— 向透视图中添加视图。这是透视图的初始布局。因为我们没有构建文件编辑的插件所以代码也禁用编辑器区域。

清单 6

public class MyRCPPerspective implements IPerspectiveFactory {public void createInitialLayout(IPageLayout layout) {layout.addView("com.ibm.issw.temperature.form.views.TemperatureView",IPageLayout.LEFT,0.66f,IPageLayout.ID_EDITOR_AREA);;layout.setEditorAreaVisible(false);}}

platform. —— RCP 应用程序的主类。创建了工作台并且启动了 RCP 应用程序。

清单 7

public class TempRCPApplication implements IPlatformRunnable {public Object run(Object args) throws Exception {WorkbenchAdvisor workbenchAdvisor = new RcpWorkbenchAdvisor();Display display = PlatformUI.createDisplay();try {int returnCode = PlatformUI.createAndRunWorkbench(display,workbenchAdvisor);if(returnCode == PlatformUI.RETURN_RESTART){return IPlatformRunnable.EXIT_RESTART;}else{return IPlatformRunnable.EXIT_OK;}} finally {display.dispose();}}}

关于当前添加的代码,我们需要将它添加到我们的 plug-in.xml 中去。选择 Extension 选项卡,然后接下来选择 Add (图 48)。

图 48. 添加扩展

因为我们在编写应用程序,所以我们需要扩展 org.eclipse.core.runtime.applications(图 49)。

图 49. 添加扩展

选择 Finish。

在 Extension Details 对话框中,添加作为标识的 RcpApplication (图 50)。

图 50. 添加扩展

右键单击扩展点并且选择 New => application (图 51)。

图 51. 添加扩展

右键单击 (application) 然后选择 New => run (图 52)。

图 52. 添加扩展

在 Extension Element Details 对话框中,浏览 TempRCPApplication 类(图 53)。.

图 53. 扩展元素细节

添加透视图、添加其它扩展并且选择 org.eclipse.ui.perspectives 扩展点(图 54)。

图 54. 扩展点的选择

右键单击该点并且选择 New => perspective (图 55)。

图 55. 添加扩展

在 Extension Element Details 中,如图 56 所示浏览 perspective 类:

图 56. 扩展元素细节

更新标识以符合类名(图 57):

图 57. 扩展元素细节

现在扩展应该表现为图 58 所示。通过选择 File => Save 或 Ctrl-S 保存插件配置。

图 58. 添加扩展

换句话说,您可以通过手动直接将它添加到 plug-in.xml 文件中,如清单 8 所示。附加的代码如黑体字所示:

清单 8

测试您的 RCP EJB 客户端

现在我们已经为运行 RCP EJB 客户端做好了准备。我们首先将会从 Application Developer 内部进行 RCP 应用程序的单元测试。接下来我们将会导出插件并且为在开发环境外部运行对其进行设置。

Application Developer 内部测试

关于 Eclipse 3.0 版本,您可以为了运行插件创建 launch configurations。这些 launch configuration 为了使用 WebSphere V6 JRE 需要进行设置(包括了 IBM Application Client for WebSphere Application Server 以及 WebSphere Application Server),通过 Perspective Preferences 进行添加。然而,不是使用 Eclipse,而是我们将会使用Application Developer,其中已经安装了 JRE。

从 Application Developer 的主菜单中选择 Run =>Run…。(图 59)。

图 59. 创建 launch configuration

在 Launch Configuration 向导中选择 Run-time workbench 以及 New (图 60)。

图 60. 创建 launch configuration

为 MyRCPClient 配置命名。在 Program to Run 部分中,选择您的插件,对于运行应用程序,选择 com.ibm.issw.temperature.form.RcpApplication,对于 JRE,选择 WebSphere v6 JRE(图 61)。

图 61. 创建 launch configuration

对于 VM arguments,通过 C:/RCPEJBClient/Snippet1.txt 所提供的代码(清单 9)输入如图 61 所示代码。还不能运行。VM arguments 是针对安装 IBM Application Client for WebSphere Application Server 目录。如果您将它安装在不同的目录下,是用那个目录。否则,使用 Application Developer 中定位于 /runtimes/base_v6 的 WebSphere 实例。

清单 9

-Djava.naming.provider.url=corbaloc::localhost-Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory-Dserver.root=C:/WebSphere6ND/AppClient-Dcom.ibm.CORBA.ConfigURL=file:C:/WebSphere6ND/AppClient/properties/sas.client.props-Djava.ext.dirs="C:/WebSphere6ND/AppClient/java/jre/lib/ext;C:/WebSphere6ND/AppClient/java/jre/lib;C:/WebSphere6ND/AppClient/classes;C:/WebSphere6ND/AppClient/lib;C:/WebSphere6ND/AppClient/lib/ext;C:/WebSphere6ND/AppClient/properties

在 Plug-in 选项卡上,我们需要包括我们的新插件所依赖的插件。我们能够容易地通过遵循图 62 所示的点击顺序完成这一内容。

图 62. 插件的依赖关系

选择 Apply,接下来选择 Run。客户端应该与图 63 相似。

图 63. 运行客户端

输入值,然后选择 Convert to Farenheit。

应该显示结果,与图 64 相似。(首次引用将会比后来的引用花费更长的时间,因为它需要与 WebSphere Application Server 建立初始的通信。)

图 64. 客户端结果

构建并运行 Application Developer 外部的 RCP 应用程序

为了运行 Application Developer 外部的 RCP 应用程序,我们将会需要使用导出插件向导。在 Eclipse 3 版本中,不存在任何 RCP 应用程序的导出机制,但您可以使用二进制构建完成这一流程。出于教学的目的,我们将亲自进行部署。

右键单击插件项目并且选择 Export (图 65)。

图 65. 导出插件项目

在 Export 对话框中(图 66)选择 deployable plug-ins and fragments,然后选择 Next。

图 66. 导出插件项目

从可部署的插件及片断对话框中选择我们的插件,选择将其作为 directory structure 进行配置,接下来在目录上对其进行配置如图 67 所示。选择 Finish。

图 67. 导出插件项目

将要运行 PDE 导出向导(图 69)。

图 68. PDE 导出向导

我们需要 BAT 文件来启动应用程序。为简单起见,由 download file 中提供。将 BAT 文件从 C:/RCPEJBClient/MyRCPApp.bat 复制到您导出插件的目录。

BAT 文件将会使用应用程序客户端 JRE(假设 IBM Client for WebSphere Application Server位于 C:/WebSphere6ND/AppClient;否则,为了替换目录通过针对应用程序客户端更新初始的变量而更新脚本,或者针对 WebSphere Application Server 如果您不使用客户端的话)。(我们在测试关于 WebSphere Application Server Base 的 RCP 应用程序。如果,在生产中,您将会调用部署到集群的 EJB 应用程序,参数 Djava.naming.provider.url=corbaloc::localhost 应该拥有表示像这样一个集群:corbaloc:::,:: 的 URL。)

清单 10

set WAS_CLIENT_HOME=C:/WebSphere6ND/AppClientstart %WAS_CLIENT_HOME%/java/jre/bin/javaw-Djava.naming.provider.url=corbaloc::localhost-Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory-Dserver.root=%WAS_CLIENT_HOME%-Dcom.ibm.CORBA.ConfigURL=file:%WAS_CLIENT_HOME%/properties/sas.client.props-Djava.ext.dirs=%WAS_CLIENT_HOME%/java/jre/lib/ext;%WAS_CLIENT_HOME%/java/jre/lib;%WAS_CLIENT_HOME%/classes;%WAS_CLIENT_HOME%/lib;%WAS_CLIENT_HOME%/lib/ext;%WAS_CLIENT_HOME%/properties-cp startup.jar org.eclipse.core.launcher.Main-application com.ibm.issw.temperature.form.RcpApplication

因为我们亲自导出了插件,所以需要从我们的 Eclipse 安装目录复制 startup.jar 以及基础插件。在 Application Developer 之中,基础 Eclipse 定位到 Application Developer 安装目录下的 eclipse 目录(图 69)。

图 69. 复制 startup.jar

粘贴 startup.jar 到配置插件的目录。

图 70. 粘贴 startup.jar

接下来,复制所需插件:

org.eclipse.core.expressions_3.0.0org.eclipse.core.runtime_3.0.1org.eclipse.help_3.0.0org.eclipse.jface_3.0.0org.eclipse.osgi_3.0.1org.eclipse.platform_3.0.1.1org.eclipse.swt.win32_3.0.1org.eclipse.swt_3.0.1org.eclipse.ui.forms_3.0.0org.eclipse.ui.workbench_3.0.1.1org.eclipse.ui_3.0.1org.eclipse.update.configurator_3.0.0

记住,您可以使用二进制构建或脚本化 ANT 构建使该流程自动化。

图 71. 复制所需插件

通过 MyRCPApp.bat 运行应用程序。(再一次,初始请求会比后来的请求花费更长的时间。)

图 72. 运行客户端

结束语

这篇文章描述了如何使用 Eclipse Rich Client Platform. (RCP)构建 EJB 客户端应用程序。Eclipse 平台包括了大量的窗口、视图、框架(例如 Eclipse Modeling Framework),以及其它能够用于构建强大客户端应用程序的的扩展。了解如何使 Eclipse RCP 应用程序与 WebSphere Application Server 一体化对于构建一体化客户端应用程序是必不可少的。

本文配套源码

接受失败等于放松自己高压的心理,

使用Eclipse富客户端平台和RADV6创建EJB客户端(二)

相关文章:

你感兴趣的文章:

标签云: