Java 如何从HttpServlet执行重力数据推送
前几天我在玩Granieds教程(使用Spring服务器和AIR客户端)Java 如何从HttpServlet执行重力数据推送,java,spring,http,servlets,graniteds,Java,Spring,Http,Servlets,Graniteds,前几天我在玩Granieds教程(使用Spring服务器和AIR客户端) “本教程介绍如何构建一个简单的数据应用程序 管理用户帐户数据库。所有连接的客户端都是 通知并与数据更新同步,使用长 轮询通道。” 很遗憾,我找不到任何javascript客户端库或示例。 我创建了一个HttpServlet,以使用http(ajax)请求管理(例如添加实体)persistense上下文。 我的TestServlet.java @WebServlet("/TestServlet") public class
“本教程介绍如何构建一个简单的数据应用程序 管理用户帐户数据库。所有连接的客户端都是 通知并与数据更新同步,使用长 轮询通道。” 很遗憾,我找不到任何javascript客户端库或示例。
我创建了一个HttpServlet,以使用http(ajax)请求管理(例如添加实体)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
@DataEnabled(topic="dataTopic", publish=DataEnabled.PublishMode.ON_COMMIT, useInterceptor=true)
添加到application-context.xml
<graniteds:tide-data-publishing-advice/>
在这种情况下,air应用程序和servlet都会导致服务器错误:
严重:无法为ON_提交发布模式注册同步,
检查Spring PlatformTransactionManager是否支持它,以及
TransactionInterceptor的顺序低于
TideDataPublishingInterceptor
而且
没有帮助。您可以使用useInterceptor=true在成功时尝试该模式
“useInterceptor=true”是必要的,因为它会让GraniteDS意识到您的服务完全在其控制之外调用Hello William。如果我将
放在application-context.xml的末尾,则不会触发该服务器错误。但不幸的是,数据并没有更新。但我注意到,在本教程中,即使在GraniteDS控制范围内,客户机之间的数据也不会更新。看看我的另一个问题: