3

使用从“yo jhipster”生成并以“mvn spring-boot:run”和“grunt server”开始的新脚手架应用程序,我能够加载应用程序并执行登录、查看指标、查看会话、设置、日志等操作和审计。但是,每当我查看“用户跟踪器”页面时,我什么都看不到?

我相信本节应该演示 Atmosphere websocket / AngularJS 集成?查看浏览器控制台日志,我看到以下内容:

Websocket failed. Downgrading to Comet and resending atmosphere.js:2866
GET http://0.0.0.0:9000/websocket/activity?X-Atmosphere-tracking-id=0&X-Atmosph…true&X-Cache-Date=0application%2Fjson&X-atmo-protocol=true&_=1393276976964 404 (Not Found)   

似乎尝试了 websocket 连接但最终超时并且后备长轮询不起作用?我正在使用最新的 Chrome(也在最新版本的 Firefox 和 Safari 上尝试过)。

我错过了一些简单的东西吗?

-- 更新 1 --

将其作为 WAR 部署到 Tomcat 7.0.50 会在 User Tracker 页面中显示从 Atmosphere 返回的数据,但它会不断循环尝试获取 WebSocket 连接(HTTP 状态代码 101:切换协议),因此用户数据会定期出现和消失。我在 Chrome 中看到这样的错误:

No suspended connection available. Make sure atmosphere.subscribe has been called and request.onOpen invoked before invoking this method 

Tomcat 日志显示以下内容:

[WARN] org.atmosphere.cpr.DefaultAnnotationProcessor - Unable to detect annotations. Application may fail to deploy.

-- 更新 2 --

将其作为 WAR 部署到 Jetty 8.1.14.v20131031(Jetty 9.1.1.v20140108 抛出错误)并使用 Chrome 32.0.1700.107 对其进行测试似乎适用于长轮询的后备传输。然而,与 WebSockets 的初始连接失败了,因为 Atmosphere 出于某种原因认为 servlet 容器是 Tomcat?在服务器日志中,它会引发以下问题:

java.lang.ClassCastException: org.eclipse.jetty.server.Request cannot be cast to org.apache.catalina.connector.RequestFacade
    at org.atmosphere.container.TomcatWebSocketUtil.doService(TomcatWebSocketUtil.java:141)
    at org.atmosphere.container.Tomcat7Servlet30SupportWithWebSocket.service(Tomcat7Servlet30SupportWithWebSocket.java:62)

再次感谢您的所有帮助-肯定会取得进展:)

-- 更新 3 --

总结一切:

  1. 目前“mvn spring-boot:run”和“grunt server”不能一起用于 Websockets 或长轮询
  2. 如果您将 JHipster WAR(mvn 包)部署到 Jetty 8.1.14.v20131031,那么它可以工作,但您需要从您的 JHipster pom.xml 中删除以下依赖项,否则 Atmosphere 将不提供 WebSocket 支持:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    
  3. 啊。误报——我使用流而不是 websockets 运行它,所以 websockets 仍然有来自 update2 的错误
4

1 回答 1

3

不,你没有错过任何东西:-)

如果您直接使用 Java 服务器,它应该可以工作:您需要使用另一个浏览器(或另一个选项卡)连接到应用程序,然后您会看到工作正常。

但是,对于“grunt server”,有一个错误:Grunt 代理只是不支持 Websocket,所以它不起作用......有一件奇怪的事情,因此,回退传输不起作用。

我将其填充为错误。

-- 更新 1 --

关于您的更新,看起来还有另一个 Atmosphere 错误: http ://atmosphere-framework.2306103.n4.nabble.com/Log-warning-that-Atmosphere-is-unable-to-detect-annotations-td4658159.html

Atmopshere 似乎在 WAR 中找不到它的注释,您可以在开发模式下尝试相同的操作(“mvn spring-boot:run”)吗?这意味着这是 Tomcat 中的 WAR 问题

于 2014-02-24T21:54:30.077 回答