Sunday, August 10, 2014

Running Kura on Raspberry Pi over Equinox and Concierge

Given below are screenshots of the Kura web console running on my RPi device. It gives a comparison of Kura running over Equinox vs Concierge.

My RPi configuration:

RPi Model B
RAM 512MB
Memory 4GB (SanDisk Ultra 30MB/s)
Raspbian OS

Initial memory usage is ~195MB


Kura over Equinox ~300MB


Kura over Concierge ~330MB



Saturday, August 9, 2014

Running kura web console on RaspberryPi over Concierge

So I finally managed to get the web console up and running over Concierge! I had to include some equinox dependencies to get the kura services running over concierge. I got a lot of help from the Concierge developer community. Thanks Jan S. Rellermeyer, Tim Verbelen and Jochen Hiller!


Below is the console output when running start_kura.sh script

---------------------------------------------------------
  Framework started in 118.902 seconds.
---------------------------------------------------------


Concierge> bundles
Bundles:
[ 0] (active) org.eclipse.concierge
[ 1] (active) Concierge Shell
[ 2] (resolved) Apache Log4j
[ 3] (resolved) Apache Extras Companion™ for Apache log4j™.
[ 4] (active) slf4j-api
[ 5] (resolved) slf4j-log4j12
[ 6] (active) org.eclipse.concierge.service.xmlparser
[ 7] (active) OSGi Release 4.2.0 Services
[ 8] (active) Supplemental Equinox Functionality
[ 9] (active) Equinox Util Bundle
[10] (active) Configuration Admin
[11] (active) org.eclipse.concierge.extension.permission
[12] (active) Common Eclipse Runtime
[13] (active) Extension Registry Support
[14] (active) Event Admin
[15] (active) Meta Type
[16] (active) Eclipse Preferences Mechanism
[17] (active) Declarative Services
[18] (active) Servlet API Bundle
[19] (active) Jetty :: Utilities
[20] (active) Jetty :: IO Utility
[21] (active) Jetty :: Http Utility
[22] (active) Jetty :: Continuation
[23] (active) Jetty :: Server Core
[24] (active) Jetty :: Security
[25] (active) Jetty :: Servlet Handling
[26] (active) Http Services Servlet
[27] (active) Jetty Http Service
[28] (active) javax.usb API from javax-usb
[29] (active) bundle.name
[30] (active) osgi.cmpn
[31] (active) IO Connector Service
[32] (active) Eclipse Paho MQTT Client
[33] (active) HSQLDB
[34] (active) Apache ServiceMix :: Bundles :: protobuf-java
[35] (active) Commons IO
[36] (active) Apache Commons Net
[37] (active) javax.usb Common from javax-usb
[38] (active) Apache Commons FileUpload
[39] (active) User
[40] (active) org.eclipse.kura.api
[41] (active) org.eclipse.kura.core
[42] (active) org.eclipse.kura.core.cloud
[43] (active) org.eclipse.kura.core.comm
[44] (active) org.eclipse.kura.core.configuration
[45] (active) org.eclipse.kura.core.crypto
[46] (active) org.eclipse.kura.deployment.agent
[47] (active) org.eclipse.kura.core.deployment
[48] (active) org.eclipse.kura.core.net
[49] (active) org.eclipse.kura.linux.clock
[50] (active) org.eclipse.kura.linux.command
[51] (active) org.eclipse.kura.linux.net
[52] (active) org.eclipse.kura.linux.position
[53] (active) org.eclipse.kura.linux.usb
[54] (active) org.eclipse.kura.linux.watchdog
[55] (active) org.eclipse.kura.net.admin
[56] (active) org.eclipse.kura.web


Concierge> services
Services:
Concierge System Bundle
    [Service 1] [org.osgi.service.resolver.Resolver]
[org.eclipse.concierge.service.xmlparser-1.0.0.201407191653]
    [Service 2] [javax.xml.parsers.SAXParserFactory]
    [Service 3] [javax.xml.parsers.DocumentBuilderFactory]
[org.eclipse.equinox.util-1.0.500.v20130404-1337]
    [Service 4] [org.eclipse.equinox.internal.util.threadpool.ThreadPoolManager, org.eclipse.equinox.internal.util.threadpool.ThreadPoolFactory]
    [Service 5] [org.eclipse.equinox.internal.util.timer.Timer]
[org.eclipse.equinox.cm-1.0.400.v20120522-1841]
    [Service 6] [org.osgi.service.cm.ConfigurationListener]
    [Service 7] [org.osgi.service.cm.ConfigurationAdmin]
[org.eclipse.equinox.common-3.6.100.v20120522-1841]
    [Service 8] [org.eclipse.osgi.service.urlconversion.URLConverter]
    [Service 9] [org.eclipse.core.runtime.IAdapterManager]
    [Service 10] [org.osgi.service.url.URLStreamHandlerService]
[org.eclipse.equinox.registry-3.5.200.v20120522-1841]
    [Service 11] [org.eclipse.core.runtime.IExtensionRegistry]
    [Service 12] [org.eclipse.osgi.framework.console.CommandProvider]
[org.eclipse.equinox.event-1.2.200.v20120522-2049]
    [Service 13] [org.osgi.service.event.EventAdmin]
    [Service 18] [org.osgi.service.event.EventAdmin]
[org.eclipse.equinox.metatype-1.2.0.v20120522-1841]
    [Service 14] [org.osgi.service.metatype.MetaTypeService, org.eclipse.equinox.metatype.EquinoxMetaTypeService]
[org.eclipse.equinox.preferences-3.5.0.v20120522-1841]
    [Service 15] [org.eclipse.core.runtime.preferences.IPreferencesService]
    [Service 16] [org.osgi.service.prefs.PreferencesService]
[org.eclipse.equinox.ds-1.4.0.v20120522-1841]
    [Service 17] [org.osgi.service.cm.ConfigurationListener]
    [Service 19] [org.eclipse.osgi.framework.console.CommandProvider]
    [Service 20] [org.apache.felix.scr.ScrService]
[org.eclipse.equinox.http.servlet-1.1.300.v20120522-1841]
    [Service 21] [org.osgi.service.http.HttpService, org.eclipse.equinox.http.servlet.ExtendedHttpService]
[org.eclipse.equinox.http.jetty-3.0.0.v20120522-1841]
    [Service 22] [org.osgi.service.cm.ManagedServiceFactory]
[org.eclipse.equinox.io-1.0.400.v20120522-2049]
    [Service 23] [org.osgi.service.io.ConnectorService]
[org.eclipse.kura.core-0.2.0.201408091943]
    [Service 24] [org.eclipse.kura.system.SystemAdminService]
    [Service 31] [org.eclipse.kura.system.SystemService]
    [Service 32] [org.eclipse.kura.db.DbService]
    [Service 35] [org.eclipse.kura.ssl.SslManagerService]
    [Service 36] [org.eclipse.kura.data.DataTransportService, org.eclipse.kura.ssl.SslServiceListener]
    [Service 37] [org.eclipse.kura.configuration.ConfigurableComponent, org.eclipse.kura.data.DataTransportListener, org.eclipse.kura.data.DataService]
[org.eclipse.kura.core.cloud-0.2.0.201408091943]
    [Service 38] [org.eclipse.kura.cloud.CloudCallService, org.eclipse.kura.data.DataServiceListener]
    [Service 39] [org.osgi.service.event.EventHandler]
    [Service 40] [org.eclipse.kura.cloud.CloudService, org.eclipse.kura.data.DataServiceListener, org.eclipse.kura.configuration.ConfigurableComponent, org.eclipse.kura.cloud.CloudPayloadProtoBufEncoder, org.eclipse.kura.cloud.CloudPayloadProtoBufDecoder]
[org.eclipse.kura.core.comm-0.2.0.201408091943]
    [Service 25] [org.osgi.service.io.ConnectionFactory]
[org.eclipse.kura.core.configuration-0.2.0.201408091943]
    [Service 33] [org.osgi.service.cm.ConfigurationListener]
    [Service 34] [org.eclipse.kura.configuration.ConfigurationService]
[org.eclipse.kura.core.crypto-0.2.0.201408091943]
    [Service 26] [org.eclipse.kura.crypto.CryptoService]
[org.eclipse.kura.linux.clock-0.2.0.201408091943]
    [Service 41] [org.eclipse.kura.clock.ClockService]
[org.eclipse.kura.linux.command-0.2.0.201408091943]
    [Service 27] [org.eclipse.kura.command.CommandService]
[org.eclipse.kura.linux.net-0.2.0.201408091943]
    [Service 29] [org.osgi.service.event.EventHandler]
    [Service 30] [org.eclipse.kura.net.NetworkService]
[org.eclipse.kura.linux.position-0.2.0.201408091943]
    [Service 42] [org.osgi.service.event.EventHandler]
    [Service 43] [org.eclipse.kura.position.PositionService, org.osgi.service.event.EventHandler]
[org.eclipse.kura.linux.usb-0.2.0.201408091943]
    [Service 28] [org.eclipse.kura.usb.UsbService]
[org.eclipse.kura.linux.watchdog-0.2.0.201408091943]
    [Service 44] [org.eclipse.kura.watchdog.WatchdogService]


Concierge> DEBUG 17 ServiceReg.getService(): service 'org.eclipse.kura.position.PositionService' is used 2 time(s), object = org.eclipse.kura.linux.position.PositionServiceImpl@1d0440
DEBUG 17 ServiceReg.getService(): service 'org.eclipse.kura.net.NetworkService' is used 4 time(s), object = org.eclipse.kura.linux.net.NetworkServiceImpl@1bf724e
DEBUG 17 ServiceReg.getService(): service 'org.eclipse.kura.system.SystemAdminService' is used 3 time(s), object = org.eclipse.kura.core.system.SystemAdminServiceImpl@65a4ba


Concierge>     

Saturday, August 2, 2014

Debugging OSGi Declarative Services

Figuring out why the declarative services in your osgi application haven't resolved can be a bit tricky sometimes. If you are using the equinox ds implementation you can use the built in debug mode to figure out the underlying issues.

Simply set the below properties

equinox.ds.debug=true
equinox.ds.print=true

Since I am running equinox ds over concierge I specify these properties as,

-Dequinox.ds.debug=true
-Dequinox.ds.print=true

in the concierge init.xargs launch configuration file.

References:

http://eclipse.dzone.com/articles/dependencies-and-services-osgi
http://hwellmann.blogspot.com/2009/04/getting-started-with-osgi-declarative.html