我有OSGi应用程序 内嵌的Jetty 8.1.1服务器。
当我以单项( no OSGi environment) 运行我的应用程序时, 我可以成功注册 servlets, 调用 org. eclipse.jetty. servlet. servletContextHandler. addservlet (String className, String 映射)
方法。 所以我现在尝试在 OSGi 环境中也这样做 。
目标是写一个捆绑(servlet-extender
),该捆绑将登记其他捆绑启动时由其他捆绑提供的服务器(extender模式) 。 因此,在我的应用程序启动后,只有两个基本捆绑在运行中: jety
和 servlet-extender
。
<强度> 1 尝试写入 < code> servlet- extender : 强度>
首先,我决定在提供服务器的捆包的 MANIFEST.MF
档案中宣布使用其映射图的服务器。如果开始使用这种捆包,那么, servlet-externder
搜索其 MANIFEST.MF
的服务器映射声明。如果找到任何服务器映射声明,则使用所谓的 servlet-exterder
来实际登记服务器。add Servlet(...) 方法来实际登记服务器。
虽然这个想法似乎可以, 但班级加载有问题。 事实上, Jetty 调用 classs.forName ("org.my.servlets.MyServletClass"). newInstance ()
。 虽然 jety
bagn不导入 org.my.servlets
包, 但调用 > class > class.forName ("org.my. servlets.MyServletClass")
的调用 > class nonFoundexeption 失败了。
2nt 试图写入 servlet-extender
:
我在 OSGi 中搜索了与班级装货有关的一些文章 。 < a href="http://njbart.name/2010/08/30/osgi-reading-loading- classes.html" rel=“nofollow” >这个 < a>给我一个希望,希望我可以通过一些 OSGi 服务提供上载的服务器类。 因此我创建了 Servlet provid
服务
我理解,如果 jetty
balln将导入 org.my.servlets
软件包,这可以解决。 但是,当第3方提供 jetty
软件包时,这是不可能的,我不能修改它的 import-Package
声明。
如何动态登记任意捆绑提供的服务器? < 坚固> 坚固>
P.S.:我不能使用“OSGi Http Service”,因为我必须使用Jetty s 8.1.1 WebSocketServlet。