【问题标题】:Adding OSGi fragment bundles in Felix servletbridge war在 Felix servletbridge 战争中添加 OSGi 片段包
【发布时间】:2012-10-29 18:31:33
【问题描述】:

我正在尝试创建战争托管 OSGi 包。完整的配置应该能够托管 WAB 包,现在我尝试为此集成 pax-web-extender-war。 它需要一些依赖项,例如 slf4j-apislf4j-log4j12,问题是:我总是遇到这个异常:

org.osgi.framework.BundleException: Fragment bundles can not be started.
    at org.apache.felix.framework.Felix.startBundle(Felix.java:1782)

因为slf4j-log4j12 确实是一个片段包。我认为菲利克斯应该解决这个问题,但事实并非如此。所以我尝试将这个 jar 移动到 WEB-INF/lib,但随后由于 osgi 无法将其解析为捆绑包,因此连接失败。

所以,

  • 应该将片段包放在哪里
  • 是否应该在framework.properties 中以某种方式配置
  • Apache Felix 甚至能够处理片段包吗?

以下是战争的当前布局(注意它基于felix http桥示例)

.
└── WEB-INF
    ├── bundles
    │   ├── commons-fileupload-1.2.2.jar
    │   ├── commons-io-2.4.jar
    │   ├── hello-wab-1-SNAPSHOT.war
    │   ├── org.apache.felix.http.bridge-2.2.0.jar
    │   ├── org.apache.felix.http.samples.filter-2.2.0.jar
    │   ├── org.apache.felix.webconsole-4.0.0.jar
    │   ├── pax-web-api-2.1.0.jar
    │   ├── pax-web-extender-war-2.1.0.jar
    │   ├── pax-web-spi-2.1.0.jar
    │   ├── slf4j-api-1.6.6.jar
    │   ├── slf4j-log4j12-1.6.6.jar
    │   └── wrapper-json-1-SNAPSHOT.jar
    ├── classes
    │   └── org
    │       └── apache
    │           └── felix
    │               └── http
    │                   └── samples
    │                       └── bridge
    │                           ├── FrameworkService.class
    │                           ├── ProvisionActivator.class
    │                           └── StartupListener.class
    ├── framework.properties
    ├── lib
    │   ├── org.apache.felix.framework-4.0.3.jar
    │   ├── org.apache.felix.http.proxy-2.2.0.jar
    │   ├── org.apache.felix.webconsole-4.0.0.jar
    │   ├── org.osgi.compendium-4.3.0.jar
    │   └── wrapper-json-1-SNAPSHOT.jar
    └── web.xml

【问题讨论】:

    标签: osgi apache-felix osgi-fragment pax-web


    【解决方案1】:

    我建议将 pax-logging 添加到你的包中,它可以避免登录 OSGi 世界的痛苦。 Pax-Logging

    对于片段包,您只需将它们添加到通常的包中。我会在你的设置中说可能在 bundles 文件夹中。由于它是一个片段包,因此您得到的 Exception 是正确的,它不是一个“可启动”包。它只会解决并希望附加到托管捆绑包。

    顺便说一句,Felix 能够处理片段包:)

    【讨论】:

    • 这与我的问题有什么关系?
    • 将 pax-logging 添加到您的堆栈肯定会改善您的问题,而不是尝试使用片段进行配置,而是将 pax-logging 与 configuration-admin-service 结合使用来配置您的日志记录。它还提供了使用其他不同日志框架的机会,并且所有框架都将登录到同一个日志文件中。
    • 我明白了,这似乎是在解决日志记录问题,但问题是关于使用片段包。无论如何,我尝试添加 pax-logging,但没有成功 - 引用的文档信息量不大。您能否更具体地说明如何添加它?另外,最好是,我想知道如何将片段包与 felix 一起使用......
    • 希望添加一些关于片段的更多信息,一个问题,尽管您真的需要在 Web 容器中部署 OSGi 运行时,仅用于服务器 Web 内容吗?为什么不使用能够为 Web 内容提供服务的 OSGi 容器,例如 Apache Karaf,顺便说一句,您的日志记录问题也会随之消失:)
    • 感谢您添加的信息,也许 Felix 只是打印异常但实际上处理它,必须检查...关于您的问题,这个项目是相当综合的,只是为了隔离和演示问题。我实际面对的地方是复杂得多的项目,我在技术选择上非常有限。
    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 2012-06-26
    • 2014-05-11
    • 2012-04-29
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多