在Felix Servletbridge战争中添加OSGI碎片捆绑包



我正在尝试创建托管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确实是片段束。我认为Felix应该应对,但事实并非如此。因此,我试图将此罐子移至WEB-INF/lib,但是接线失败,因为OSGI无法将其作为捆绑包解决。

so,

  • 我应该放片段束吗?
  • 应该以某种方式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

我建议在您的束中添加pax-loggoging,它将消除OSGI世界中登录的痛苦。pax-loging

对于碎片捆绑包,您只需要将它们添加到通常的捆绑包中即可。我会在您的设置中说,可能在捆绑夹中。由于这是一个碎片捆绑包,因此您得到的例外是正确的,因此不是"可启动"捆绑包。它只会解决并希望附加到托管捆绑包上。

顺便说一句,Felix能够与片段捆绑在一起:)

最新更新