代码之家  ›  专栏  ›  技术社区  ›  Ceilingfish

Cometd和Jetty 6/7的问题

  •  3
  • Ceilingfish  · 技术社区  · 15 年前

    我想从彗星开始( http://cometd.org/ )还有6号或7号码头,但我好像有问题。我有一个Ant脚本,它将我的代码打包成一个与我部署的Jetty版本相适应的Cometd 1.1.1二进制文件和Jetty二进制文件的战争(当我部署到Jetty 7.1.2.v21000523时为7.1.2.v21000523,当我部署到6.1.24时为6.1.24)。我第一次尝试使用版本7.1.2.v21000523进行设置,但当我尝试部署时,得到了一个非常长的堆栈跟踪示例:

    2010-05-26 15:32:12.906:WARN::Problem processing jar entry org/eclipse/jetty/util/MultiPartOutputStream.class
    java.io.IOException: Invalid resource
        at org.eclipse.jetty.util.resource.URLResource.getInputStream(URLResource.java:204)
        at org.eclipse.jetty.util.resource.JarResource.getInputStream(JarResource.java:113)
        at org.eclipse.jetty.annotations.AnnotationParser$2.processEntry(AnnotationParser.java:575)
        at org.eclipse.jetty.webapp.JarScanner.matched(JarScanner.java:152)
        at org.eclipse.jetty.util.PatternMatcher.matchPatterns(PatternMatcher.java:82)
        at org.eclipse.jetty.util.PatternMatcher.match(PatternMatcher.java:64)
        at org.eclipse.jetty.webapp.JarScanner.scan(JarScanner.java:75)
        at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:587)
        at org.eclipse.jetty.annotations.AbstractConfiguration.parseWebInfLib(AbstractConfiguration.java:107)
        at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:68)
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:992)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:579)
        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:381)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
        at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:36)
        at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:182)
        at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:497)
        at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:135)
        at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileChanged(ScanningAppProvider.java:77)
        at org.eclipse.jetty.util.Scanner.reportChange(Scanner.java:490)
        at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:355)
        at org.eclipse.jetty.util.Scanner.scan(Scanner.java:306)
        at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:258)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)
    2010-05-26 15:32:12.907:WARN::Problem processing jar entry org/eclipse/jetty/util/MultiPartWriter.class
    java.io.IOException: Invalid resource
        at org.eclipse.jetty.util.resource.URLResource.getInputStream(URLResource.java:204)
        at org.eclipse.jetty.util.resource.JarResource.getInputStream(JarResource.java:113)
        at org.eclipse.jetty.annotations.AnnotationParser$2.processEntry(AnnotationParser.java:575)
        at org.eclipse.jetty.webapp.JarScanner.matched(JarScanner.java:152)
        at org.eclipse.jetty.util.PatternMatcher.matchPatterns(PatternMatcher.java:82)
        at org.eclipse.jetty.util.PatternMatcher.match(PatternMatcher.java:64)
        at org.eclipse.jetty.webapp.JarScanner.scan(JarScanner.java:75)
        at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:587)
        at org.eclipse.jetty.annotations.AbstractConfiguration.parseWebInfLib(AbstractConfiguration.java:107)
        at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:68)
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:992)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:579)
        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:381)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
        at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:36)
        at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:182)
        at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:497)
        at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:135)
        at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileChanged(ScanningAppProvider.java:77)
        at org.eclipse.jetty.util.Scanner.reportChange(Scanner.java:490)
        at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:355)
        at org.eclipse.jetty.util.Scanner.scan(Scanner.java:306)
        at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:258)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)
    2010-05-26 15:32:12.907:WARN::Problem processing jar entry org/eclipse/jetty/util/Attributes.class
    java.io.IOException: Invalid resource
        at org.eclipse.jetty.util.resource.URLResource.getInputStream(URLResource.java:204)
        at org.eclipse.jetty.util.resource.JarResource.getInputStream(JarResource.java:113)
        at org.eclipse.jetty.annotations.AnnotationParser$2.processEntry(AnnotationParser.java:575)
        at org.eclipse.jetty.webapp.JarScanner.matched(JarScanner.java:152)
        at org.eclipse.jetty.util.PatternMatcher.matchPatterns(PatternMatcher.java:82)
        at org.eclipse.jetty.util.PatternMatcher.match(PatternMatcher.java:64)
        at org.eclipse.jetty.webapp.JarScanner.scan(JarScanner.java:75)
        at org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:587)
        at org.eclipse.jetty.annotations.AbstractConfiguration.parseWebInfLib(AbstractConfiguration.java:107)
        at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:68)
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:992)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:579)
        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:381)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55)
        at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:36)
        at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:182)
        at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:497)
        at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:135)
        at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileChanged(ScanningAppProvider.java:77)
        at org.eclipse.jetty.util.Scanner.reportChange(Scanner.java:490)
        at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:355)
        at org.eclipse.jetty.util.Scanner.scan(Scanner.java:306)
        at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:258)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)
    

    似乎浏览了所有的jetty二进制文件并抱怨每个类文件。

    当我试图部署到6.1.24时,我

    org.mortbay.util.MultiException[java.lang.NoClassDefFoundError: org/eclipse/jetty/util/ajax/JSON$Source, java.lang.NoClassDefFoundError: org/eclipse/jetty/util/thread/ThreadPool]
        at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:656)
        at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
        at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
        at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
        at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
        at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
        at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
        at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
        at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
        at org.mortbay.jetty.Server.doStart(Server.java:224)
        at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at org.mortbay.xml.XmlConfiguration.main(XmlConfiguration.java:985)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.mortbay.start.Main.invokeMain(Main.java:194)
        at org.mortbay.start.Main.start(Main.java:534)
        at org.mortbay.start.Main.start(Main.java:441)
        at org.mortbay.start.Main.main(Main.java:119)
    

    我的web.xml如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <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_2_5.xsd"
             version="2.5">
    
        <servlet>
            <servlet-name>cometd</servlet-name>
            <servlet-class>org.cometd.server.continuation.ContinuationCometdServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>cometd</servlet-name>
            <url-pattern>/cometd/*</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>initializer</servlet-name>
            <servlet-class>uk.co.dubit.nexus.comet.BayeuxInitializer</servlet-class>
            <load-on-startup>2</load-on-startup>
        </servlet>
    
        <!-- <filter>
            <filter-name>cross-origin</filter-name>
            <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>cross-origin</filter-name>
            <url-pattern>/cometd/*</url-pattern>
        </filter-mapping> -->
    
    </web-app>
    

    注:交叉原点过滤器被注释掉。当我试图在6.1.24上运行时,这个类似乎不存在(据我所知,这是正确的行为,是吗?).

    不好意思问个没用的问题,但有人知道我做错了什么吗?

    当做, 汤姆

    1 回复  |  直到 15 年前
        1
  •  2
  •   Ceilingfish    15 年前

    好吧,看来这里有几个问题要解决。首先,我在战争中捆绑的码头版本需要改变。我切换到7.0.2.v2010.0331。其次,我必须更改部署描述符

    <?xml version="1.0" encoding="UTF-8"?>
    <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_2_5.xsd"
             version="2.5">
    
        <servlet>
            <servlet-name>cometd</servlet-name>
            <servlet-class>org.cometd.server.continuation.ContinuationCometdServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>cometd</servlet-name>
            <url-pattern>/cometd/*</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>initializer</servlet-name>
            <servlet-class>uk.co.dubit.nexus.comet.BayeuxInitializer</servlet-class>
            <load-on-startup>2</load-on-startup>
        </servlet>
    
        <filter>
            <filter-name>continuation</filter-name>
            <filter-class>org.eclipse.jetty.continuation.ContinuationFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>continuation</filter-name>
            <url-pattern>/cometd/*</url-pattern>
        </filter-mapping>
    
    </web-app>
    

    最后还有一个额外的步骤,就是在Jetty6.1.24上部署一个war(这是我最后运行代码的版本),您必须在 contexts/ 目录。我的描述符看起来像

    <?xml version="1.0"  encoding="ISO-8859-1"?>
    <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
    <configure class="org.mortbay.jetty.webapp.WebAppContext">
      <Set name="contextPath">/cometd</Set>
      <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/nexus.war</Set>
    </configure>
    

    之后,可以从这个描述符中列出的/cometd路径访问我的servlet。