无法从osgi-over-slf4j 1.7.7获取日志服务

时间:2014-09-01 09:55:52

标签: osgi

我尝试从另一个包中获取osgi-over-slf4j(SLF4j v1.7.7)包的日志服务,但在调用getServiceReference(...)时只获得null。

以下是尝试获取日志服务的另一个包中的代码。

public void start(BundleContext context) throws Exception {
    System.out.println(" ID State Name");
    Bundle[] bundles = context.getBundles();
    for (Bundle bundle : bundles) {
        printBundle(bundle.getBundleId(),
        getStateString(bundle.getState()), (String) bundle
            .getHeaders().get(Constants.BUNDLE_NAME),
        bundle.getLocation(), bundle.getSymbolicName());
    }
    ServiceReference ref = context.getServiceReference(LogService.class.getName());
    if (ref == null) {
        System.out.println("service ref. is null");
    } else {
        LogService ls  = (LogService) context.getService(ref);
             if (ls == null) {
               System.out.println(" Log is Null");
            } else {
               ls.log(LogService.LOG_DEBUG, "aaaaHahahahahaha");
             }
    }
}

以下是该捆绑包的MANIFEST.MF的一部分

   Import-Package: org.osgi.framework;version="1.5.0",
                   org.osgi.service.log;version="1.3.0",
                   org.osgi.util.tracker;version="1.4.0"
   Bundle-Activator: com.ktbcs.cjmf.log.factory.activator.LogServiceFactoryActivator

我确定osgi-over-slf4j已经有效。 我的环境是Windows 8上的Websphere 8.5。

欢迎任何建议。

谢谢,

anurak

1 个答案:

答案 0 :(得分:1)

你的捆绑包早于osgi-over-slf4j。在这种情况下,无法在Activator的启动功能中找到该服务。

要避免此问题,您可以使用Declarative Services或其替代方法而不是Activator。