Использование Атмосфер-Джерси со встроенным причалом и Инъекцией объекта
У меня есть приложение на джерси во встроенном причале. Я хочу преобразовать его, чтобы использовать атмосферу-джерси, чтобы воспользоваться функциональностью кометы, и я немного застрял. Любая помощь с благодарностью. Мой код джерси использует 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);