在osgi中不调用Activator.updated()方法

时间:2015-02-22 17:23:17

标签: osgi apache-felix activator

我正在使用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;
        }

.
.
.

    }

1 个答案:

答案 0 :(得分:0)

init方法可能不是您的意图。您创建了一个ManagedServiceFactory的组件,其中PID,并且您也使该组件具有服务依赖关系(转换为使其成为ManagedService,具有相同的{{ 1}},这是不允许的,绝对令人困惑)。我假设你指的是这两个中的任何一个。

您现在拥有的更新方法假设您希望成为PID,并且会为您提供的每个配置(一个或多个)调用更新。从您的代码中我无法看到您是否安装了Configuration Admin的实现,以及您是否真的以某种方式为此ManagedServiceFactory提供了一个或多个配置。

如果此答案对您没有帮助,请提供更多信息以进一步查明此问题。