Starten der Wicket-Webanwendung mit dem OSGi HTTP-Dienst

Ich versuche, eine Wicket-Anwendung mit der Felix-Implementierung des OSGi-HTTP-Dienstes zu starten. Dazu registriere ich den Dienst einfach mitWicketServlet mitapplicationClassName Parameter:

props.put("applicationClassName", MainApplication.class.getName());
service = (HttpService)context.getService(httpReference);
service.registerServlet("/", new WicketServlet(), props, null);

Ich habe auch versucht, Felix Whiteboard-Implementierung zu verwenden und den Webdienst als zu registrierenServlet einer:

props.put("alias", "/");
props.put("init.applicationClassName", MainApplication.class.getName());
registration = context.registerService(Servlet.class.getName(), new WicketServlet(), props);

In beiden Fällen schlägt es fehl, wenn ich es mit Pax Runner und Felix (mvn package install pax:run -Dframework=felix -Dprofiles=log,config) scheint die Ausnahme mit der zu tun zu habenClassLoader:

[Jetty HTTP Service] ERROR org.apache.felix.http.whiteboard - Failed to register servlet
org.apache.wicket.WicketRuntimeException: Unable to create application of class es.warp.sample.HTTPLocalGUI.MainApplication
....
....
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
....
....

Ich habe versucht, alles im Bundle zu exportieren, und es funktioniert genauso.

Das Seltsamste ist, dass es perfekt funktioniert, wenn ich es mit Equinox einsetze (mvn package install pax:run -Dframework=felix -Dprofiles=log,config).

Es scheint ein Problem mit der Sichtbarkeit zu sein, aber ich weiß nicht, wie ich es beheben soll. Mache ich etwas falsch? Sollte ich versuchen zu verlängernWicketServlet Kontrolle über die Instanziierung der Anwendung zu übernehmen? Oder vielleicht mit einer Application Factory?

Update: Oder vielleicht mit einer Application Factory?

Ich habe versucht, den Parameter einzustellenapplicationFactoryClassName zuContextParamWebApplicationFactory.class.getName() es hat nicht geholfen, scheiterte immer noch mit felix und arbeitete mit equinox.

Jedes Licht ist willkommen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage