理由がないように思われる理由で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 Webconsole を確認すると、サービスが正しく登録されているようです。
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 バンドルは正しいパッケージをエクスポートし、サービスを使用するものは同じパッケージをインポートします。
ここで何がうまくいかない可能性がありますか?私は完全に途方に暮れています。