Your eclipse application (org.my.Application extension) implements the
method org.eclipse.equinox.app.IApplication.start(IApplicationContext).
Once your application is done it should return from the start
(IApplicationContext) method.  This should eventually cause the platform to
shutdown and return from main(launcherArgs).  If this is not happening then
I recommend you opening a bug with a testcase to reproduce.

Thanks.

Tom




                                                                       
  From:       Tom Hsu <tom....@oracle.com>                             
                                                                       
  To:         Equinox development mailing list <equinox-dev@eclipse.org>
                                                                       
  Date:       01/09/2009 12:38 PM                                      
                                                                       
  Subject:    Re: [equinox-dev] Integrating plugin bundles in normal Java
                                                                       





Hi experts,

I have successfully my app A from another main POJO class like the
following:
    public static void main(String[] args) {
        String[] launcherArgs = {
                "-configuration",
                "C:\\pathTto\\configuration",
                "-install",
                "C:\\pathToIntall",
                "-DJavaAgentLogConfigFile=C:\\pathToLogConfig
\\log4j-commandline.xml",
                "-application",
                "org.my.Application",
        };
        org.eclipse.core.launcher.Main.main(launcherArgs);
    }
The above requires the use of startup.jar's
org.eclipse.core.launcher.Main.main. However, I notice I do not have
control once I called Main.main. I do not have a way for my App A to return
the control to the calling main java file. I tried throwing an Exception in
my app A to see if it will bubble up to the POJO main method, but it does
not. I cannot use System.exit(0) since it terminates the whole JVM.
snippet:
try {
org.eclipse.core.launcher.Main.main(launcherArgs);
} catch (Exception ex)
{
    System.out.println("I am done with app A");
}

in app A's terminate method:
terminate() {
   System.out.println();
   //System.exit();
   throw new RuntimeException("I am done. get me out of here");
}

What is a better way to achieve this? Bascially I want to run App A which
through eclipse and use osgi from another program. Once App A is done, it
needs to terminate and return control to the my POJO.

Regards,
Tom

Thomas Watson wrote:


      I would recommend that you launch app A in a way that is consistent
      with the normal launch of eclipse. By that I mean use a configuration
      folder with a config.ini that is the same as if you are launching
      your application with the eclipse.exe. The config.ini configures a
      set of bundles into the framework for your application. You should be
      able to do something like this

              String[] equinoxArgs = { "-console", "-noExit",
                    "-configuration" "/path/to/configuration",
                    "-application", "myApp.Application"};
             BundleContext context = EclipseStarter.startup(equinoxArgs,
      null);
              Object appResult = EclipseStarter.run(null);

      Tom



      Inactive hide details for Tom Hsu ---10/29/2008 01:41:44 PM---Hi
      experts,Tom Hsu ---10/29/2008 01:41:44 PM---Hi experts,
                                                                       
                                                                       
 From:             Tom Hsu <tom....@oracle.com>                        
                                                                       
                                                                       
 To:               equinox-dev@eclipse.org                             
                                                                       
                                                                       
 Date:             10/29/2008 01:41 PM                                 
                                                                       
                                                                       
 Subject:          [equinox-dev] Integrating plugin bundles in normal Java
                                                                       







      Hi experts,

      I am new to equinox so please excuse me for some obvious/stupid
      questions. However, I am still trying to wrap my head around this
      module
      system.

      I am tasked with integrating an existing application A that is build
      using bundles and equinox osgi in eclipse into another standalone
      Java
      program B that will be traditional jar based program. I would like to

      invoke the Equinox OSGi system to load these bundles/packages in the
      standalone Java program through code and execute the main method of
      the
      app A through program B.

      My setup is as follows:
      /plugins/ all the bundles that app A requires are here.
               also app A has a main bundle here

      I can use Eclipse Application run option to launch it or comandline
      "java -cp startup.jar org.eclipse.core.launcher.Main -
      application myApp.Application ..."

      However, I am exploring the option to launch app A with another
      existing
      java program B. As a prototype, I am writing a plain POJO with main
      method:

         public static void main(String[] args) throws Exception {
             String[] equinoxArgs = { "-console", "-noExit" };
             BundleContext context = EclipseStarter.startup(equinoxArgs,
      null);

             String pluginDir = "?file:C:\\work\\";
             String commonJarName =
      "org.eclipse.equinox.common_3.2.0.v20060603.jar";
             String configJarName =
      "org.eclipse.update.configurator_3.2.2.R32x_v20070111.jar";

             Bundle commonBundle = context.installBundle(pluginDir +
      commonJarName);
             Bundle configBundle = context.installBundle(pluginDir +
      configJarName);
             configBundle.start();

             String jarName = "fetchlets.jar";
             String directoryPath = "file:C:\\work\\plugins\\%";
             String locationStr = directoryPath + jarName;

             Bundle bundle = context.installBundle(locationStr);
             bundle.start();
         }

      However, my bundle fetchlets.jar cannot be started because, the
      configurator bundle does not auto-discover all the required bundles
      in
      the plugins directory. Can someone help me figure out if I can tell
      the
      EclipseStarter to auto-load all bundles at a specific locations?

      Or is there another approach I can use that is very similar to the
      run
      options in Eclipse where setting the platform will suffice to load
      all
      the plugins automatically?

      I have been looking at:
      http://www.eclipse.org/equinox/documents/quickstart.php.
      http://www.eclipsezone.com/eclipse/forums/t93976.rhtml


      Regards,
      Tom
      _______________________________________________
      equinox-dev mailing list
      equinox-dev@eclipse.org
      https://dev.eclipse.org/mailman/listinfo/equinox-dev




      _______________________________________________
      equinox-dev mailing list
      equinox-dev@eclipse.org
      https://dev.eclipse.org/mailman/listinfo/equinox-dev
        _______________________________________________
      equinox-dev mailing list
      equinox-dev@eclipse.org
      https://dev.eclipse.org/mailman/listinfo/equinox-dev

<<inline: graycol.gif>>

<<inline: ecblank.gif>>

_______________________________________________
equinox-dev mailing list
equinox-dev@eclipse.org
https://dev.eclipse.org/mailman/listinfo/equinox-dev

Reply via email to