Получение ошибки на примере pubsub с использованием Atmosphere + Jersey - PullRequest
3 голосов
/ 07 сентября 2011

Я следую инструкциям здесь http://jfarcand.wordpress.com/2011/06/29/rest-websocket-applications-why-not-using-the-atmosphere-framework/

У меня уже есть проект Jersey, который работает и работает нормально с использованием JBoss 7. Единственное отличие, которое у меня есть, это то, что я использую Jersey с Spring. Так что мой JQueryPubSub выглядит так

@Service  <-- For Spring component Scan
@Path("/pubsub/{topic}")
@Produces("text/html;charset=ISO-8859-1")
public class JQueryPubSub {

@PathParam("topic")
Broadcaster topic;

@GET
public SuspendResponse<String> subscribe() {
    return new SuspendResponse.SuspendResponseBuilder<String>()
            .broadcaster(topic)
            .outputComments(true)
            .addListener(new EventsLogger())
            .build();
}

@POST
@Broadcast
public Broadcastable publish(@FormParam("message") String message) {
    return new Broadcastable(message, "", topic);
}
}

Так что я хотел бы добавить этот пример, но я получаю

22: 55: 27,381 SEVERE [com.sun.jersey.spi.inject.Errors] (служебный поток MSC 1-3) Следующие ошибки и предупреждения были обнаружены с помощью ресурса и / или классы провайдера: SEVERE: отсутствует зависимость для поля: org.atmosphere.cpr.Broadcaster com.order.resources.JQueryPubSub.topic

Любые идеи, как я могу решить эту проблему и почему Джерси, кажется, настойчиво вводит ценность в вещателя ??

Ответы [ 2 ]

2 голосов
/ 12 июня 2012

У меня была та же проблема, и я смог ее исправить, обновив jarsey jar с 1.4 до 1.6. Если вы используете maven, вы можете добавить следующие зависимости.

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.6</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.6</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.6</version>
    </dependency>
1 голос
/ 31 марта 2014

Отвечая через долгое время ... но люди, которые пытаются, все еще могут извлечь из этого выгоду

Вы можете попробовать следующее.Я только что попробовал, и у меня это сработало

Step-1 Если вы используете weblogic 12 c, внесите следующие изменения

function subscribe() {
        var request = {
            url :document.location.origin+'/<your-context-path>/ws/pubsub/' + getElementByIdValue('topic'),

Step-2 В web.xml добавьте следующую конфигурацию

   <servlet>
<description>AtmosphereServlet</description>
<servlet-name>AtmosphereServlet</servlet-name>
<servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
<init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
  <param-value>*******package name where your handler is**********</param-value>
</init-param>
<init-param>
  <param-name>org.atmosphere.cpr.broadcasterCacheClass</param-name>
  <param-value>org.atmosphere.cache.UUIDBroadcasterCache</param-value>
</init-param>
<init-param>
  <param-name>org.atmosphere.cpr.broadcastFilterClasses</param-name>
  <param-value>org.atmosphere.client.TrackMessageSizeFilter
        </param-value>
</init-param>
    <init-param>
  <param-name>WEBSOCKET_PROTOCOL_EXECUTION</param-name>
  <param-value>true</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
 <servlet-name>AtmosphereServlet</servlet-name>
 <url-pattern>/pubsub/*</url-pattern>
</servlet-mapping>

step-3

вставьте приведенный ниже код в java-файл в пакете, который вы определили на предыдущем шаге (также можно найти на git-сайте Атмосфера)

import java.io.IOException;
import org.atmosphere.client.TrackMessageSizeInterceptor;
import org.atmosphere.config.service.AtmosphereHandlerService;
import org.atmosphere.config.service.Singleton;
import org.atmosphere.cpr.AtmosphereResourceEvent;
import org.atmosphere.handler.AtmosphereHandlerAdapter;
import org.atmosphere.interceptor.AtmosphereResourceLifecycleInterceptor;
import org.atmosphere.interceptor.BroadcastOnPostAtmosphereInterceptor;
import org.atmosphere.interceptor.SuspendTrackerInterceptor;
import org.atmosphere.util.SimpleBroadcaster;


@Singleton
@AtmosphereHandlerService(path = "/{chat}",
    interceptors = {
        AtmosphereResourceLifecycleInterceptor.class,
        TrackMessageSizeInterceptor.class,
        BroadcastOnPostAtmosphereInterceptor.class,
        SuspendTrackerInterceptor.class},
    broadcaster = SimpleBroadcaster.class)
public class AtmosphereHandler extends AtmosphereHandlerAdapter {

@Override
public void onStateChange(AtmosphereResourceEvent event) throws IOException {
    if (event.isSuspended()) {
        String message = event.getMessage() == null ? null : event.getMessage().toString();
        if (message != null && message.indexOf("message") != -1) {
            event.getResource().write(message.substring("message=".length()));
        } else {
            event.getResource().write("=error=");
        }
    }
}

}

Теперь разверните ухо, которое работает..

Jar-файлы

atmosphere-annotations-2.1.1.jar
atmosphere-jersey-2.1.1.jar
atmosphere-runtime-2.1.1.jar
atmosphere-weblogic-2.1.1.jar
commons-collections-3.2.1.jar
commons-dbutils-1.5.jar
commons-io-2.4.jar
jersey-core-1.17.1.jar
jersey-json-1.17.1.jar
jersey-server-1.17.1.jar
jersey-servlet-1.17.1.jar
log4j-1.2.15.jar
...