2009-12-09 6 views
0

Equinox에서 실행되는 OSGi 번들 내에서보다 나은 Jetty 서버를 위해 Sun의 HTTPServer를 교체하려고합니다.Metro + Jetty + OSGi = pain

나는이 시도했다 :

System.setProperty("com.sun.net.httpserver.HttpServerProvider","org.mortbay.jetty.j2se6.JettyHttpServerProvider"); 

하지만 endpoint.publish (URL)를 호출하고 서버가 양산 될 때, 그것은 org.mortbay.jetty.j2se6.JettyHttpServerProvider에 대한 ClassNotFoundException가 불평.

그러나 올바른 jar가 번들에 있고 실제로 Activator에서 org.mortbay.jetty.j2se6.JettyHttpServerProvider를 인스턴스화 할 수 있습니다.

이것이 클래스 패스 문제일까요? 스폰 된 서버가 다른 클래스 경로에있을 수 있습니다. 나는 JDK 레벨에서 JAR을 추가하려고 시도했지만, 이것은 아무런 차이가 없다.

지구상에서 어떻게하면 빛을 발산 할 수 있습니까?

P. 어쩌면 끔찍한 System.setProperty 호출이 언젠가는 세상에서 사라질 것입니다. 희망을 갖고 :)

답변

0

Equinox에는 Jetty 6.x가 지원하는 OSGi 표준 HttpService 구현이 있습니다. 올바른 묶음을 포함하는 것만으로도 평 치는 일로 쉽게 돌아갈 수 있습니다. 그러나, 나는 부두가 완전히 숨겨져있는 것을 발견했다. HttpService 인터페이스 만 보아라. b) HttpService 인터페이스는 다소 단순하다.

메트로 부두를 사용하지 않는 것 ... 당신은 서블릿 + 매핑과 내가 omerkudat 회신 수없는 것

0

일부 정적 리소스를 추가 할 수 있습니다, 그래서 여기에 답변을 넣어 했어 osgi jar를 포함하는 경우 당신이 필요로하는 것 : 내가 수동으로 컴파일

http://docs.codehaus.org/display/JETTY/J2se6HttpServerSPI

및 unsuccessfylly, 위와 같이 시스템 속성을 설정합니다.

0

문제는 공장이 OSGi를 인식하지 못하고 공장을로드하는 클래스에 부두 구현에 대한 참조가 없다는 것입니다. 여러분의 번들에 포함되어 있는지 (하나의 번들로 결합 된 것처럼 보이지만) 팩토리 메소드가 일부 핵심 코드에 있고 그것이 제티를 해결할 수 없다는 것은 아닙니다.

HttpServer를 인스턴스화하는 호출은 Java6 API의 일부가 아니며 Sun의 내부 클래스 중 하나입니다. 따라서이 호출은 Sun JVM이 아닌 다른 플랫폼에서 실행될 때 실패합니다. Metro를 사용하여 클래스를 함께 사용하기 위해이 팩토리 메서드를 사용하는 것 이외의 다른 작업을 수행하는 방법을 찾는 것이 좋습니다.

관련 문제