多个端点可能无法部署到同一路径 - cometd和tomcat7

时间:2015-07-30 20:56:25

标签: cometd bayeux

我没有找到任何有希望的答案多个终端可能没有部署到同一路径虽然搜索了几个stackoverflows和google groups cometd相关主题。

Cometd版本:3.0.5 Tomcat版本:7.0.55

为Spring集成创建了BayeuxServer实例,如下所示。

@Bean(initMethod = "start", destroyMethod = "stop")
    @Singleton
    public BayeuxServer  bayeuxServer() {
        BayeuxServerImpl bayeuxServer = new BayeuxServerImpl();
        ***bayeuxServer.setTransports(new WebSocketTransport(bayeuxServer), new JSONTransport(bayeuxServer));***
        bayeuxServer.setOption(ServletContext.class.getName(), servletContext);
        bayeuxServer.setOption("ws.cometdURLMapping", "/cometd/*");
        bayeuxServer.addExtension(new org.cometd.server.ext.TimesyncExtension());
        servletContext.setAttribute(BayeuxServer.ATTRIBUTE, bayeuxServer);
        return bayeuxServer;
    }

实施例: https://github.com/cometd/cometd/blob/master/cometd-java/cometd-java-oort/src/test/java/org/cometd/oort/spring/OortConfigurator.java

在此设置期间,cometd和tomcat都尝试在错误日志中看到的相同路径上添加端点。

引起:java.lang.RuntimeException:javax.websocket.DeploymentException:多个端点可能未部署到同一路径[/ cometd]     在 org.cometd.websocket.server.WebSocketTransport .init(WebSocketTransport.java:93)

2015年7月30日下午4:35:02 org.apache.catalina.core.StandardWrapperValve调用 严重:为servlet cometd分配异常 javax.websocket.DeploymentException:多个端点可能未部署到同一路径[/ cometd]     在 org.apache.tomcat.websocket.server.WsServerContainer .addEndpoint(WsServerContainer.java:207)

我知道cometd与tomcat的搭配并不好。是否可以阻止tomcat添加与cometd创建的端点相同的端点?我需要在tomcat中部署应用程序。

1 个答案:

答案 0 :(得分:1)

我认为问题出在您的应用程序/设置中,而不是CometD或Tomcat。

这适用于CometD 3.0.5和Tomcat 7.0.63:

$ mvn archetype:generate -DarchetypeCatalog=http://cometd.org
...
Choose archetype: 
1: http://cometd.org -> org.cometd.archetypes:cometd-archetype-dojo-jetty9 (3.0.5 - CometD archetype for creating a server-side event-driven web application)
2: http://cometd.org -> org.cometd.archetypes:cometd-archetype-spring-dojo-jetty9 (3.0.5 - CometD archetype for creating a server-side event-driven web application)
3: http://cometd.org -> org.cometd.archetypes:cometd-archetype-jquery-jetty9 (3.0.5 - CometD archetype for creating a server-side event-driven web application)
4: http://cometd.org -> org.cometd.archetypes:cometd-archetype-spring-jquery-jetty9 (3.0.5 - CometD archetype for creating a server-side event-driven web application)
...
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 4

选择选项4后,会生成一个非常类似于您在问题中发布的代码段的配置bean,系统会提示您其他配置问题:

Define value for property 'groupId': : org.cometd.test
Define value for property 'artifactId': : cometd-tomcat
Define value for property 'version':  1.0-SNAPSHOT: : 1.0.0 
...

此时您可以构建war

$ cd cometd-tomcat
$ mvn clean install

war文件位于cometd-tomcat/target/cometd-tomcat-1.0.0.war。 将此文件复制到Tomcat的webapps目录,启动Tomcat,然后浏览http://localhost:8080/cometd-tomcat-1.0.0

这些步骤简要概述了CometD documentation primer

中描述的内容

对我来说就像一个魅力。

我建议您从这里开始,并修改此设置,添加应用程序所需的功能。