Джерси SSE не работает с Tomcat 7

Разочарованный, я отправляю этот вопрос. Я уверен, что я достаточно серфил, чтобы знать, что правильный ответ пока не обсуждается. Но если дело обстоит иначе, примите мои извинения и поделитесь со мной ссылкой на форум apt.

Я тестирую концепции SSE-трансляции с использованием API-интерфейса Jersey SSE.

Я не использую Maven или что-то еще. Поскольку проект для домашних животных, над которым я работаю, был запущен задолго до того, как я познакомился с Maven, следовательно, я вручную добавляю файлы Jar в папку lib Web-Inf

У меня есть следующие соответствующие банки

2/28/2016  06:58 PM            85,147 javax.json-1.0.4.jar
12/28/2016  06:58 PM            85,353 javax.servlet-api-3.0.1.jar
12/28/2016  06:58 PM           115,534 javax.ws.rs-api-2.0.1.jar
12/28/2016  06:58 PM           100,146 jaxb-api-2.2.7.jar
12/28/2016  06:58 PM           117,090 jersey-client-2.2.jar
12/28/2016  06:58 PM           600,514 jersey-common-2.2.jar
12/28/2016  06:58 PM            52,819 jersey-container-servlet-core-2.2.jar
12/28/2016  06:58 PM            18,107 jersey-container-servlet.jar
12/28/2016  06:58 PM           971,310 jersey-guava-2.24.1.jar
12/28/2016  06:58 PM            30,495 jersey-media-sse.jar
12/28/2016  06:58 PM           801,094 jersey-server-2.2.jar

Мой web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id="WebApp_ID" version="3.0">
   <display-name>SDTP-SS-UK-ERP</display-name>
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
      </filter-class>
       <async-supported>true</async-supported>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/struts/*</url-pattern>
   </filter-mapping>

    <!-- Jersey Support Configuration for RestFul WebServices -->
    <servlet>
         <servlet-name>jersey-serlvet</servlet-name> 
        <!-- <servlet-name>jersey-servlet</servlet-name>  -->
        <servlet-class>
            org.glassfish.jersey.servlet.ServletContainer
        </servlet-class>
         <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.rest.services,com.sse.services</param-value>

         </init-param>
        <!--  
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        -->
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>

    <servlet-mapping>
         <servlet-name>jersey-serlvet</servlet-name> 
        <!--   <servlet-name>jersey-servlet</servlet-name> -->
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

Файл регистрации моего теста SSE. Я использую это, чтобы зарегистрироваться на SSE:

     @Singleton
@Path("/sse")
public class SseTest extends ResourceConfig
{


    public SseTest() {
        super(SseTest.class, SseFeature.class);
    }

    public SseBroadcaster BROADCASTER = new SseBroadcaster();

     @GET
     @Path("/getSSE")
     @Produces(SseFeature.SERVER_SENT_EVENTS)
     public EventOutput getMessageQueue() 
     {
         EventOutput eventOutput = new EventOutput();

         this.BROADCASTER.add(eventOutput);
         System.out.println(eventOutput.toString());
         return eventOutput;
     }

// После регистрации я запускаю трансляцию через другой сервис

 @GET
 @Path("/test2/{id}")
 @Produces(MediaType.TEXT_PLAIN)
 //@Consumes(MediaType.TEXT_PLAIN)
 public String addMessage(@PathParam("id") final String msg) throws IOException
 {

    String misg= msg+"\\n\\n";
    OutboundEvent.Builder eventBuilder = new OutboundEvent.Builder();
    OutboundEvent event = eventBuilder.mediaType(MediaType.TEXT_PLAIN_TYPE).data(String.class, misg).build();
    System.out.println(event.getData());
    BROADCASTER.broadcast(event);
    return "Message '" + msg + "' has been broadcast.";
}

Теперь я поделюсь тем, что происходит в Chrome или Firefox:

Когда я вызываю сервис getSSE, браузер регистрирует поток событий, и даже в сведениях о сети есть вкладка eventStream с пустым идентификатором таблицы, типом, данными.

Когда я звоню в сервис /test2/10, он показывает 200 OK для этого и ответ отображается в браузере.

На вкладке getSSE первый getSSE отображается как завершенный, а другой getSSE - как ожидающий. Но данные источника событий все еще равны нулю.

После двойного вызова test2 вот результат:

Источник событий getSSE 200 sse.html:-Infinity 149 B 35,41 s
Источник событий getSSE 200 Прочее 149 B 11,0 мин
Источник событий getSSE 200 Другое 144 B Ожидание

Может кто-нибудь указать, почему я не получаю данные? Я не получаю никаких ошибок во время выполнения в Server End Java.

Сервер Tomcat 7.0.69 Java является JDK 1.7

Пожалуйста, помогите мне сделать эту работу.. Я теряю сон из любопытства, когда я иду не так, как надо

1 ответ

Решение

Проблема решена

Проблема с версиями библиотеки

Другие вопросы по тегам