在Felix servletbridge war中添加OSGi片段包

时间:2012-11-09 12:26:30

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

我正在尝试创建托管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

1 个答案:

答案 0 :(得分:1)

我建议在您的软件包中添加pax-logging,它将避免登录OSGi世界的痛苦。 Pax-Logging

对于片段包,您只需将它们添加到常用的包中即可。我会在你的设置中说可能在bundles文件夹中。因为它是一个片段包,所以你获得的Exception是正确的,它不是一个“可开始”的包。它只会解析并希望附加到托管包。

顺便说一句,Felix能够使用片段包:))