gogo shell doesn't work apache felix 6.0.3? - osgi

I am learning osgi, and I installed apache felix (6.0.3), when I executed the following command.
java -jar felix.jar
Felix doesn't display the shell gogo,and I don't know why ?

OSGi is a modular system. You've just started the framework. The framework does not have any behavior, as it should. You need to install bundles to get any behavior. This includes the shell.
I've written an OSGi Starter based on gogo & Bndtools. You can find it here:
https://bndtools.org/workspace/osgi-starter.html

The gogo shell is implemented in separate bundles. You only start the framework without any bundles.
I propose a tooling like bnd to set up felix with the required bundles. See my osgi ds hello world example. It starts the shell and also shows how you can build and deploy your own code.

Related

Apache felix cannot load dbcp2 as bundle

I have created an OSGi bundle, that is using apache commons dbcp2 to create a database connection pool. I am using apache felix gogo as runtime to start my bundles. I have loaded multiple other external libraries without any problems into the apache felix:
Image here (cant post no rep):
https://i.gyazo.com/c779ccaba20e3fa327d61a621748d8dc.png
However every time I try to start dbcp2 bundle which is requiered in my bundle I get the following error:
Image here (cant post no rep):
https://i.gyazo.com/ac7b673e63b9e6ad764af2e6adddb19a.png
I have found that there is some Apache mixservice bundle available, but it contains dbcp 1.4 and I need dbcp 2.5.0 or higher.
What needs to be done so apache felix is able to load the dbcp2 as a library requiered by other projects ?
What you see in the error is that the dbcp bundle requires the javax.transaction package in version >= 1.1.0. This is not an error in the bundle. It just means that you need to provide this package in the OSGi container.
Normally you would install a bundle that provides the package. In this case the package comes from the jre and the system bundle should export it.
Depending on how you start felix the way to export a system package is different.
For example if you use bndtools you do this in a bndrun file. See the Enroute microsevice example.
For plain felix see the parameter "org.osgi.framework.system.packages.extra".
In this example the javax.transaction package is exported (among some others).

Equivalent of feature:repo-add and feature:install in Apache Felix

I am familiar of feature:repo-add and feature:install in Karaf. I am looking for similar thing in Apache Felix or any alternate way to do the same.
If you want to deploy on plain felix without karaf then I recommend using the bnd packaging.
It is used in the enroute tutorials (you need to switch to felix as they use equinox by default). You give it a repository of the bundles to draw from (pom file) and a bndrun file. The output is a runnable jar with all bundles and felix included. When looking at the bndrun ignore the runbundles .. you do not have to write them. Threy are automatically generated.
When deciding between karaf and bnd packaging keep in mind that you do not have the pre defined features of karaf. So finding the set of bundles for the repo is a bit more work. You can use the list of bundles from the karaf features you use as a good starting point.
See https://github.com/osgi/osgi.enroute/tree/master/examples/quickstart/app

Hawtio as an OSGI bundle

We have our own karaf based application and recently we decided to migrate our web console on hawtio as a plugin. Is there any possibility to append hawtio to our project as an OSGI bundle? i've downloaded hawtio project, but there is no maven module with packaging mode "bundle" or something like that. As an option of course we can get kar archive file, extract it and use its bundles. But that's not a native way at all. Thank you!
Hello have you try to use the latest Hawtio for karaf (hawtio-karaf) available on maven repository?
http://search.maven.org/#artifactdetails|io.hawt|hawtio-karaf|1.4.26|jar
It provide a features.xml that can be install on Karaf.
First: install everything on your local maven repo.
Second: launch your karaf.
Third: run the command: feature:repo-add mvn:io.hawt/hawtio-karaf/1.4.26/xml/features
Fourth: run the command: feature:install hawtio
According to the official website, the default URL is: http://localhost:8181/hawtio/
Let me know if it is working as you were expecting.
There is no clean solution for standalone unit testing, but apache karaf provides exam environment for such situations - http://karaf.apache.org/manual/latest/developers-guide/writing-tests.html
So we can run tests with our application and hawtio in dev mode.
On production this leak of functionality is absent.

How to specify system package exports in pax exam

Pax exam is used to test Apache CXF Distributed OSGi. I recently updated to apache felix 4.2.1. In the newer version of felix I get problems with packages exported by cxf spec bundles and the system bundle. No idea why this did not occur with the older felix 3.x.
For the distribution we control this in the felix config (see the config template we use)
There we use the "org.osgi.framework.system.packages" property to define the system package exports.
How can I do the same using pax exam. I know how to do this using karaf exam but it can not be used as we want to explicitly test against pure felix.
I already tested CoreOptions.systemPackage but it only allows to add exports not to redefine them.
Pax Exam 3
Option[] conf = options(
systemProperty("org.osgi.framework.startlevel.beginning").value("4"),
systemPackages(
"com.ibm.uvm.tools",
"com.sun.jdmk.comm",
"sun.misc",
"javax.jmdns",
"javax.microedition.io",
"javax.servlet.http",
"javax.persistence",
"javax.servlet",
"javax.net.ssl",
"javax.jms",
"javax.mail",
"javax.mail.internet",
"javax.mail.util"),
...);
Regards
Roland
Got an answer from the ops4j list:
CoreOptions.frameworkProperty("org.osgi.framework.system.packages").value(sysPackages)
The option works on Eclipse Equinox but not on Apache Felix.

how to make camel-example-cxf-proxy work in serviceMix 4.3.0

I downloaded camel 2.6.0 and used example camel-example-cxf-proxy (under example folder) to deploy into serviceMix.
what i would like to do is packaging it to become a jar file and then goto serviceMix karaf console to install this jar.
(install -s wrap:file:/c:/...jar)
But this example doesn't work in serviceMix 4.3.0.
Do you know what thing i have to modify to make it work within serviceMix 4.3.0
Do i have to install any other bundle into serviceMix?
The first thing is that you should make sure your maven project builds a bundle. I recently did a tutorial that shows how to run camel routes in OSGi:
http://www.liquid-reality.de/display/liquid/2012/01/03/Karaf+Tutorial+Part+5+-+Running+Apache+Camel+integrations+in+OSGi
So basically you have to make sure that the camel features you need are installed. In your case this is probably camel-cxf and camel-http.
Then you need to change the pom to create a bundle. See the pom of the example:
https://github.com/cschneider/Karaf-Tutorial/blob/master/camel/jms2rest/pom.xml
You need to change the packaging to bundle and add the maven bundle plugin. For camel projects the default typically work very well.
Btw. you can also run camel on pure karaf when you follow the instructions in my tutorial. This has the advantage that you can almost always use the newest camel version while servicemix often comes with an older version.

Resources