Search code examples
apache-felixfelix-dependency-manager

Felix Dependecy-Manager not creating GoGo-Command


I am trying to create a GoGo-Shell-Command using the Felix-Dependency-Manager (Version 3.2.0) without Annotations.

As far as I understand, the gogo-runtime uses the whiteboard-pattern and scans for services with Properties using the keys CommandProcessor.COMMAND_SCOPE and CommandProcessor.COMMAND_FUNCTION.

In my case, the bundle is started, the service is registered with the correct properties but my command is not listed under "help" nor does it work when I try to call it.

The following code registers the service within the BundleActivator (DependencyActivatorBase):

Properties props = new Properties();
props.put(CommandProcessor.COMMAND_SCOPE, "test");
props.put(CommandProcessor.FUNCTION_SCOPE, new String[] {"command"});

manager.add(createComponent()
    .setInterface(Object.class.getName(), props)
    .setImplementation(MyConsole.class)
    .add(createServiceDependency()
        .setService(MyService.class)));

The following bundles are listed with lb-Command when running my code.

org.apache.felix.gogo.command
org.apache.felix.gogo.runtime
org.apache.felix.gogo.shell
org.apache.felix.dependencymanager
org.apache.felix.dependencymanager.shell
mybundle.service
mybundle.api
mybundle.console

Development is done with BndTools.

Am I missing something here?


Solution

  • First of all, your assumption about how to register gogo commands is correct: a whiteboard pattern is used and the scope and function properties determine the commands.

    You did not post the code for MyConsole. Does it actually contain a method called command? If not, that could be the problem.

    Another potential problem could be that you did not actually add a Bundle-Activator line in your manifest.

    If that's not it, use the dm notavail command to see if there are any unregistered components (because of missing dependencies).