As you may know, Eclipse RCP (which the CM Client is implemented on) is itself built upon the OSGI and runs in the Equinox OSGI container. That means there's the full power of the OSGI framework at your disposal.
One of the interesting features that Equinox provides is a console that allows you to poke around at the insides of a running OSGI application.
To see the console simply add the command line flag -console when launching an Eclipse application. The following is an example of accessing the console running Eclipse itself on my Mac, but you could do exactly the same when running the Commerce Manager.exe on Windows.
ep-wl-0594:eclipse35 ivanjensen$ ./eclipse/Eclipse.app/Contents/MacOS/eclipse -console
osgi>
You can see the osgi> prompt just there. There's lots of options in there that can be very useful in debugging issues. You can see all the available options by simply typing help at the osgi prompt:
osgi> help
---Controlling the OSGi framework---
launch - start the OSGi Framework
shutdown - shutdown the OSGi Framework
close - shutdown and exit
exit - exit immediately (System.exit)
init - uninstall all bundles
setprop <key>=<value> - set the OSGi property
---Controlling Bundles---
install - install and optionally start bundle from the given URL
uninstall - uninstall the specified bundle(s)
start - start the specified bundle(s)
stop - stop the specified bundle(s)
refresh - refresh the packages of the specified bundles
update - update the specified bundle(s)
---Displaying Status---
status [-s [<comma separated list of bundle states>] [<segment of bsn>]] - display installed bundles and registered services
ss [-s [<comma separated list of bundle states>] [<segment of bsn>]] - display installed bundles (short status)
services [filter] - display registered service details
packages [<pkgname>|<id>|<location>] - display imported/exported package details
bundles [-s [<comma separated list of bundle states>] [<segment of bsn>]] - display details for all installed bundles
bundle (<id>|<location>) - display details for the specified bundle(s)
headers (<id>|<location>) - print bundle headers
log (<id>|<location>) - display log entries
---Extras---
exec <command> - execute a command in a separate process and wait
fork <command> - execute a command in a separate process
gc - perform a garbage collection
getprop [ name ] - displays the system properties with the given name, or all of them.
...output abbreviated...
osgi>
The command I use most frequently to get a general overview of which bundles are available and their status is ss:
osgi> ss
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.5.0.v20090520
1 ACTIVE org.eclipse.equinox.simpleconfigurator_1.0.100.v20090520-1905
2 <<LAZY>> com.ibm.icu_4.0.1.v20090415
3 RESOLVED com.jcraft.jsch_0.1.41.v200903070017
4 <<LAZY>> com.sun.jna_3.1.0
5 RESOLVED java_cup.runtime_0.10.0.v200803061811
6 RESOLVED javax.activation_1.1.0.v200905021805
7 RESOLVED javax.mail_1.4.0.v200905040518
8 RESOLVED javax.servlet_2.5.0.v200806031605
9 RESOLVED javax.servlet.jsp_2.0.0.v200806031607
...output abbreviated...
osgi>
Here you can see some of the bundles that run in my installation of eclipse. Each bundle is given a unique number that can be used with some of the other console commands. You can also see the bundle's state and the bundle's symbolic name. For more information on the bundle states check out this Wikipedia article.
There's plenty more good stuff down in the console, including being able to start, stop and update bundles in a running system.
So why not take some time and get to know your OSGI console and add another string to your RCP bow?

