【问题标题】:Updating certain view programmatically from a JMS listener class从 JMS 侦听器类以编程方式更新某些视图
【发布时间】:2012-12-06 02:15:11
【问题描述】:

我能够将 ActiveMQ 集成并在我的 OpenXava 应用程序中创建一个 JMS 使用者。现在,我需要用接收到的数据更新某些瞬态视图 该消息,它有几个问题需要考虑,例如...如何从 JMS 侦听器 java 类中去并将更改推送到当前视图? ... 和 假设特定视图是当前视图!!!,但当前视图可以是整个应用程序中的几种可能视图中的任何一种!!! ... 所以?所以?... 然后我确实认为,我会将 JMS 消息持久化到某个实体中(作为数据库中的临时存储),即使这会导致性能低下,但是之后 那...如果某些用户正在查看瞬态视图,我将如何推送最近的更改。

我习惯于使用一些启用了 ajax 的 JSF 实现来构建我的 webapps,然后我可以在 JMS 监听器中接收消息,然后得到一个 jsf 托管 bean 引用并使用 Ajax 推送刷新所有可能由查看应用程序的一个或多个用户打开的会话,因此这总是产生一个 一种实时应用程序,它更新任何打开的视图(如果视图是用户正在观看的视图)。

那么,有没有办法在我的 OX 应用程序中使用 JMS 侦听器类来实现这一点??

提前致谢,

【问题讨论】:

    标签: ajax jms push listener openxava


    【解决方案1】:

    一个选项可以是使用 JavaScript 定期调用以了解是否在表中添加了新记录或其他内容,以及是否刷新大小写。

    如果您是 liferay,您可以使用 JavaScript 代码在该页面中创建一个 portlet。此代码可以使用 DWR 进行调用,如果有新数据可以直接调用“CRUD.refresh”操作。

    类似这样的:

    refreshData = function() {
       openxava.executeAction('YourApplication', 'YourModule', '', false, 'CRUD.refresh')
       setTimeout('refreshData()', 5000);
    }
    setTimeout('refreshData()', 5000);
    

    我没有测试这段代码,所以它肯定不能按原样工作。把它当作一个想法。

    真的,这是一个肮脏的把戏。理想的情况是 OpenXava 将直接支持 Comet,您只需调用服务器中的方法即可完成此操作。你认为为 OX 增加彗星支持值得吗?

    【讨论】:

    • 嗨哈维尔,我不知道如何在我的 OX 应用程序中实现这个肮脏的技巧......我已经使用其他工具构建了 Ajax Push 应用程序,并且生成了只刷新部分或需要更新的页面组件,避免整个页面上的定期和可能不需要的更新,当然更新来自某些服务器的事件。我很确定如果 OX 可以支持 Comet,那应该很棒!。
    • 嗨@HayrolR,尝试解决问题,如果您遇到问题,我会帮助您。从定期调用“CRUD.refresh”的 JavaScript 代码开始。这不是最佳的,但很容易实现。之后,添加对 DWR 的调用以请求更改,并且仅在需要时调用“CRUD.refresh”。
    • 嗨 @HayrolR,关于向 OpenXava 添加 Comet 支持,我们需要一名志愿者。您愿意将此功能添加到 OX 并做出贡献吗?
    • Ok Javier 我会试试的,但是我应该在哪里添加 JavaScript 代码?,你能给我举个例子吗?顺便说一句,为 Comet 做出贡献可能会很好,即使我现在才刚刚进入 OX,我对它的开发方式也不太了解。那么,是否有一些关于的文档?,也许我可以加快学习速度。
    • 您可以将 JavaScript 代码放在自定义 portlet 中,并将该 portlet 放在 OX 模块的同一页面中。如果您想在没有门户的情况下执行您的应用程序,您可以将 JavaScript 代码放入文件夹 web/xava/editors/js 内的 JS 文件中
    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多