java rest jersey guice hk2

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.