karaf osgi getServiceReference返回null
是否有人有过无理由返回karaf osgi getServiceReference返回null,service,osgi,bundle,apache-karaf,osgi-bundle,Service,Osgi,Bundle,Apache Karaf,Osgi Bundle,是否有人有过无理由返回getServiceReference的经验 下面的bundle注册服务,然后继续确认它已注册(无论这是否是来自同一个包idk的有效测试) 获取注册服务的代码如下所示: import db.connector.DatabaseConnector; ... public List<Protocol> printAllEntries() { ServiceReference sr = Activator.getContext().ge
getServiceReference
的经验
下面的bundle注册服务,然后继续确认它已注册(无论这是否是来自同一个包idk的有效测试)
获取注册服务的代码如下所示:
import db.connector.DatabaseConnector;
...
public List<Protocol> printAllEntries() {
ServiceReference sr = Activator.getContext().getServiceReference(DatabaseConnector.class.getName());
DatabaseConnector dbc = (DatabaseConnector) Activator.getContext().getService(sr);
return dbc.getAllProtocols();
}
...
导入db.connector.DatabaseConnector;
...
公共列表printalentries(){
ServiceReference sr=Activator.getContext().getServiceReference(DatabaseConnector.class.getName());
DatabaseConnector dbc=(DatabaseConnector)Activator.getContext().getService(sr);
返回dbc.getAllProtocols();
}
...
DatabaseConnector捆绑包导出正确的包,使用该服务的捆绑包导入相同的包
这里可能出了什么问题?我完全不知所措。看起来还不错
我想到的是:订购可以吗?您确定在检查参考资料之前已完成注册吗?您签入printAllEntries的方式是检查服务是否就在此时。由于OSGi捆绑包可以来来往往,这不是一种可靠的检查方法。您应该使用ServiceTracker,或者更好地使用声明性服务或Blueprint
您可以将ServiceListener添加到BundleContext,然后可以按什么顺序打印发生的事情
希望这有帮助。看起来不错
我想到的是:订购可以吗?您确定在检查参考资料之前已完成注册吗?您签入printAllEntries的方式是检查服务是否就在此时。由于OSGi捆绑包可以来来往往,这不是一种可靠的检查方法。您应该使用ServiceTracker,或者更好地使用声明性服务或Blueprint
您可以将ServiceListener添加到BundleContext,然后可以按什么顺序打印发生的事情
希望这有帮助。事实证明,只是我没有刷新OSGi捆绑包。我的servlet指向一个现已过时的bundle ID,因此服务查找当然失败了。结果是,我没有刷新OSGi bundle。我的servlet指向一个现已过时的bundle ID,因此服务查找当然失败了。是的,使用服务跟踪器更好。是的,使用服务跟踪器更好。
267 [db.connector.DatabaseConnector] database-connector (144)
import db.connector.DatabaseConnector;
...
public List<Protocol> printAllEntries() {
ServiceReference sr = Activator.getContext().getServiceReference(DatabaseConnector.class.getName());
DatabaseConnector dbc = (DatabaseConnector) Activator.getContext().getService(sr);
return dbc.getAllProtocols();
}
...