我尝试从另一个包中获取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
答案 0 :(得分:1)
你的捆绑包早于osgi-over-slf4j。在这种情况下,无法在Activator的启动功能中找到该服务。
要避免此问题,您可以使用Declarative Services或其替代方法而不是Activator。