java - ¿Qué corresponde a asEagerSingleton en HK2 en Jersey 2?
rest guice (3)
Además de lo que dijo msknapp, también puedes usar @WebListener para el oyente de contexto de servlet para que no tengas que agregar el oyente a web.xml. Entonces tu oyente se verá como
@WebListener
public class SomethingListener implements ServletContextListener {
@Inject
private final Something something;
@Override
public void contextInitialized(ServletContextEvent sce) {
//put code about something here
}
}
Estoy desarrollando una API REST usando Jersey 2 y necesito que algunas de mis clases sean creadas al inicio y no solo cuando alguna solicitud de recursos la desencadena.
Entonces, lo que estoy preguntando es: ¿cómo logro que una instancia de SomethingImpl
definida a continuación aquí se cree en el inicio del servidor y no solo cuando alguien acierta en algo? En Guice usaría .asEagerSingleton()
.
Solicitud:
public class MyApplication extends ResourceConfig {
public MyApplication() {
register(new AbstractBinder() {
@Override
protected void configure() {
bind(" else").to(String.class);
bind(SomethingImpl.class).to(Something.class).in(Singleton.class);
}
});
register(SomeResource.class);
}
}
Alguna cosa:
public interface Something {
String something();
}
public class SomethingImpl implements Something {
@Inject
public SomethingImpl(final String something) {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
System.out.println(something() + something);
try {
Thread.sleep(4000);
} catch (final InterruptedException e) {
break;
}
}
}
}).start();
}
@Override
public String something() {
return "Something";
}
}
Algunos recursos:
@Path("/")
public class SomeResource {
private final Something something;
@Inject
public SomeResource(final Something something) {
this.something = something;
}
@GET
@Path("something")
public String something() {
return something.something();
}
}
En una versión posterior de hk2 que está integrada con Jersey (pero que se integrará pronto), puede tener servicios marcados @Immediate. Básicamente, estos comienzan tan pronto como se agregan a hk2. Sin embargo, para que funcione, deberá agregar el contexto Inmediato al sistema (ej. Https://hk2.java.net/2.2.0-b27/apidocs/org/glassfish/hk2/utilities/ServiceLocatorUtilities.html # enableImmediateScope% 28org.glassfish.hk2.api.ServiceLocator% 29 )
Sería una buena idea cabildear con el equipo de Jersey para tener habilitado este par de ámbito / contexto por defecto (ya habilitan cosas como el alcance PerThread)
He creado este problema: https://java.net/jira/browse/JERSEY-2291 para solicitar que Jersey habilite servicios intermedios de manera predeterminada.
Escriba una implementación de javax.servlet.ServletContextListener y agregue ese oyente a su web xml.
http://www.mkyong.com/servlet/what-is-listener-servletcontextlistener-example/