有没有人有任何经验getServiceReference
返回null
什么似乎没有理由?karaf osgi getServiceReference返回null
以下包注册了服务,然后继续确认它已注册(无论这是否是来自同一包的idk的有效测试)。
package db.connector;
...
public class Activator implements BundleActivator {
private static ServiceRegistration registration;
...
public void start(BundleContext _context) throws Exception {
DatabaseConnector dbc = new DatabaseConnectorImpl();
registration = context.registerService(
DatabaseConnector.class.getName(),
dbc, null);
checkServiceRegistered();
}
...
public void checkServiceRegistered() {
System.out.println("Printing all entries:");
ServiceReference sr = context.getServiceReference(DatabaseConnector.class.getName());
DatabaseConnector dbc = (DatabaseConnector) context.getService(sr);
List<Protocol> result = dbc.getAllProtocols();
for(int i=0; i<result.size(); i++) {
Protocol p = result.get(i);
System.out.println("\t" + p.getId()+": "+p.getName()+"("+p.getOwner()+")");
}
}
}
输出成功运行,一切似乎都没问题。检查在karaf Web控制台,服务似乎是正确注册:
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();
}
...
的DatabaseConnector包导出正确的包,和一个使用服务导入相同。
这里可能会出现什么问题?我完全丧失了。
是的,使用服务跟踪器,这是好多了。 – 2013-03-22 11:54:34