You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@clerezza.apache.org by André Dietisheim <an...@gmail.com> on 2010/05/15 02:55:59 UTC

running clerezza on equinox

Hi!

I'm currently trying to run clerezza on equinox. My goal is to run 
clerezza and org.eclipse.emf.cdo on the same osgi runtime.
Unfortunately it's not as easy as it sounds.

1.) Attempt
My first attempt was to keep everything in place but just swap the 
launcher code in one of the launchers (tdb, sesame, storageless, etc.). 
OSGI R4.2 defined an official way to start osgi runtimes. The launcher 
code would look similar to this:

         FrameworkFactory factory =  
(Class.forName(getFrameworkFactoryClassName()).newInstance());
         Framework framework = factory.newFramework(configProps);
         framework.init();
         framework.start();
         System.err.printf("Starting osgi runtime '%s'\n", 
framework.getSymbolicName());

getFrameworkFactoryClassName() exists in 2 flawors:

         return "org.eclipse.osgi.launch.EquinoxFactory";

or

         return "org.apache.felix.framework.FrameworkFactory";


Doing this, I got a Main, that could launch felix without any flaws, but 
equinox threw exceptions very early:

java.lang.NullPointerException
at org.eclipse.osgi.baseadaptor.BaseAdaptor.initializeStorage
(BaseAdaptor.java:121)
at org.eclipse.osgi.framework.internal.core.Framework.initialize
(Framework.java:185)
at org.eclipse.osgi.framework.internal.core.Framework.<init>
(Framework.java:157)
...

I tried to fix this situation (obviously something's wrong with the 
bundle cache or configuration area) by setting the various osgi 
configuration settings. Unfortunately nothing helps. I stepped through 
the code and saw that equinox has a pluggable storage architecture and 
cant find it's hooked storage suppliers.
-> My current guess is that equinox can't run if it's being inlined like 
the clerezza does with felix. To my understanding this approach's 
practical but not pretty legal anyhow (felix's Apache licenced, Equinox 
Eclipse Public licenced. Mixing both in one archive does not ensure the 
code and licence borders).

2.) Not inlined, start as referenced jar
My second attempt was to keep the equinox jar untouched and reference it 
in launchers manifest:

Manifest-Version: 1.0
...
Class-Path: osgi-3.5.2.R35x_v20100126.jar
...

Unfortunately, this approach doesn't work either. Equinox starts, gets a 
bit further and spits exceptions later uphill. It complains when it 
tries to install the system bundles:

java.lang.NullPointerException
     at java.io.File.<init>(File.java:305)
     at 
org.eclipse.osgi.internal.baseadaptor.BaseStorage.getBundleContent(BaseStorage.java:656)
     at 
org.eclipse.osgi.internal.baseadaptor.BaseStorage.createBundleFile(BaseStorage.java:665)
     at 
org.eclipse.osgi.baseadaptor.BaseAdaptor.createBundleFile(BaseAdaptor.java:466)
     at 
org.eclipse.osgi.baseadaptor.BaseData.getBundleFile(BaseData.java:394)
....

Once again, things look storage related. I stepped through the code and 
searched the mailing-list

-> My current guess is that you cannot launch equinox this way either.

3.) Fat jar
There are several tools out there that allow you to embed code and jar 
into an outer jar. The most prominent one's here: 
http://www.ibm.com/developerworks/java/library/j-onejar/
These tools even exist with maven bundles. I tried a few of them and 
stumbled mostly on duplicate entries in the resulting jar. The same 
happend with the assembly:assembly goal (there's a bug in the current 
version)
Furthermore, many post note that class access gets pretty slow with this 
approach.

-> Doesn't work either.


I wonder how pax-runner handles the launch. What's the reason not to use 
pax-runner anyhow?

Any hints, comments suggestions?

Cheers
André

Re: running clerezza on equinox

Posted by Reto Bachmann-Gmuer <re...@trialox.org>.
Hi André

- There's no reason not to use pax-runner, in fact pax-exam (used in
our tests) bases on pax-runner, beware that for having felix in a
sufficiently new version you need a snapshot version. starting with

trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.launcher.tdb$
pax-run.sh   --platform=equinox pom.xml
../org.apache.clerezza.platform.launcher.storageless.parent/pom.xml

leads to an error as pax-run seems not to support variables in versions.

- What's the default way of distribution equinox based applications? I
think if we have such a distro it should be as close to the
expectations of equinox/eclipse users as possible.

- Does the fact that you're trying to do a launcher mean that all of
clerezza runs with equinox?

Cheers,
reto

On Sat, May 15, 2010 at 2:55 AM, André Dietisheim
<an...@gmail.com> wrote:
> Hi!
>
> I'm currently trying to run clerezza on equinox. My goal is to run clerezza
> and org.eclipse.emf.cdo on the same osgi runtime.
> Unfortunately it's not as easy as it sounds.
>
> 1.) Attempt
> My first attempt was to keep everything in place but just swap the launcher
> code in one of the launchers (tdb, sesame, storageless, etc.). OSGI R4.2
> defined an official way to start osgi runtimes. The launcher code would look
> similar to this:
>
>        FrameworkFactory factory =
>  (Class.forName(getFrameworkFactoryClassName()).newInstance());
>        Framework framework = factory.newFramework(configProps);
>        framework.init();
>        framework.start();
>        System.err.printf("Starting osgi runtime '%s'\n",
> framework.getSymbolicName());
>
> getFrameworkFactoryClassName() exists in 2 flawors:
>
>        return "org.eclipse.osgi.launch.EquinoxFactory";
>
> or
>
>        return "org.apache.felix.framework.FrameworkFactory";
>
>
> Doing this, I got a Main, that could launch felix without any flaws, but
> equinox threw exceptions very early:
>
> java.lang.NullPointerException
> at org.eclipse.osgi.baseadaptor.BaseAdaptor.initializeStorage
> (BaseAdaptor.java:121)
> at org.eclipse.osgi.framework.internal.core.Framework.initialize
> (Framework.java:185)
> at org.eclipse.osgi.framework.internal.core.Framework.<init>
> (Framework.java:157)
> ...
>
> I tried to fix this situation (obviously something's wrong with the bundle
> cache or configuration area) by setting the various osgi configuration
> settings. Unfortunately nothing helps. I stepped through the code and saw
> that equinox has a pluggable storage architecture and cant find it's hooked
> storage suppliers.
> -> My current guess is that equinox can't run if it's being inlined like the
> clerezza does with felix. To my understanding this approach's practical but
> not pretty legal anyhow (felix's Apache licenced, Equinox Eclipse Public
> licenced. Mixing both in one archive does not ensure the code and licence
> borders).
>
> 2.) Not inlined, start as referenced jar
> My second attempt was to keep the equinox jar untouched and reference it in
> launchers manifest:
>
> Manifest-Version: 1.0
> ...
> Class-Path: osgi-3.5.2.R35x_v20100126.jar
> ...
>
> Unfortunately, this approach doesn't work either. Equinox starts, gets a bit
> further and spits exceptions later uphill. It complains when it tries to
> install the system bundles:
>
> java.lang.NullPointerException
>    at java.io.File.<init>(File.java:305)
>    at
> org.eclipse.osgi.internal.baseadaptor.BaseStorage.getBundleContent(BaseStorage.java:656)
>    at
> org.eclipse.osgi.internal.baseadaptor.BaseStorage.createBundleFile(BaseStorage.java:665)
>    at
> org.eclipse.osgi.baseadaptor.BaseAdaptor.createBundleFile(BaseAdaptor.java:466)
>    at org.eclipse.osgi.baseadaptor.BaseData.getBundleFile(BaseData.java:394)
> ....
>
> Once again, things look storage related. I stepped through the code and
> searched the mailing-list
>
> -> My current guess is that you cannot launch equinox this way either.
>
> 3.) Fat jar
> There are several tools out there that allow you to embed code and jar into
> an outer jar. The most prominent one's here:
> http://www.ibm.com/developerworks/java/library/j-onejar/
> These tools even exist with maven bundles. I tried a few of them and
> stumbled mostly on duplicate entries in the resulting jar. The same happend
> with the assembly:assembly goal (there's a bug in the current version)
> Furthermore, many post note that class access gets pretty slow with this
> approach.
>
> -> Doesn't work either.
>
>
> I wonder how pax-runner handles the launch. What's the reason not to use
> pax-runner anyhow?
>
> Any hints, comments suggestions?
>
> Cheers
> André
>