Update: It turned out that there is already a solution to the problem described here. The bundle org.
Eclipse databinding is separated into a core and a ui part. The core is designed to be completely independent from the ui, to be usable with any widget toolkit, and it is not even limited to user interfaces. So isn’t it an obvious idea to use it also outside of Eclipse?
We recently tried to do this in a project that runs RAP on Apache Karaf and it turned out that you cannot just throw the core databinding bundles into a Felix OSGi container and hope that they work. In fact, these bundles have a couple of dependencies that cannot be satisfied outside of Eclipse. The same problem exists with JFace.
Here’s the problem: all these bundles use Eclipse core interfaces like IStatus and classes like CoreException. At least IStatus is also exposed by the databinding API (e.g. as return value of a validator), so this cannot be changed. In good Eclipse manner, they don’t simply import the single package that contains all these dependencies (org.
This allowed us to create a compatibility bundle which exports those equinox.osgi packages that equinox.common needs to live. And with this bundle in place, equinox.common starts up fine and allows core databinding to run as well. And also JFace and JFace databinding, which have similar dependencies, start and work fine. Here’s an excerpt from the Karaf console:
karaf@root()> bundle:list -s START LEVEL 80 , List Threshold: 50 ID State Level Symbolic name [ 90] [ Active] [ 80] org.eclipse.core.jobs (3.5.300.v20120622-204750) [ 91] [ Active] [ 80] org.eclipse.rap.rwt.osgi (22.214.171.12420824-0111) [ 92] [ Active] [ 80] org.eclipse.core.databinding.observable (1.4.1.v20120521-2329) [ 93] [ Active] [ 80] com.ibm.icu.base (4.4.2.v20110831) [ 94] [ Active] [ 80] org.eclipse.core.databinding (1.4.1.v20120521-2329) [ 95] [ Active] [ 80] org.eclipse.core.databinding.beans (1.2.200.v20120523-1955) [ 96] [ Active] [ 80] org.eclipse.rap.osgi.compat (126.96.36.19920824-1438) [ 97] [ Active] [ 80] org.eclipse.core.commands (3.6.1.v20120521-2329) [ 98] [ Active] [ 80] org.eclipse.rap.rwt (188.8.131.5220824-0111) [ 99] [ Active] [ 80] org.eclipse.equinox.common (3.6.100.v20120522-1841) [ 100] [ Active] [ 80] org.eclipse.core.databinding.property (1.4.100.v20120523-1955) [ 101] [ Active] [ 80] org.eclipse.rap.jface (184.108.40.20620824-0111) [ 102] [ Active] [ 80] org.eclipse.rap.jface.databinding (220.127.116.1120824-0111) ...
There’s a whole bunch of Apache bundles in the Eclipse Orbit. Since Juno, at least three Felix bundles are used in Eclipse. On the other hand, Eclipse Jetty is used as servlet container in Apache Karaf. I love to see our communities coming together. But that requires that we make our stuff easier to consume outside Eclipse. As others have quite similar problems, I’m confident that those problems can be resolved one by one.
If you chose Felix as your environment, why shouldn’t you be able to deploy your Eclipse RAP-based admin UI? Since RAP 1.5, you can. If you also want JFace and databinding, get our compatibility bundle from the incubator:
source code, ready-made bundle, p2 repository. The bundle is compatible with Eclipse Juno.