如何从HttpServlet执行重力数据推送

时间:2014-01-03 16:26:12

标签: java spring http servlets graniteds

最近几天我正在玩GranideDS教程(使用Spring服务器和AIR客户端)
https://github.com/graniteds-tutorials/graniteds-tutorial-data

  

“本教程介绍如何构建一个简单的数据应用程序   管理用户帐户的数据库。所有连接的客户都是   使用GraniteDS long通知并同步数据更新   投票频道。“

不幸的是我找不到任何GraniteDS javascript客户端库或示例 我使用http(ajax)请求创建了一个HttpServlet来管理(例如添加实体)persistense上下文。

我的TestServlet.java

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;     

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
        AccountService srvObject = (AccountService) wac.getBean("testService");
            //testService mean spring service annotation parameter
        Account emp = new Account();
               emp.setName(request.getParameter("name"));
               emp.setEmail(request.getParameter("email"));
        srvObject.save(emp);
        response.getWriter().println("OK");
    }
}

此方法正确添加实体,但连接的客户端数据未同步。如何通知所有客户有关新变化的信息?

更新 我试图将DataEnabled的发布更改为PublishMode.ON_COMMIT

@DataEnabled(topic="dataTopic", publish=DataEnabled.PublishMode.ON_COMMIT, useInterceptor=true)

添加到application-context.xml

<graniteds:tide-data-publishing-advice/>

在这种情况下,air应用程序和servlet导致服务器错误:

  

严重:无法为ON_COMMIT发布模式注册同步,   检查Spring PlatformTransactionManager是否支持它   TransactionInterceptor的顺序低于   TideDataPublishingInterceptor

并且<graniteds:tide-data-publishing-advice order="-1"/>没有帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用useInterceptor = true尝试模式ON_SUCCESS “useInterceptor = true”是必要的,因为它会使GraniteDS意识到你的服务完全在其控制之外被调用