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

时间:2012-08-02 08:45:57

标签: eclipse eclipse-rap

我正在设计一个使用RAP / RWT,在Tomcat下工作。我现在正在学习RAP,我想到了几个问题。

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

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

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

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

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

至于你的第二个问题,目前没有通知浏览器关闭RAP服务器。 bug 284273 - Session kill mechanism on browser close中讨论了此问题。它还没有实现,因为IIRC我们找不到一种可靠的方法,可以在所有浏览器中使用。

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

答案 1 :(得分:0)

(*)首先:解耦始终是最佳实践。我使用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方法。