我正在使用Apache Felix for osgi。其他捆绑包运行得很好。我已经向反应堆添加了新的捆绑包。调用Activator.init()方法。但我永远不会进入updated()方法。有什么想法吗?
public class Activator extends DependencyActivatorBase implements ManagedServiceFactory {
private static final Logger logger = LoggerFactory.getLogger(Activator.class);
public static final String PID = "my.unique.pid";
private final Map<String, Component> components = new HashMap<>();
private volatile DependencyManager dependencyManager; /* injected by dependency manager */
@Override
public void init(BundleContext bc, DependencyManager dm) throws Exception {
Properties props = new Properties();
props.put(Constants.SERVICE_PID, PID);
dm.add(createComponent()
.setInterface(ManagedServiceFactory.class.getName(), props)
.setImplementation(this)
.add(createConfigurationDependency().setPid(PID))
);
dm.add(createComponent()
.setInterface(SessionRegister.class.getName(), null)
.setImplementation(SessionRegisterImpl.class)
);
dm.add(createComponent()
.setInterface(Plugin.class.getName(), null)
.setImplementation(PriorityActionHandler.class)
.add(createServiceDependency().setRequired(true).setService(PluginManager.class))
);
}
@Override
public void updated(String pid, Dictionary<String, ?> properties) throws ConfigurationException {
logger.debug("This method should be called and run!");
if (properties == null) {
logger.warn("Configuration is empty!");
return;
}
.
.
.
}
答案 0 :(得分:0)
init
方法可能不是您的意图。您创建了一个ManagedServiceFactory
的组件,其中PID
,并且您也使该组件具有服务依赖关系(转换为使其成为ManagedService
,具有相同的{{ 1}},这是不允许的,绝对令人困惑)。我假设你指的是这两个中的任何一个。
您现在拥有的更新方法假设您希望成为PID
,并且会为您提供的每个配置(一个或多个)调用更新。从您的代码中我无法看到您是否安装了Configuration Admin的实现,以及您是否真的以某种方式为此ManagedServiceFactory
提供了一个或多个配置。
如果此答案对您没有帮助,请提供更多信息以进一步查明此问题。