我正在尝试使用 OSGi HTTP 服务的 Felix 实现来启动 Wicket 应用程序,为此我只需使用WicketServlet
withapplicationClassName
参数注册服务:
props.put("applicationClassName", MainApplication.class.getName());
service = (HttpService)context.getService(httpReference);
service.registerServlet("/", new WicketServlet(), props, null);
我还尝试使用 Felix Whiteboard 实现并将 Web 服务注册为Servlet
一个:
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。
欢迎任何光线。