0

我有一个基于 Felix 的普通 OSGI 环境,我在其上部署了一个捆绑包,其中包含一个嵌入式 ActiveMQ 代理。我想在同一个 OSGI 环境中部署另一个包,它应该有一个嵌入式码头,ActiveMQ Web 控制台战争文件将部署在该码头上。我尝试通过生成嵌入式码头并将war文件部署为该捆绑包的一部分(bundleActivator Start Method),但它给了我以下异常 -

Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:431)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:393)

我在包类路径中有 Servlet-API jar(导入包并在包部署时被解析)。我还注意到 activemq-web-console-5.10.0.war 文件的 lib 文件夹也包含 Servlet-API jar。

所以,我认为可能是因为 Servlet-API jar 的重复,它抛出了这个异常并从我的包类路径中删除了 Servlet-API jar(删除了导入,也通过取消部署导出该包的包来尝试)但是在这个如果我的包没有被部署并且我收到了接线异常(因为 Jetty 依赖项显然需要那个 jar)。

我不想解压并再次打包war文件并尝试。

请注意:此 war 文件已成功部署在 Karaf 上,但我无法使用我自己的 felix 启动器将其部署在基于普通 Felix 的 OSGI env 上。

请帮忙 !

编辑

包含嵌入式码头的捆绑包被部署,但是当我启动它时,当码头正在启动(部署战争文件)时,上面的异常被抛出

结束编辑

4

1 回答 1

0

嗯,在那里从头开始重建卡拉夫?无论如何,您需要一个与您的 felix 环境一起运行的 web 容器来运行 web 控制台。因此,您需要运行 felix http-service 或 Pax Web Bundles(如在 Karaf 中)。您将偶然发现的下一件事将是获得令人满意且轻松的日志记录。这需要您自己创建或部署 Pax 日志包(同样在 Karaf 中)。有什么理由不坚持使用所有可用的基础设施捆绑包的 Karaf?

于 2014-12-13T19:30:47.493 回答