【发布时间】:2011-01-26 19:09:09
【问题描述】:
我正在尝试使用 OSGi HTTP 服务的 Felix 实现来启动 Wicket 应用程序,为此我只需使用 WicketServlet 和 applicationClassName 参数注册服务:
props.put("applicationClassName", MainApplication.class.getName());
service = (HttpService)context.getService(httpReference);
service.registerServlet("/", new WicketServlet(), props, null);
我也尝试过使用 Felix Whiteboard 实现并将 Web 服务注册为Servlet one:
props.put("alias", "/");
props.put("init.applicationClassName", MainApplication.class.getName());
registration = context.registerService(Servlet.class.getName(), new WicketServlet(), props);
在这两种情况下,当我使用 Pax Runner 和 Felix (mvn package install pax:run -Dframework=felix -Dprofiles=log,config) 部署它时,它都会失败,异常似乎与 ClassLoader 有关:
[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)
....
....
我已尝试导出捆绑包中的所有内容,但效果相同。
最奇怪的是,如果我使用 Equinox (mvn package install pax:run -Dframework=felix -Dprofiles=log,config) 部署它,它可以完美运行。
这似乎是一个可见性问题,但我不知道如何解决它,我做错了什么吗?我应该尝试扩展WicketServlet 以控制应用程序的实例化吗?或者也许使用应用程序工厂?
更新:或者可能使用应用程序工厂?
我尝试将参数 applicationFactoryClassName 设置为 ContextParamWebApplicationFactory.class.getName() 并没有帮助,仍然无法使用 felix 并使用 Equinox。
欢迎任何光线。
【问题讨论】:
标签: osgi wicket embedded-jetty apache-felix httpservice