最近几天我正在玩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"/>
没有帮助。
答案 0 :(得分:0)
您可以使用useInterceptor = true尝试模式ON_SUCCESS “useInterceptor = true”是必要的,因为它会使GraniteDS意识到你的服务完全在其控制之外被调用