我正在尝试用运行在Equinox上的OSGi包中的更好的Jetty服务器替换Sun服务器。
我已经尝试过了:
System.setProperty("com.sun.net.httpserver.HttpServerProvider","org.mortbay.jetty.j2se6.JettyHttpServerProvider");但是,当调用endpoint.publish(url)并派生服务器时,它会报告org.mortbay.jetty.j2se6.JettyHttpServerProvider.的ClassNotFoundException
但是,包中有正确的jars,实际上在Activator中我可以实例化一个org.mortbay.jetty.j2se6.JettyHttpServerProvider.
我认为这是某种类路径问题--衍生的服务器可能在不同的类路径中?我尝试在JDK级别添加JAR,但这没有任何区别。
有没有人能说明一下,到底怎么才能让它工作起来呢?
附言:也许丑陋的System.setProperty调用有一天会从世界上消失。希望:)
发布于 2009-12-10 17:25:18
Equinox有一个Jetty6.x支持的OSGi标准HttpService的实现。这只是一个包含正确的包的问题,并且您可以相当容易地在Equinox中运行Jetty。但是,我发现a) Jetty对您来说是完全隐藏的,您所看到的只有HttpService接口,以及b) HttpService接口相当简单。您只能添加servlets+mappings和一些静态资源
发布于 2009-12-11 00:17:59
我似乎不能回复omerkudat,所以我不得不把回复放在这里…
如果包含osgi jar,Metro似乎不会使用Jetty。你似乎需要这个:
http://docs.codehaus.org/display/JETTY/J2se6HttpServerSPI
我手动编译了它,并如上所述设置了系统属性,但没有成功。
发布于 2009-12-11 06:19:53
问题是工厂不支持OSGi,并且加载工厂的类没有对Jetty实现的引用。问题不在于它是否在捆绑包中(您似乎已经将其组合在一个捆绑包中),而在于工厂方法是否在一些核心代码中,而这无法解析Jetty。
实例化HttpServer的调用不是Sun的一部分,而是Sun的内部类之一-因此,当在非Sun上运行时,此调用将失败。最好找出如何使用Metro来做一些事情,而不是使用这个工厂方法,以便将类组合在一起。
https://stackoverflow.com/questions/1876126
复制相似问题