[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [equinox-dev] Running Equinox 3.2.0 embedded


In the Spring-OSGi list I pointed you at the Quickstart guide (http://eclipse.org/equinox/quickstart.html) but then I read your message more carefully and realized that that response was not particularly useful as it does not cover what you are really trying to do.  So I did a bit of investigation and found that the following class works for me with no errors (the presence of -clean does not change anything.  see below re -args).
public class Main {
        public static void main(String[] args) throws Exception {
                BundleContext bc = EclipseStarter.startup(new String[]{}, null);

Can you check that you are running with osgi as a JAR (as opposed to being in your workspace).  That is the thing that I noticed made a difference.  If you are still having a problem, please send along details on how to reproduce.  A bug report in Eclipse/Equinox/Framework would be great.


Full details and observations made along the way.
- some of the command line arguments are processed by Main in startup.jar.  The launching technique outlined here does not run that code so some of that setup may have to be done by your code (note that this generally means that you might have to set a system property rather than passing a command line option).  The details are shown in the Eclipse Help
There any of the -arguments that have (Main) after them are processed by startup.jar.  Lookup the corresponding system property and use that rather than the -argument. For example, rather than passing -clean, use System.setProperty("osgi.clean", true) before starting the framework.

- When I first started to reproduce your situation I had problems similar to what you were seeing.  In the end it turned out to be an issue with having the org.eclipse.osgi project checked out in my workspace AND set on the classpath of my Main class.  Basically the setup in the workspace is subtlely different from that which is in the built jar.  In particular, the hookconfigurators.properties file was not being found and the osgi.framework system property was set incorrectly.

For the hookconfigurators.properties file, the framework has no choice but ot look on the current classloader for the resource.  The way we are launching here, the classloader is the appclassloader and the classpath includes the *bin* dir for the Main project and the org.eclipse.osgi project.  The hookconfigurators.properties file is in the root of the osgi jar.  This is normally on the class path when launching with startup jar since startup.jar constructs its onw classloader and is smart enough to know that we are in "dev" mode.

Similarly, the framework location (osgi.framework) is derived from the classpaht entry that supplies the framework classes.  In this scenario it is the org.eclipse.osgi/bin dir.  When launching using startup.jar in dev mode, the osgi.framework property is set explicitly to be the org.eclipse.osgi dir (no bin).

So, you don't likely care about all that but I wanted to outline what was happening.  Basically I just changed the Main project to have an osgi.jar on the classpath rather than the org.eclipse.osgi project and everything worked.  Alternatively, I got it to work by copying the hookconfigurators.properties file into the classpath in the Main project and setting the osgi.framework property to be an absolute file: URL to the org.eclipse.osgi project dir in the workpace.

Hal Hildebrand <hal.hildebrand@xxxxxxxxxx>
Sent by: equinox-dev-bounces@xxxxxxxxxxx

09/08/2006 05:30 PM

Please respond to
Equinox development mailing list <equinox-dev@xxxxxxxxxxx>

[equinox-dev] Running Equinox 3.2.0 embedded

I’m trying to develop a multi-framework vendor test harness for the Spring/OSGi integration effort.  This test harness already works with Knopflerfish and I’m trying to get this to work with Equinox.  After an examination of the Equinox code base, the effort did not appear to be too hard.  However, I'm running into trouble and any help would be appreciated.

I’m using Equinox version 3.2.0, and to start up the Equinox framework I'm simply doing:

BundleContext bc = EclipseStarter.startup(new String[]{"-clean"}, null);

This throws the IllegalStateException below.

Not really sure what I should be doing to make this go away.  Note that if I add the command line argument to the above such as “-configuration” and the location, where the configuration location is a directory and the directory contains an empty “config.ini” file, I get the same IllegalStateException thrown, but I do get an org.eclipse.osgi/manager directory under this location with a .fileTableLock file in it.

Again, I’m just trying to get a minimal startup of Eclipse – I’ll use the BundleContext returned by startup() to install and start the bundles I need.

   at org.eclipse.osgi.internal.baseadaptor.BaseStorage.getBundleContent(BaseStorage.java:590)
   at org.eclipse.osgi.internal.baseadaptor.BaseStorage.createBundleFile(BaseStorage.java:600)
   at org.eclipse.osgi.baseadaptor.BaseAdaptor.createBundleFile(BaseAdaptor.java:491)
   at org.eclipse.osgi.baseadaptor.BaseData.getBundleFile(BaseData.java:367)
   at org.eclipse.osgi.baseadaptor.BaseData.getEntry(BaseData.java:93)
   at org.eclipse.osgi.framework.internal.core.AbstractBundle.getEntry(AbstractBundle.java:1281)
   at org.eclipse.osgi.framework.internal.core.Framework.findVMProfile(Framework.java:393)
   at org.eclipse.osgi.framework.internal.core.Framework.loadVMProfile(Framework.java:312)
   at org.eclipse.osgi.framework.internal.core.Framework.initialize(Framework.java:187)
   at org.eclipse.osgi.framework.internal.core.Framework.<init>(Framework.java:112)
   at org.eclipse.osgi.framework.internal.core.OSGi.createFramework(OSGi.java:90)
   at org.eclipse.osgi.framework.internal.core.OSGi.<init>(OSGi.java:31)
   at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:286)
   at org.springframework.osgi.testing.client.equinox.EquinoxFramework.start(EquinoxFramework.java:38)
   at org.springframework.osgi.testing.client.HarnessClient.run(HarnessClient.java:143)
   at org.springframework.osgi.testing.client.AbstractHarnessTest.frameworkTest(AbstractHarnessTest.java:35)
   at org.springframework.osgi.testing.client.EquinoxTest.testEquinox(EquinoxTest.java:14)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at com.intellij.rt.execution.junit2.JUnitStarter.main(JUnitStarter.java:32)
equinox-dev mailing list