Вы находитесь на странице: 1из 5

1.

Опишем простенький класс, который будет предоставлять доступ к


некоторой информации. Пусть это будет счетчик вызовов:

@Singleton

public static class Counter {

private final AtomicInteger counter = new AtomicInteger(0);

public int getNext() {

return counter.incrementAndGet();

* This source code was highlighted with Source Code Highlighter.

2. Опишем сервис, который будет возращать нам что-то, попутно дергая


counter:

@Path("/hello")

public static class Resource {

@Inject Counter counter;

@GET

public String get() {

return "Hello, User number " + counter.getNext();

* This source code was highlighted with Source Code Highlighter.


3. Я воспользовался готовой интеграцией, она называется jersey-guice.
Интеграция осуществляется через сервлет/фильтр GuiceContainer, для
использования которого нужно объявить ServletModule из расширения guice-
servlet-module и указать, что нужные нам запросы будут обрабатываться
GuiceContainer, что позволит объявлять Jersey ресурсы в контексте Guice.

public static class Config extends GuiceServletContextListener {

@Override

protected Injector getInjector() {

return Guice.createInjector(new ServletModule(){

@Override

protected void configureServlets() {

bind(Resource.class);

bind(Counter.class);

serve("*").with(GuiceContainer.class);

});

* This source code was highlighted with Source Code Highlighter.

4. Осталось запустить все, используя сервлет-контейнер. Можно


воспользоваться встраиваемым контейнером. Вот код, который запускает
сервер:

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


int port = Integer.valueOf(System.getProperty("port"));

GrizzlyWebServer server = new GrizzlyWebServer(port);

ServletAdapter adapter = new ServletAdapter(new DummySevlet());

adapter.addServletListener(Config.class.getName());

adapter.addFilter(new GuiceFilter(), "GuiceFilter", null);

server.addGrizzlyAdapter(adapter, new String[]{ "/" });

server.start();

* This source code was highlighted with Source Code Highlighter.

Обратите внимание, что пришлось объявить пустой сервлет:

@SuppressWarnings("serial")

public static class DummySevlet extends HttpServlet { }

* This source code was highlighted with Source Code Highlighter.

Он нужен, что бы Guice-фильтр сработал. Если не будет ни одного сервлета,


Grizzly не будет передавать запрос никаким фильтрам.

Далее приведу весь код:

public class App {


@Path("/hello")

public static class Resource {

@Inject Counter counter;

@GET

public String get() {

return "Hello, User number " + counter.getNext();

@Singleton

public static class Counter {

private final AtomicInteger counter = new AtomicInteger(0);

public int getNext() {

return counter.incrementAndGet();

public static class Config extends GuiceServletContextListener {

@Override

protected Injector getInjector() {

return Guice.createInjector(new ServletModule(){

@Override

protected void configureServlets() {


bind(Resource.class);

bind(Counter.class);

serve("*").with(GuiceContainer.class);

});

@SuppressWarnings("serial")

public static class DummySevlet extends HttpServlet { }

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

int port = Integer.valueOf(System.getProperty("port"));

GrizzlyWebServer server = new GrizzlyWebServer(port);

ServletAdapter adapter = new ServletAdapter(new DummySevlet());

adapter.addServletListener(Config.class.getName());

adapter.addFilter(new GuiceFilter(), "GuiceFilter", null);

server.addGrizzlyAdapter(adapter, new String[]{ "/" });

server.start();

* This source code was highlighted with Source Code Highlighter.

Вам также может понравиться