2015-10-28 2 views
0

У меня возникла проблема с попыткой включить WebSockets в CometD. Моя конфигурация выглядит следующим образом:
- CometD 3.0.5
- Jetty 9.0.6,
- SpringMVC 3.2.4


web.xmlКак я могу исправить отсутствующий WebSocket ServerContainer, позволяющий использовать WebSockets с CometD, Jetty и Spring?

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 

    <servlet> 
     <servlet-name>cometd</servlet-name> 
      <servlet-class>org.cometd.server.CometDServlet</servlet-class> 
      <async-supported>true</async-supported> 
     </servlet> 

     <servlet-mapping> 
      <servlet-name>cometd</servlet-name> 
      <url-pattern>/cometd/*</url-pattern> 
     </servlet-mapping> 
    </servlet> 
    </web-app> 

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
    <bean id="bayeuxServer" class="org.cometd.server.BayeuxServerImpl" init-method="start" destroy-method="stop"> 
     <property name="options"> 
      <map> 
       <entry key="javax.servlet.ServletContext" value-ref="servletContext" /> 
       <entry key="ws.cometdURLMapping" value="/cometd/*" /> 
       <entry key="logLevel" value="0" /> 
       <entry key="timeout" value="15000" /> 
      </map> 
     </property> 
     <property name="transports"> 
      <list> 
       <bean id="websocketTransport" class="org.cometd.websocket.server.WebSocketTransport"> 
        <constructor-arg ref="bayeuxServer" /> 
       </bean> 
      </list> 
     </property> 
    </bean> 
</beans> 

Исключением, которое я получаю, является следующее:

java.lang.IllegalArgumentException: Missing WebSocket ServerContainer 
    at org.cometd.websocket.server.WebSocketTransport.init(WebSocketTransport.java:81) 
    at org.cometd.server.BayeuxServerImpl.initializeServerTransports(BayeuxServerImpl.java:260) 
    at org.cometd.server.BayeuxServerImpl.doStart(BayeuxServerImpl.java:122) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1608) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1549) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1387) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1128) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
    at com.app.gui.web.appContextLoaderListener.contextInitialized(appContextLoaderListener.java:25) 
    at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:788) 
    at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:434) 
    at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:780) 
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:284) 
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1322) 
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:732) 
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:490) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:118) 
    at org.eclipse.jetty.server.Server.start(Server.java:342) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:100) 
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:60) 
    at org.eclipse.jetty.server.Server.doStart(Server.java:290) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) 
    at com.app.jetty.AppJettyServer.main(appJettyServer.java:189) 

ответ

1

У вас есть серьезное несоответствие версий библиотек, которые вы используете. Stick с CometD 3.0.6, Jetty 9.2.13 и Spring 4.2.2.

Рекомендуемый способ установки скелета CometD веб-приложения заключается в следующем: primer instructions. Если вы используете Maven, это сводится к одной линии, чтобы создать веб-приложение скелет CometD, который работает из коробки с использованием Jetty Maven Plugin:

$ mvn archetype:generate -DarchetypeCatalog=http://cometd.org 

В противном случае вы можете взять сгенерированный war файл и развернуть его к Jetty после these instructions.

+0

К сожалению, я не могу обновить Jetty, и я не могу обновить Spring. Какая версия CometD подходит для Jetty 9.0.6 и SpringMVC 3.2.4? – dgliosca

+0

В любом случае, я сделал копию всего проекта и попытался с вашей конфигурацией, все равно не повезло ... – dgliosca

+0

Как и Joakim, Jetty 9.0.x не имеет реализации WebSocket, совместимой с CometD 3. Самая ранняя версия для CometD 3 - Jetty 9.2.1. – sbordet

0

Обновите свою версию Jetty до 9.2.x.

У 9.0.x нет поддержки JSR356, которую пытается настроить ваша конфигурация.

По состоянию на октябрь 2015 года, последняя стабильная Jetty релиз 9.2.x серии 9.2.13.v20150730

+0

Обновлено до jetty-all-9.2.0.v20140526 Не повезло, то же исключение ... – dgliosca

+0

Не используйте артефакт '' причал для вашей сборки '' (это не то, для чего артефакт существует) (https: //dev.eclipse.org/mhonarc/lists/jetty-users/msg06030.html)) –

+0

Я заменил jetty-all на артефакты, все еще такое же исключение ... – dgliosca

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