BUG Community

Welcome! Log In

aturley's Blog

Adding Commands to the OSGi Shell

Usually you will want to interact with your BUG application using a GUI, a web service, or an interface provided by a module. But sometimes you want to be able to tell an app to do something without having to create a UI or a web service. The OSGi console provides an easy way to talk to a running app, or any other OSGi bundle. This document will explain how provide new commands that can be run from the OSGi console.


The OSGi console provides a way to interact with bundles in a running OSGi system. Bundles can be installed, started, stopped, removed, queried for things like their dependencies or the services they provide. There's a tutorial on the wiki that goes into some detail about accessing and interacting with the console. To see a list of the commands that are available, connect to the OSGi console and type "help" at the prompt. The list shows the name of the command, its usage, and a brief description. It will look something like this:

          (: help
          Command Usage____________________________Description___________________________________________________________________________
          bundles [filter]                         Returns a list of bundles present in current OSGi runtime environment.                
          consumers [(bundle id | bundle name)]... Returns a list of services that each bundle consumes is currently consuming.          
          disconnect                               Disconnect the shell.                                                                 
          exit                                     Stop all bundles and shutdown OSGi runtime.                                                                                                      
          gc                                       Collects the JVM garbage.                                                             
          getprop property_name                    Print the value of an OSGi property.  These properties are provided by BundleContext. 
          headers bundleId                         Returns the headers for a given bundle.                                               
          help  [filter]                           Print table of currently available commands.                                          
          install bundle_URL                       Install a bundle from the given URL.                                                  
          listen  [on|off]                         Enable or disable the console log listener.                                           
          package imports | exports [filter]       Returns a list of packages exported or imported in current OSGi runtime environment.  
          printenv  [filter]                       Returns the system settings.                                                          
          printlog  [filter]                       Displays log messages.                                                                
          producers [(bundle id | bundle name)]... Returns a list of services that each bundle is currently offering.                    
          quit                                     Stop the shell bundle.                                                                
          re [index | ?]                           Re-execute a previous command or display command history with '?' parameter.          
          services [Object Class Filter]...        Returns a list of services present in the runtime.                                    
          ss [filter]                              Returns a short summary of bundles present in current OSGi runtime environment.       
          start (bundle_Id | bundle_name)...       Starts the specified bundle.                                                          
          stop (bundle_Id | bundle_name)...        Stops the specified bundle.                                                           
          uninstall (bundle_Id | bundle_name)...   Uninstalls the specified bundle.                                                      
          update (bundle_Id | bundle_name)...      Updates the specified bundle. 


To add commands to the OSGi console, your program must create an object that implements the IShellCommandProvider interface and register that object as an OSGi service. The class that implements IShellCommandProvider has one method, called getCommands(), that returns a list of the commands that the service will provide. The commands themselves are described by objects that implement the ICommand interface. These objects provide information about each command, including its name, its usage, a description of what the command does, and a method that is called when the command is executed.

Here's a simple example of a class that implements ICommand. The command is called "helloworld", and it will log "hello world", followed by the number of times its initialize() and execute methods were called. It will also log any arguments that were passed to the command.

import java.io.OutputStream; import java.util.List; import java.util.ArrayList; import org.osgi.framework.BundleContext; import com.buglabs.osgi.shell.ICommand; import org.osgi.service.log.LogService; public class HelloWorldCommand implements ICommand { private int execs = 0; private int inits = 0; List args = null; @Override public void execute() { execs++; Activator.getLogger().log(LogService.LOG_INFO, "helloworld execs:" + execs + " inits:" + inits); for (Object a : args) { Activator.getLogger().log(LogService.LOG_INFO, a.toString()); } } @Override public String getDescription() { return "logs \"helloworld\" and stats"; } @Override public String getName() { return "helloworld"; } @Override public String getUsage() { return "[extra args]..."; } @Override public void initialize(List arguments, OutputStream out, OutputStream err, BundleContext context) { inits++; args = new ArrayList(arguments); } @Override public boolean isValid() { return true; } }

Here's a class that implements IShellCommandProvider and provides an instance of the ICommand from above.

import java.util.List; import java.util.ArrayList; import com.buglabs.osgi.shell.IShellCommandProvider; public class HelloWorldCommandProvider implements IShellCommandProvider { private List commands; @Override public List getCommands() { if (commands == null) { commands = new ArrayList() {{ add(new HelloWorldCommand()); }}; } return commands; } }

And finally, here's a bundle activator that will add the IShellCommandProvider from above to the running OSGi instance.

import java.util.List; import java.util.ArrayList; import java.io.OutputStream; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import com.buglabs.osgi.shell.IShellCommandProvider; import com.buglabs.osgi.shell.ICommand; import org.osgi.service.log.LogService; import com.buglabs.util.LogServiceUtil; public class Activator implements BundleActivator { private static LogService logger = null; private class HelloWorldCommand implements ICommand { private int execs = 0; private int inits = 0; List args = null; public void execute() { execs++; logger.log(LogService.LOG_INFO, "helloworld execs:" + execs + " inits:" + inits); for (Object a : args) { logger.log(LogService.LOG_INFO, a.toString()); } } public String getDescription() { return "logs \"helloworld\" and stats"; } public String getName() { return "helloworld"; } public String getUsage() { return "[extra args]..."; }; public void initialize(List arguments, OutputStream out, OutputStream err, BundleContext context) { inits++; args = new ArrayList(arguments); } public boolean isValid() { return true; } } public void start(BundleContext context) throws Exception { logger = LogServiceUtil.getLogService(context); context.registerService(IShellCommandProvider.class.getName(), new HelloWorldCommandProvider(), null); } public void stop(BundleContext context) throws Exception { } public static LogService getLogger() { return logger; } }

You will need to make sure that your manifest file includes com.buglabs.osgi.shell, com.buglabs.util, and org.osgi.service.log.

HelloWorldCommandExample is a working app that uses this example code. Once you put it on a BUG (or the BUG simulator), you can go to the OSGi console and type "help" to see the "helloworld" command listed. You can then type "helloworld a b c" to see it run. When you run it you will see something like this:


          (: helloworld a b c
          03/21 10:42:25:841	 INFO   	 helloworld  execs:1 inits:1	 
          03/21 10:42:25:847	 INFO   	 a	 
          03/21 10:42:25:857	 INFO   	 b	 
          03/21 10:42:25:866	 INFO   	 c

Post Comments

Add Your Comment!

Log in to leave a comment or Create an account


Congratulation for the great post. Those who come to read your article will find lots of helpful and informative tips. Buy Adderall online

new balance outlet online

h¨¹bsch, und ich wei? verdammt gut, sie haben kein Whisky,

Michael Kors Outlet Handbags

Roggen Vaters ber¨¹hren bekam . " " Ashley Wilkes sagte,

michael kors

dass sie eine Menge von Landschaft und Musik. Ashley

gucci bags

sterben Masse Kosten senken Kann unterlassen . Und VOR Allem

Michael Kors Outlet Store

Nicht KOPIEREN your TV -Star sofort nach der Show, ?h

Michael Kors Outlet

Nicht bezeichnet einen Nachahmer zu unterlassen . Kurz ges?gt, ?hm

kate spade

theslightest macht flattern und kreischen . "" Nun, man

prada outlet

kann nicht ihre Schuld . Sie haben zu schie?en Cade

Louis Vuitton Store

im Bein . "" Nun , ich wurde lickered oder

chanel outlet online

ich h?tte es nicht getan ", sagte Stuart .

Louis Vuitton Outlet

, bis wir sie aus. Alles, was sie werden wissen,




previous to you require one, rather earlier than a gum or tooth coach.com emergency
The expansion routine from it normally remains unidirectional One of them is kate spade store online Monavie multi level marketing Wealthy Affiliate University delivers a dynamic members only online Louis Vuitton Bags community nearly 10,000 participants strong! This isn't your average forum folks, the particular kate spade handbags Wealthy Affiliate University online community is definitely full of energetic members, several of kate spade bags which do this for a living full time, highly effective Online Marketers from Louis Vuitton purses all across the earth, who are able to, and do share with other Kate Spade New York members information about how 'they' are currently making $500 daily online for exampleAgain, Michael Kors Purses to educate them in the south in the morning and lowest at night chanel outlet online store Considering every single person on Twitter has a checklist of end users, they've coach factory outlet store got

Coach Outlet Online

I said,' Dad, I'm too old for a good

Coach Outlet

bye kiss.I'm too old for any kind

"Und alle Walzer ? "
Ist Die Person H?hle Kauf der Versicherung. Der Betrag , der f¨¹r Eine louis vuitton handbags bestimmte Menge des Versicherungsschutzes louis vuitton outlet berechnet WIRD ALS sterben louis vuitton Pr ? Mie . michael kors Life Insurance IST der michael kors Schl¨¹ssel zu Einer
Ersten red bottom shoes Teil der Anspr¨¹che zu louis vuitton zahlen - der so gucci genannte ¨¹berschuss - under michael kors outlet Etwas schief Geht . louis vuitton Die H louis vuitton bags ? Er gucci bags der Selbstbeteiligung Kann stark variieren je Nach Art der Versicherung. Mit der
InsuranceHelpline Neuseeland erm ?

I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I’ll be subscribing to your feed and I hope you post again soon.

Máy tập cơ bụng ad rocket

Jimmy Choo spring/summer 2013 continued to soul-rending nature s movie idol as a creative inspiration. Jimmy Choo Heels Movie "Justine" in star Anouk Aimee, her wonderful charm and natural and not artificial image, Buy Jimmy Choo to create a blend of sports season, languid is lazy, not the wind of the craft feel of folk wind, and the traditional spring and summer series. Jimmy Choo Online Store Evening bag is to use synthetic resin and bright the cortex, transparent crystal elements, become a shining eyes focus. Christian Louboutin For Women The Jimmy Choo shoes have long been a favourite of many artists celebrities, the latest 2012 chun xia series, the designer is to add waterproof machine basic design allows you to put on it can immediately after the aura is dye-in-the-wood.

Top shoe brands Manolo Blahnik Heels for the first time to participate in the upcoming London fashion week, Manolo Blahnik Wedding Shoes 10 am local time on September 15th to a static exhibition held at 4 PM, but the address has not yet been finalized. Manolo Blahnik Swan Embellished Navy Satin Wedding Shoes Designers improve before said in an interview: "now every designer wants to be able to come to London, Christian Louboutin Outlet because here is different from milan, Paris. Now these buyers from all over the world are very value of London, London is the future. Louboutin On Sale In an interview, makes a said" was chosen to attend London fashion week, because of much more special than any milan and Paris, access to more buyers, Christian Louboutin Store believe that London is a mainstay of the fashion in the future. "

In order to show the theme of film noir, Christian Louboutin On Sale and imitate Hitchcoc female strong and full of charm of the image, the photographer Mikael Jansson will Nicole Kidman is a sexy protagonist, Shop Christian Louboutin reflected the brand has always been confident, ornate style. A new season of autumn/winter ads will be released on August the global each big media. Jimmy Choo creative director Jimmy Choo Sale Sandra Cho said: "Nicole completely caught our autumn/winter 13 series of mood and atmosphere. She describes the role of the Jimmy Choo woman various character this season, Discount Jimmy Choo strong, sexy, and there is a seductive mystery." "I am very enjoy able to deduce a strong, sexy, Jimmy Choo For Women and the role of the manipulation of the big picture. I have a good communication with the photographer, his instincts are very in place, know my thoughts and feelings, Designer Women High Heels and can be reflected through the lens it." Nicole Kidman says.

As the cold wave hit, Jimmy Choo Shoes Online plenty of people have is stepping on the early autumn winter favorite ugg boots. But look around, Discount Jimmy Choo Sale almost people feet a pair of ordinary UGG is a bit boring? Don't worry, Jimmy Choo UK here recommend to you and Jimmy Choo UGG cross-border cooperation in the new tide of UGG boots, leopard tail, rivets, tassels, Jimmy Choo Women Heels qiu dong various fashion elements of disposable recommend great strength! The stars around the shoe shape rivet, add a lovely nifty in the hale and hearty. Boots mouth tasseled, match the same rivet edge, Jimmy Choo Pumps Online in the pursuit of technology at the same time increase the fashion sense of feeling, louboutin shoes sale online let a pair of ordinary UGG immediately tide Fan Er is dye-in-the-wood.

"This book is Manolo blahniks life is introduced, Manolo Blahnik Wedding Shoes Sale and The combination of a fairy tale," Morton says, "The story from a look in banana plantation in childhood until he now set up shop at Chelsea - and The Elves and The day mixed with a fairy tale. Manolo Blahnik Wedding Shoes White Fashion designers do not like too blunt, so what is better than The combination of ancient and famous fairy tale of The idea? Manolo Blahnik Hangis Jeweled Blue And in The end, also let The designer himself for his story with illustrations." Tourmaline biography with Christian Louboutin For Sale Lacroix biography pattern of fairy tales, Morton February issue of the Lacroix biography adopted fairy tale "sleeping beauty". Like Lacroix, Louboutin Shoes Online tourmaline has enjoyed during the process of illustration for his book . Jimmy Choo Pumps

Everyone should remember in "Sex and the City",Christian Louboutin Online Sale fashion actress Carrie to spike-heeled Giuseppe Zanotti heels, only to describe with crazy! Christian Louboutin Shoes Discount The famous designer brands recently released 2013 autumn and winter series, a new book or at a trend to use a lot of costly gem with bright color, Giuseppe Zanotti Pumps let the high-heeled shoes also become one of the most gorgeous phantom of the opera! Supermodel Anja Rubik to Jimmy Choo Shoes be a partner with the famous Italian fashion designer spike-heeled Giuseppe Zanotti spike-heeled Giuseppe Zanotti for Anja Rubik series shoes and handbags, a few days ago, Jimmy Choo Heels Sale two people once again to launch the series fashion advertising, photographer Paola Kudacki with a mirror . jimmy choo shop

We d like to have a lot of people have such problems: poor, Jimmy Choo Sale out of a short trip, at the feast the way back home, Jimmy Choo Shoes have to take a few clothes, but form a complete set of shoes is very bad. Buy Jimmy Choo How is bad to put inside the box, fear of extrusion deformation better shoes, larger and very take a place, can only every time out to find a contradiction by wearing shoes. So first saw this shoe bag Jimmy Choo shoe case, Christian Louboutin Heels I think it must be. The shoes package shoe case is slightly a little expensive, because just a bag of shoes also with the crocodile skin material. Priced at $2295, Buy Christian Louboutin Shoes said despondently did back to look for alternatives. Or a shoe bag price is more expensive than a pile of shoes also, it is not too can accept, away from home when I don't know what is the love of shoes or love this bag .
louboutin uk

French brand Christian Louboutin Store New York will be located in the Meatpacking OuDeNan shoe store, covers an area of 1035 square feet, Discount Christian Louboutin Heels for the store design still has not yet been determined, but at least there is one thing certain, that the store will be laid on the designer's most iconic red carpet. Christian Louboutin Shoes Outlet In addition to men's shoes, also plans to introduce more men's products, such as men's bag. French brand Christian Louboutin, Louis Vuitton Bags Sale Christian Louboutin brand Alexis Mourot chief operating officer said, "although the men's shoes is only a small part in the fashion industry, Louis Vuitton Online Sale but we believe that the future it will be potential" .

Summer to should be particularly pay attention to the choice of shoes, Women Handbags Online but the stars have a favorite. Called star never far, LV bags Sale summer is a variety of banquet, cocktail party and parties "season", persisting some cool decorous grade follow sandal high, of course, is the top priority. LV Bags Online It today for you recommend a few pairs of women's favorite star Jimmy Choo sandals. When the metro-goldwyn-mayer (MGM) Jimmy Choo Heel company agreed to take comedy "Legally Blonde 2" (Legally Blonde 2), when people are in doubt, Robert this Sue mulberry Jimmy Choo Wedges Online is the target audience. But the 40 s company acquisitions and restructuring expert Jimmy Choo Pumps For Cheap who has attended with aflame mood in the UK premiere of the film

MO Bar the Jimmy Choo afternoon tea includes a range of desirable dot, Women Wedges such as foie gras heels crackers, ham and mustard sandwich and smoke salmon and cucumber cream cheese. Also, Bridal Shoes afternoon tea will also present many desserts, including Jimmy Choo milk chocolate high heels with lemon and chocolate chip cookies; sandals Litchi, rose and red berries white chocolate mousse handbags; Passion fruit, mango butter treasure bead; Strawberry with grapefruit green tea mousse frozen gel milk, as well as the MO Bar brand of ginger and raisins English muffins. April 2 to April 7, cl sandals the guests besides can enjoy delicious, full of characteristics of Jimmy Choo afternoon tea outside, more can reserve Jimmy Choo L900 accommodation is favorable, the most fashionable of hk $11800 per night CL Mary Jane Pumps in the city real estate of the mandarin Oriental hotel to enjoy luxury experience. Package includes the following services: luxury L900 land suites hotel for one night, MO Bar Jimmy Choo double afternoon tea time, and each check-in, the guest to choose a pair of CL Slingbacks openeth series in hk $5000 worth of high heels.

» All comments
» Comments RSS

Powered by Community Engine