Wicket + Atmosphere + Guice

Опитвам се да конфигурирам Atmosphere и това е, което получавам, когато публикувам събитие в EventBus

java.lang.IllegalStateException: MeteorServlet not defined in web.xml
at org.atmosphere.cpr.Meteor.build(Meteor.java:170) ~[atmosphere-runtime-1.0.8.jar:1.0.8]
at org.atmosphere.cpr.Meteor.build(Meteor.java:151) ~[atmosphere-runtime-1.0.8.jar:1.0.8]
at org.atmosphere.cpr.Meteor.build(Meteor.java:137) ~[atmosphere-runtime-1.0.8.jar:1.0.8]
at org.atmosphere.cpr.Meteor.build(Meteor.java:124) ~[atmosphere-runtime-1.0.8.jar:1.0.8]
at org.apache.wicket.atmosphere.AtmosphereBehavior.onResourceRequested(AtmosphereBehavior.java:107) ~[wicket-atmosphere-0.7.jar:0.7]
... 56 common frames omitted

Използвам Wicket, това е реализация на AjaxButton onSubmit:

public void onSubmit(AjaxRequestTarget target, Form<?> form) {
      EventBus.get().post(message.getModelObject());
}

Конфигурирам Atmosphere с помощта на Guice. В моето внедряване на ServletModule:

Map<String, String> params = new HashMap<String, String>();
            params.put("applicationClassName", "org.mycompany.MyWebApplication");
            params.put(ApplicationConfig.PROPERTY_SERVLET_MAPPING, "/session/**");
            params.put(ApplicationConfig.PROPERTY_SESSION_SUPPORT, "true");
            params.put(ApplicationConfig.WEBSOCKET_PROTOCOL, "org.atmosphere.websocket.protocol.EchoProtocol");
            params.put(ApplicationConfig.BROADCAST_FILTER_CLASSES, "org.apache.wicket.atmosphere.TrackMessageSizeFilter");
            filter("/session/**").through(AtmosphereFilter.class, params);

Това е моята атмосфера.xml:

<atmosphere-handler context-root="/session/**"
    class-name="org.atmosphere.handler.ReflectorServletProcessor">
</atmosphere-handler>

Искам да конфигурирам филтри програмно, мога ли да го направя с атмосферни филтри? Ако да, какво правя погрешно?


person Alexandra    schedule 01.03.2013    source източник
comment
можеш ли да публикуваш своя web.xml?   -  person Bizmarck    schedule 06.03.2013
comment
‹listener› ‹listener-class›org.mycompany.MyGuiceModule‹/listener-class› ‹/listener› ‹filter› ‹filter-name›guice.filter‹/filter-name› ‹filter-class›com.google.inject .servlet.GuiceFilter‹/filter-class› ‹/filter› ‹filter-mapping› ‹filter-name›guice.filter‹/filter-name› ‹url-pattern›/*‹/url-pattern› ‹/filter- картографиране ›   -  person Alexandra    schedule 07.03.2013
comment
Знам, че сега е малко късно, но първата грешка е, че нямате сервлета MeteorServlet или Atmosphere, дефиниран в web.xml. Вижте примера тук: search.maven.org/   -  person Bizmarck    schedule 12.03.2013
comment
И така, не мога ли да дефинирам Atmosphere servlet в модула guice?   -  person Alexandra    schedule 12.03.2013
comment
и не мога ли да използвам wicket-atmosphere интеграция?   -  person Alexandra    schedule 12.03.2013
comment
Би трябвало да може. Видяхте ли и този пример: jfarcand.wordpress .com/2009/12/17/   -  person Bizmarck    schedule 12.03.2013
comment
Да, вече съм виждал този пример. Въпросът ми е относно използването на wicket-atmosphere с Guice   -  person Alexandra    schedule 12.03.2013


Отговори (1)


Проблемът е решен. Използвайки MeteorServlet вместо AtmosphereFilter, тогава atmosphere.xml не е необходим и трябва да предадете WicketFilter начални параметри на MeteorServlet.

person Alexandra    schedule 29.05.2013
comment
Искате ли да споделите вашето решение, например как да позволите на Guice да инстанцира WicketFilter? - person Ferdinand Beyer; 04.09.2013
comment
Използвах MeteorServlet. Трябва да декларирате съпоставяния на филтри в GuiceServletContextListener, ето моето решение: new ServletModule { void configureServlets() { serve("/*").with(MeteorServlet.class, filterParams);} } - person Alexandra; 05.09.2013
comment
Да, но при тази настройка Atmosphere ще създаде WicketFilter без да използва Guice (от параметъра filterName), така че да не можете да използвате инжектора за вашето уеб приложение. И в моите експерименти следователно не успях да използвам guice.servlet обхвати като RequestScope... Благодаря все пак! - person Ferdinand Beyer; 06.09.2013