2009-12-09 19 views
0

Je suis en train d'échanger le serveur HTTPS de Sun pour le meilleur serveur Jetty, au sein d'un bundle OSGi, fonctionnant sur Equinox.Metro + Jetty + OSGi = douleur

J'ai essayé:

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

mais quand endpoint.publish (url) est appelée, et le serveur est donné naissance, il se plaint d'un ClassNotFoundException pour org.mortbay.jetty.j2se6.JettyHttpServerProvider.

Cependant, les jars corrects sont dans le bundle, et en effet dans l'activateur, je peux instancier un org.mortbay.jetty.j2se6.JettyHttpServerProvider.

Je pense que c'est une sorte de problème de chemin de classe - le serveur engendré est peut-être dans un chemin de classe différent peut-être? J'ai essayé d'ajouter les fichiers JAR au niveau du JDK, mais cela ne fait aucune différence.

Est-ce que tout le monde peut faire la lumière pour que ça marche?

P.S. Peut-être que les appels affreux System.setProperty disparaîtront du monde un jour. Espérons :)

Répondre

0

Equinox a une implémentation du standard HttpService OSGi soutenu par Jetty 6.x. C'est juste une question d'inclure les paquets corrects et vous avez Jetty fonctionnant assez facilement dans Equinox. Cependant, j'ai trouvé que a) Jetty est complètement caché de vous, tout ce que vous voyez est l'interface HttpService, et b) l'interface HttpService est plutôt simpliste. Vous ne pouvez ajouter servlets + applications et des ressources statiques

0

Je ne peux pas sembler répondre à omerkudat, donc j'ai dû mettre la réponse ici ...

Metro ne semble pas utiliser la jetée si vous incluez le pot osgi. Vous semblez avoir besoin de ceci:

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

Ce que je compilé manuellement, et défini comme ci-dessus, unsuccessfylly la propriété du système.

0

Le problème est que l'usine n'est pas compatible avec OSGi et que la classe qui charge l'usine ne fait pas référence à l'implémentation de Jetty. Ce n'est pas si c'est dans votre bundle (que vous semblez avoir combiné dans un paquet) mais plutôt que la méthode d'usine est dans un code de base, et cela ne parvient pas à résoudre Jetty. L'appel d'instanciation d'un HttpServer ne fait pas partie de l'API Java6, mais plutôt de l'une des classes internes de Sun - cet appel échouera donc lors de l'exécution sur des JVM non Sun. Il serait préférable de savoir comment utiliser Metro pour faire autre chose que d'utiliser cette méthode d'usine afin de rassembler la classe.