OSGi Runtime & Debug
In the quickstart
tutorial we created and ran a simple OSGi Microservice. Before progressing to more sophisticated examples we’ll first take a quick look at the OSGi runtime and the software DNA of your Microservices application.
For this tutorial we put the project in the ~
(AKA /home/user
) directory. If you put your project in a different directory, be sure to replace the ~
with your directory path when it appears in shell snippets in the tutorial.
Creating the Debug Version of quickstart
To gain access to the OSGi runtime we need to create a debug version of quickstart
.
From the quickstart
project root directory you previously created, change directory to ./app
edit the pom.xml
, and changing the first occurrence of <bndrun>app.bndrun</bndrun>
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-export-maven-plugin</artifactId>
<configuration>
<bndruns>
<bndrun>app.bndrun</bndrun>
</bndruns>
</configuration>
</plugin>
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-resolver-maven-plugin</artifactId>
<configuration>
<bndruns>
<bndrun>app.bndrun</bndrun>
<bndrun>debug.bndrun</bndrun>
</bndruns>
</configuration>
</plugin>
to <bndrun>debug.bndrun</bndrun>
as shown
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-export-maven-plugin</artifactId>
<configuration>
<bndruns>
<bndrun>debug.bndrun</bndrun>
</bndruns>
</configuration>
</plugin>
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-resolver-maven-plugin</artifactId>
<configuration>
<bndruns>
<bndrun>app.bndrun</bndrun>
<bndrun>debug.bndrun</bndrun>
</bndruns>
</configuration>
</plugin>
If you didn’t run through the quickstart tutorial before this tutorial then you should make sure your indexes are present and up to date by running mvn bnd-indexer:index bnd-indexer:index@test-index
in the app module. If you don’t do this then the resolve operation in the next step may fail due to missing indexes.
Now resolve your bndrun files (always a good idea after making pom or bndrun changes) and re-build the app
module of your quickstart
application
~/quickstart $ cd app/
~/quickstart/app $ mvn bnd-resolver:resolve
~/quickstart/app $ mvn verify
and run the new debug version.
~/quickstart/app $ java -jar target/debug.jar
Gogo and the OSGi Runtime
When interacting with a running OSGi a framework, if you are presented with the prompt g!
then you are using the Gogo shell. Note that you may need to hit the enter key once or twice to get the prompt to appear.
g!
Bundle Level Diagnostics
The list of installed bundles used to create quickstart
may be shown with either the lb
or bundles
command.
g! lb
START LEVEL 1
ID|State |Level|Name
0|Active | 0|System Bundle (5.7.0.SNAPSHOT)|5.7.0.SNAPSHOT
1|Active | 1|Logback Classic Module (1.2.3)|1.2.3
2|Active | 1|Logback Core Module (1.2.3)|1.2.3
3|Active | 1|JSR 353 (JSON Processing) API (1.0.0)|1.0.0
4|Active | 1|Apache Aries Javax Annotation API (0.0.1.201711291743)|0.0.1.201711291743
5|Active | 1|Apache Aries JAX-RS Specification API (0.0.1.201803051642)|0.0.1.201803051642
6|Active | 1|Apache Aries JAX-RS Whiteboard (0.0.1.201803051643)|0.0.1.201803051643
7|Active | 1|Apache Commons FileUpload (1.3.2)|1.3.2
8|Active | 1|Apache Commons IO (2.5.0)|2.5.0
9|Active | 1|Apache Felix Configuration Admin Service (1.9.0.SNAPSHOT)|1.9.0.SNAPSHOT
10|Active | 1|Apache Felix Gogo Command (1.0.2)|1.0.2
11|Active | 1|Apache Felix Gogo Runtime (1.0.10)|1.0.10
12|Active | 1|Apache Felix Gogo Shell (1.0.0)|1.0.0
13|Active | 1|Apache Felix Http Jetty (3.4.7.R7-SNAPSHOT)|3.4.7.R7-SNAPSHOT
14|Active | 1|Apache Felix Servlet API (1.1.2)|1.1.2
15|Active | 1|Apache Felix Inventory (1.0.4)|1.0.4
16|Active | 1|Apache Felix Declarative Services (2.1.0.SNAPSHOT)|2.1.0.SNAPSHOT
17|Active | 1|Apache Felix Web Management Console (4.3.4)|4.3.4
18|Active | 1|Apache Felix Web Console Service Component Runtime/Declarative Services Plugin (2.0.8)|2.0.8
19|Active | 1|impl (1.0.0.201803052117)|1.0.0.201803052117
20|Active | 1|org.osgi:org.osgi.service.jaxrs (1.0.0.201803012137-SNAPSHOT)|1.0.0.201803012137-SNAPSHOT
21|Active | 1|org.osgi:org.osgi.util.function (1.1.0.201803012137-SNAPSHOT)|1.1.0.201803012137-SNAPSHOT
22|Active | 1|org.osgi:org.osgi.util.promise (1.1.0.201803012137-SNAPSHOT)|1.1.0.201803012137-SNAPSHOT
23|Active | 1|osgi.cmpn (4.3.1.201210102024)|4.3.1.201210102024
24|Active | 1|slf4j-api (1.7.25)|1.7.25
Additional information for a specified bundle is available via the bundle $ID
command.
The ID for our quickstart
bundle is 19
and bundle 19
showns
g! bundle 19
Location jar/impl-1.0-SNAPSHOT.jar
State 32
RegisteredServices [Upper]
ServicesInUse [ConfigurationAdmin, ServletContextHelper]
Bundle 19|Active | 1|org.osgi.enroute.examples.quickstart.rest.impl (1.0.0.201803052117)
Revisions [org.osgi.enroute.examples.quickstart.rest.impl [19](R 19.0)]
BundleContext org.apache.felix.framework.BundleContextImpl@69653e16
SymbolicName org.osgi.enroute.examples.quickstart.rest.impl
BundleId 19
Version 1.0.0.201803052117
LastModified 1520685956190
Headers [Service-Component=OSGI-INF/org.osgi.enroute.examples.quickstart.rest.Upper.xml, Created-By=1.8.0_162 (Oracle Corporation), Manifest-Version=1.0, Bnd-LastModified=1520284643255, Private-Package=org.osgi.enroute.examples.quickstart.rest, Bundle-Name=impl, Build-Jdk=1.8.0_162, Import-Package=javax.ws.rs, Provide-Capability=osgi.service;objectClass:List<String>="org.osgi.enroute.examples.quickstart.rest.Upper", Bundle-ManifestVersion=2, Bundle-SymbolicName=org.osgi.enroute.examples.quickstart.rest.impl, Bundle-Version=1.0.0.201803052117, Built-By=richardnicholson, Require-Capability=osgi.extender;filter:="(&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0)))",osgi.extender;filter:="(&(osgi.extender=osgi.component)(&(version>=1.4.0)(!(version>=2.0.0))))",osgi.implementation;filter:="(&(osgi.implementation=osgi.http)(&(version>=1.1.0)(!(version>=2.0.0))))",osgi.implementation;filter:="(&(osgi.implementation=osgi.jaxrs)(&(version>=1.0.0)(!(version>=2.0.0))))",osgi.contract;osgi.contract=JavaJAXRS;filter:="(&(osgi.contract=JavaJAXRS)(version=2.1.0))",osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))", Tool=Bnd-4.0.0.201803042323-SNAPSHOT]
The inspect
command can be used to look at the runtime Requirements
and Capabilities
of a selected Bundle: see Namespaces for currently supported Req/Cap namespaces.
Example of usage.
g! inspect req osgi.wiring.package 19
org.osgi.enroute.examples.quickstart.rest.impl [19] requires:
-------------------------------------------------------------
osgi.wiring.package; (osgi.wiring.package=javax.ws.rs) resolved by:
osgi.wiring.package; javax.ws.rs 2.1.0 from org.apache.aries.javax.jax.rs-api [5]
Indicates that looking at the osgi.wiring.package
namespace, org.osgi.enroute.examples.quickstart.rest.impl
has a runtime Requirement on javax.ws.rs 2.1.0
, which has been successfully satisfied by org.apache.aries.javax.jax.rs-api
.
Component Level Diagnostics
Your bundles may be correctly installed and running, but your application may still not be functioning as is it should.
The Declarative Services scr
commands provide information on the runtime status and configuration of your Declarative Services (DS) components.
The scr:list
lists all running DS components.
g! scr:list
BundleId Component Name Default State
Component Id State PIDs (Factory PID)
[ 19] org.osgi.enroute.examples.quickstart.rest.Upper enabled
[ 0] [active ]
With the quickstart
example, we only have one DS component, which is reported as active
.
The scr:info
command can then be used to list detailed information for a named DS component.
g! scr:info org.osgi.enroute.examples.quickstart.rest.Upper
*** Bundle: org.osgi.enroute.examples.quickstart.rest.impl (19)
Component Description:
Name: org.osgi.enroute.examples.quickstart.rest.Upper
Implementation Class: org.osgi.enroute.examples.quickstart.rest.Upper
Default State: enabled
Activation: delayed
Configuration Policy: optional
Activate Method: activate
Deactivate Method: deactivate
Modified Method: -
Configuration Pid: [org.osgi.enroute.examples.quickstart.rest.Upper]
Services:
org.osgi.enroute.examples.quickstart.rest.Upper
Service Scope: singleton
Component Description Properties:
osgi.http.whiteboard.resource.pattern = [/quickstart/*]
osgi.http.whiteboard.resource.prefix = static
osgi.jaxrs.resource = true
Component Configuration:
ComponentId: 0
State: active
Component Configuration Properties:
component.id = 0
component.name = org.osgi.enroute.examples.quickstart.rest.Upper
osgi.http.whiteboard.resource.pattern = [/quickstart/*]
osgi.http.whiteboard.resource.prefix = static
osgi.jaxrs.resource = true
Prev Next