Использование Атмосфер-Джерси со встроенным причалом и Инъекцией объекта

У меня есть приложение на джерси во встроенном причале. Я хочу преобразовать его, чтобы использовать атмосферу-джерси, чтобы воспользоваться функциональностью кометы, и я немного застрял. Любая помощь с благодарностью. Мой код джерси использует jersey ServletContainer, настроенный с помощью ResourceConfig, для указания экземпляров ресурса.

ResourceConfig.registerInstances(resourceInstance);
new org.glassfish.jersey.servlet.ServletContainer(ResourceConfig);

Я не могу понять, как настроить ту же настройку для работы с атмосферой. Я вижу, что есть AtmosphereServlet. Можно ли предоставить ему экземпляр ресурса?

Вот как на данный момент устанавливается джерси / причал...

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.server.ResourceConfig;

public class HelloWorldJerseyJetty {

    // http://localhost:8080/resources/resource

    public static void main(String[] args) throws Exception {

        Server server = new Server(8080);

        ResourceConfig config = new ResourceConfig();
        config.registerInstances(new Resource("Hello World"));
        org.glassfish.jersey.servlet.ServletContainer jerseyServlet = new org.glassfish.jersey.servlet.ServletContainer(config);

        ServletContextHandler handler = new ServletContextHandler();
        handler.addServlet(new ServletHolder(jerseyServlet), "/resources/*");

        server.setHandler(handler);
        server.start();
        server.join();

    }

    @Path("resource")
    public static class Resource {

        private final String message;

        public Resource(String message) {
            this.message = message;
        }

        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String get() {
            return message;
        }
    }
}

Как я могу переключиться с Джерси на AtmosphereServlet и как я могу настроить его для использования экземпляра?

        ResourceConfig config = new ResourceConfig();
        config.registerInstances(new Resource("Hello World"));
        AtmosphereServlet atmosphereServlet = new AtmosphereServlet();
        atmosphereServlet.???

        ServletContextHandler handler = new ServletContextHandler();
        handler.addServlet(new ServletHolder(atmosphereServlet), "/resources/*");

1 ответ

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

    Server server = new Server(8080); 

    //static files handler        
    ResourceHandler resource_handler = new ResourceHandler();
    resource_handler.setDirectoriesListed(true);
    resource_handler.setWelcomeFiles(new String[] { "index.html" });
    resource_handler.setResourceBase("./src/main/webapp/");

    ContextHandler context1 = new ContextHandler();
    context1.setHandler(resource_handler);

    //Atmosphere
    AtmosphereServlet atmosphereServlet = new AtmosphereServlet();
    ServletHolder servletHolder = new ServletHolder(atmosphereServlet);
    servletHolder.setInitParameter("com.sun.jersey.config.property.packages","org.atmosphere.samples.chat.jersey");
    servletHolder.setInitParameter("org.atmosphere.websocket.messageContentType", "application/json");
    servletHolder.setAsyncSupported(true);
    servletHolder.setInitParameter("org.atmosphere.useWebSocket","true");

    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.addServlet(servletHolder, "/resources/*");

    HandlerList handlers = new HandlerList();
    handlers.addHandler(context1);
    handlers.addHandler(context);        

    server.setHandler(handlers);
Другие вопросы по тегам