You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by Kjell Otto <ot...@gmail.com> on 2012/10/10 14:05:11 UTC

Apache Felix with pax-create-project and scr-annotations

I've tried to use the scr annotations with apache felix and it worked out
after a bit of a hassle with where to put
what and how to configure it(reference:
http://stackoverflow.com/questions/12642706/how-to-use-org-apache-felix-scr-annotations-for-a-bundle-from-scratch/12660778#12660778).
But now it works and my components are running.

Now I wanted to get started with the command line extension. I have googled
arround and found more options then I would like to have. None of them
seems to be applicable for my setup. I would like to provide a new command
scope for my components to live in and be able to call them from the
command line.
Since as I already read from the mailing list, the new shell will be gogo,
how would I then integrate my commands into the gogo shell with annotations
from scr? Is there a way or to I need to refactor scr out and put blueprint
in?

There is not much documentation out there on how to integrate best now...
Shouldn't the old material be deleted by the time? Or flagged?
I would appreciate all hints and tips, thanks a lot.

Greetings,
Kjellski

Re: Apache Felix with pax-create-project and scr-annotations

Posted by Kjell Otto <ot...@gmail.com>.
Thanks for your answer, but I think I came up with something that might fit
my setup a bit more, maybe you can tell.

I've added the dependency to

    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.gogo.runtime</artifactId>
      <version><timeofwriting=0.10.0></version>
    </dependency>

And then, in my component, did the following in the @Activate method:

...
    private Set<ServiceRegistration> regs = new
HashSet<ServiceRegistration>();
    protected BundleContext context;

    @Activate
    void start(BundleContext context) {
      this.context = context;

      Hashtable dict = new Hashtable();
      dict.put(CommandProcessor.COMMAND_SCOPE, "scope");
      dict.put(CommandProcessor.COMMAND_FUNCTION,
InformationRegistryCommands.commands);


regs.add(context.registerService(InformationRegistryCommands.class.getName(),
new InformationRegistryCommands(registry, log), dict));

      this.log.log(LogService.LOG_INFO, "Added Commands.");
    }

...

Where InformationRegistryCommands.commands is a static array of the
functions the class implements for the component it serves.
In that class, InformationRegistryCommands I then use the service command
annotation:

    import org.apache.felix.service.command.Descriptor;

And annotate my methods like this:

    /**
     * Functions available to the gogo shell from this registry
     */
    public static String[] commands = {"show", "last"};
    ...

    @Descriptor("shows the last seen informations for the qualified
information")
    public void last(
            @Descriptor("full qualified information in the form:
\"<namespace>.<name>:<version>\"")
            String fullQualifier) {
      ...
    }

    @Descriptor("shows all registered informations")
    public void show() {
      ...
    }

At least this works but it seems completely undocumented. I would help out
when someone would be willing to put it on the scr or gogo pages online.

:)

2012/10/15 Felix Meschberger <fm...@adobe.com>

> Hi,
>
> Am 10.10.2012 um 14:05 schrieb Kjell Otto:
>
> > I've tried to use the scr annotations with apache felix and it worked out
> > after a bit of a hassle with where to put
> > what and how to configure it(reference:
> >
> http://stackoverflow.com/questions/12642706/how-to-use-org-apache-felix-scr-annotations-for-a-bundle-from-scratch/12660778#12660778
> ).
> > But now it works and my components are running.
> >
> > Now I wanted to get started with the command line extension. I have
> googled
> > arround and found more options then I would like to have. None of them
> > seems to be applicable for my setup. I would like to provide a new
> command
> > scope for my components to live in and be able to call them from the
> > command line.
> > Since as I already read from the mailing list, the new shell will be
> gogo,
> > how would I then integrate my commands into the gogo shell with
> annotations
> > from scr? Is there a way or to I need to refactor scr out and put
> blueprint
> > in?
>
> Extending Gogo is extremely simple: You just register a service (the
> actual service type does not matter) and declare two service registration
> properties:
>
>   * osgi.command.scope defining the namespace prefix
>   * osgi.command.function defining the command functions
>
> The osgi.command.function is a String[] listing public methods turned into
> commands. These methods are analyzed through reflection.
>
> As for annotations, all that's needed is something like:
>
>   @Property(name="osgi.command.scope", value="sample")
>   @Property(name="osgi.command.function", value={"c1", "c2"})
>
> This defines two commands sample:c1 and sample:c2.
>
> As an example of such a command class you might look at the DS ScrCommand
> [1] (this uses raw OSGi API to register the service and not DS but the
> priniciple for defining commands is the same)
>
> Hope this helps.
>
> Regards
> Felix
>
> [1]
> http://svn.apache.org/repos/asf/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ScrCommand.java
>
> >
> > There is not much documentation out there on how to integrate best now...
> > Shouldn't the old material be deleted by the time? Or flagged?
> > I would appreciate all hints and tips, thanks a lot.
> >
> > Greetings,
> > Kjellski
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org
>
>

Re: Apache Felix with pax-create-project and scr-annotations

Posted by Felix Meschberger <fm...@adobe.com>.
Hi,

Am 10.10.2012 um 14:05 schrieb Kjell Otto:

> I've tried to use the scr annotations with apache felix and it worked out
> after a bit of a hassle with where to put
> what and how to configure it(reference:
> http://stackoverflow.com/questions/12642706/how-to-use-org-apache-felix-scr-annotations-for-a-bundle-from-scratch/12660778#12660778).
> But now it works and my components are running.
> 
> Now I wanted to get started with the command line extension. I have googled
> arround and found more options then I would like to have. None of them
> seems to be applicable for my setup. I would like to provide a new command
> scope for my components to live in and be able to call them from the
> command line.
> Since as I already read from the mailing list, the new shell will be gogo,
> how would I then integrate my commands into the gogo shell with annotations
> from scr? Is there a way or to I need to refactor scr out and put blueprint
> in?

Extending Gogo is extremely simple: You just register a service (the actual service type does not matter) and declare two service registration properties:

  * osgi.command.scope defining the namespace prefix
  * osgi.command.function defining the command functions

The osgi.command.function is a String[] listing public methods turned into commands. These methods are analyzed through reflection.

As for annotations, all that's needed is something like:

  @Property(name="osgi.command.scope", value="sample")
  @Property(name="osgi.command.function", value={"c1", "c2"})

This defines two commands sample:c1 and sample:c2.

As an example of such a command class you might look at the DS ScrCommand [1] (this uses raw OSGi API to register the service and not DS but the priniciple for defining commands is the same)

Hope this helps.

Regards
Felix

[1] http://svn.apache.org/repos/asf/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ScrCommand.java

> 
> There is not much documentation out there on how to integrate best now...
> Shouldn't the old material be deleted by the time? Or flagged?
> I would appreciate all hints and tips, thanks a lot.
> 
> Greetings,
> Kjellski


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org