2013-10-03 2 views
0

У меня довольно простое приложение GWT, настроенное с использованием GWT-RPC и Guice. На данный момент я обслуживаю две вещи: службу GWT-RPC и апплет, который принимает заказы. Это выглядит примерно так:Использование Restet with Guice DI & GWT

public class MyGuiceModule extends ServletModule { 
@Override 
protected void configureServlets() { 
     serve("/path/to/service").with(MyGWTServiceImpl.class); 
     serve("/path/to/upload").with(MyUploadServlet.class); 
     //bunch of bindings follow... 
    } 
} 

я хотел бы быть в состоянии обслуживать Restlet ресурсы или Restlet приложения из одного приложения и настроить их в моем Guice модуле, а не web.xml. Раньше я настраивал REST для поддержки приложений GWT с помощью Restlet, но не использовал DI, поэтому я немного потерял, как это должно работать.

ета: вот мой web.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE web-app 
     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
     "http://java.sun.com/dtd/web-app_2_3.dtd"> 

    <web-app> 

    <filter> 
     <filter-name>guiceFilter</filter-name> 
     <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>guiceFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <listener> 
     <listener-class>com.whatever.MyGuiceBootstrap</listener-class> 
    </listener> 

    <!-- Default page to serve --> 
    <welcome-file-list> 
     <welcome-file>home.html</welcome-file> 
    </welcome-file-list> 

    </web-app> 

обновление

Это решает проблему, ура!

bind(ServerServlet.class).in(Singleton.class); 
    Map<String,String> initParams = new HashMap<String,String>(); 
    initParams.put("org.restlet.application", "path.to.your.RestletApplication"); 
    serve("/api/*").with(ServerServlet.class,initParams); 

Update2

Наконец пошел раствором я адаптировано из http://hpehl.info/google-appengine-restlet-guice.html, который позволяет мне с помощью инъекции в пределах моих ресурсов и одной линии, чтобы связать в guicemodule.

+0

Не могли бы вы предоставить свой 'web.xml', чтобы попасть в вашу проблему. Я не могу представить, что именно вы хотите настроить. –

+0

На данный момент web.xml просто загружает guiceContextListener. Затем Guice делегирует правильному сервлету (как настроено в MyServletModule), я добавлю его к вышеуказанному. То, что я хочу сделать, добавляет структуру отдыха на пути (say/api), используя тот же метод. Я думаю, что это возможно с майкой, но я предпочел бы использовать реслинг, если это возможно. Спасибо, что посмотрели! – tom

ответ

1

Restlet предлагает коммутатор Restlet -> Servlet с классом org.restlet.ext.servlet.ServerServlet. Вы должны связать это нужный путь, и пусть он знает имя вашего Application, как это:

serve("/api/*").with(ServerServlet.class); 
getServletContext().setAttribute(
    "org.restlet.application", "com.you.MyApplication"); 

Где com.you.MyApplication должен быть заменен с фактической реализацией org.restlet.Application класса.

+0

Брилл, приветствия! Похоже, что я был после. Следующая остановка - заставить DI работать для классов ресурсов. – tom

+2

Да, вы также можете настроить сервлет. Вместо '' используется в 'web.xml', вы можете создать' initParams = new HashMap 'и передать его в Servlet, например' serve ("/ api/*"). ((ServerServlet.class, initParams); ' –

+0

Итак, я связал его с помощью guice bind (ServerServlet.class) .in (Singleton.class); тем не менее, я получаю 404s, а не мир привет, я хочу :( – tom

0

Ну, я стараюсь добавить свой старый web.xml. Но это должно решить вашу проблему.

serve("/api/*").with(ApiServlet.class); 

Если вы не используете простой сервлет в качестве реализации вашего REST api, это будет немного сложно. Джерси также может быть интегрирован с Гисом.

+0

Это было то, что я изначально собирался сделать, вставить именно org.restlet.ext.servlet.ServerServlet. К сожалению, его можно настроить только через web.xml или отдельный файл restlet.xml, и я бы предпочел избежать этого. http://restlet.org/learn/javadocs/snapshot/gae/ext/org/restlet/ext/servlet/ServerServlet.html – tom

+0

Однако ваш комментарий побудил меня посмотреть пакет org.restlet.ext.servlet в более depth ann Я нашел ServletAdapter, который выглядит так, как будто он может делать то, что я хочу. Так что ура! http://restlet.org/learn/javadocs/snapshot/gae/ext/org/restlet/ext/servlet/ServletAdapter.html – tom

Смежные вопросы