Eclipse RAP/RWT独立应用程序-最佳设计



我正在使用RAP/RWT设计一个,在Tomcat下工作。我现在正在学习RAP,脑海中浮现出几个问题。

我的应用程序有一个后端,可以不断地从某些来源收集数据。另一方面,我想创建一个作为Web应用程序运行的前端(RWT独立应用程序,或具有工作台功能的RAP,尚未决定)。

  • 第一个问题:我应该将后端作为一个单独的进程,并让前端RAP应用程序以某种方式与它通信吗?或者我可以在RAP应用程序中将所有内容集成在一起吗?把所有的东西整合在一起会引出第二个问题。

  • 第二个问题:我如何从RAP应用程序中检测,保存我的应用程序的浏览器窗口/选项卡何时关闭?我想在用户关闭图形界面(即关闭浏览器)时进行一些资源清理。在RWT独立应用程序中,我找不到任何与ApplicationWorkbenchWindowAdvisor#preWindowShellClose等效的东西。与启动应用程序时的dected相同。一般来说,在RWT独立应用程序中,是否存在遵循Web应用程序生命周期的回调?

非常感谢你的帮助!

关于您的第一点:当您使用EJB时,请注意,您只能从请求线程直接访问Java EE上下文。当您在JEE_COMPATIBILITY模式下运行时,这不是问题,但在SWT_COMPATIBILITY模式下,您可能需要通过RWT.requestThreadExec( Runnable );访问EJB。

至于您的第二个问题,RAP服务器当前未在浏览器关闭时得到通知。这个问题在bug 284273中讨论过——浏览器关闭时的会话终止机制。它还没有实现,因为IIRC我们找不到一种在所有浏览器中都能工作的可靠方法。

您可以使用a)JSExecutor在浏览器关闭时发送请求的客户端上放置一些JavaScript,以及b)PhaseListener来侦听这些请求并终止会话,从而实现自己的解决方案。

(*)第一:解耦始终是最佳实践。我使用RMI存根来接收来自后端应用程序(另一个RMI对象或EJB Bean)的通知。

 MyEJBListener stub = UnicastRemoteObject.exportObject(new MyEJBListener(display, page,
                                    manager, handlermanager), 0)
 MyEJBClient client1 = MyEJBLocator.findEJBClient("abc");
 client1.addListener(stub);

在存根中使用类似的东西

public void notify(Event event){
  UICallBack.activate("stubthread");
  Display..asyncExec(new Runnable() {
   // update event info
  });
}

(*)第二:方法WorkbenchWindowAdvisor#postWindowClose能帮到你吗?,并从后端应用程序调用somethig方法。

相关内容

  • 没有找到相关文章

最新更新