[英]Eclipse RAP / RWT Standalone applications - Best design?
我正在用RAP / RWT设计Tomcat下的RAP / RWT。 我现在正在学习RAP,我想到了几个问题。
我的应用程序具有一个可以连续从某些来源收集数据的后端。 另一方面,我想创建作为Web应用程序运行的前端(RWT独立应用程序,或具有工作台功能的RAP,尚未确定)。
第一个问题:我应该将后端作为一个单独的进程保留,并让前端RAP应用程序以某种方式与其通信吗? 还是可以将所有内容集成到RAP应用程序中? 将所有内容集成在一起会导致第二个问题。
第二个问题:什么时候关闭了保存我的应用程序的浏览器窗口/选项卡,我如何才能从RAP应用程序中检测到? 当用户关闭图形界面(即关闭浏览器)时,我想进行一些资源清理。 我在RWT独立应用程序中找不到与ApplicationWorkbenchWindowAdvisor#preWindowShellClose
等效的任何内容。 与启动应用程序时预期的相同。 通常,在RWT独立应用程序中是否存在遵循webapp生命周期的回调?
非常感谢你的帮助!
关于第一点:使用EJB时,请注意,您只能从请求线程直接访问Java EE上下文。 当您在JEE_COMPATIBILITY模式下运行时,这不是问题,但是在SWT_COMPATIBILITY模式下,您可能需要通过RWT.requestThreadExec( Runnable );
访问EJB RWT.requestThreadExec( Runnable );
。
关于第二个问题,RAP服务器当前未在浏览器关闭时通知。 错误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方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.