ここ数日、私は GranideDS チュートリアル (Spring サーバーと AIR クライアントを使用) で遊んでいました
https://github.com/graniteds-tutorials/graniteds-tutorial-data
「このチュートリアルでは、ユーザー アカウントのデータベースを管理する単純なデータ アプリケーションを構築する方法を示します。接続されているすべてのクライアントは、GraniteDS ロング ポーリング チャネルを使用して通知され、データの更新と同期されます。」
残念ながら、GraniteDS JavaScript クライアント ライブラリまたは例が見つかりません。
http(ajax)リクエストを使用して永続化コンテキストを管理(たとえばエンティティを追加)するためのHttpServletを作成しました。
私の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 アプリケーションとサーブレットの両方でサーバー エラーが発生します。
SEVERE: ON_COMMIT パブリッシュ モードの同期を登録できませんでした。Spring PlatformTransactionManager がそれをサポートしていること、および TransactionInterceptor の順序が TideDataPublishingInterceptor の順序よりも低いことを確認してください。
そして<graniteds:tide-data-publishing-advice order="-1"/>
役に立ちません。