Hallo,
ich versuche gerade ein Equinox Framework mit Hilfe einer Wrapper-Applikation zu starten und lauf da noch an einer Stelle gegen die Wand.
Das Problem ist, dass mein aktueller Code mein config.ini nicht hernimmt um sich zu initialisieren.
Symptom: in der execute() führt er die gewollten Befehle aus, die ein CommandProvider Bundle im Framework zur Verfügung stellt. Da die ganzen Bundles beim Frameworkstart aber nicht installiert werden, findet er hier natürlich auch nix. Ich seh am Output noch das "ping", allerdings fliegt er mir aber direkt nach m_console.run() raus, so dass ich kein "pong" erhalte. Es wird leider keine Exception geworfen und merkwürdigerweise führt er danach nichtmal mehr den finally-Teil im main() aus.
Kann mir da jemand auf die Sprünge helfen?
Führe ich den Start des Frameworks ganz normal über "java -jar org.eclipse.equinox.<blabla>.jar -console" aus, so ist alles paletti und auch die Bundles entsprechend meines config.ini richtig installiert und gestartet.
Hier der Vollständigkeit halber noch eben mein config.ini.
Hier auch gleich noch die Frage wie ich das Loggingverhalten des Frameworks unterdrücken kann? "eclipse.log.backup.max=1" scheint keine Wirkung zu haben, denn er erzeugt im Falle dass, einen neuen Log ohne den alten zu entfernen. Und da ich ja nen eigenen Logger hab, und das Tool ansonsten in einer ReadOnly-Umgebung laufen soll, wär's praktisch, wenn man die Anzahl automatisierter Framework-Files auf den OSGi-Cache reduzieren könnte.
So, viel Text und viel Code, aber ich hoffe dennoch auf Eure Hilfe!
Danke schonmal!
ich versuche gerade ein Equinox Framework mit Hilfe einer Wrapper-Applikation zu starten und lauf da noch an einer Stelle gegen die Wand.
Das Problem ist, dass mein aktueller Code mein config.ini nicht hernimmt um sich zu initialisieren.
Symptom: in der execute() führt er die gewollten Befehle aus, die ein CommandProvider Bundle im Framework zur Verfügung stellt. Da die ganzen Bundles beim Frameworkstart aber nicht installiert werden, findet er hier natürlich auch nix. Ich seh am Output noch das "ping", allerdings fliegt er mir aber direkt nach m_console.run() raus, so dass ich kein "pong" erhalte. Es wird leider keine Exception geworfen und merkwürdigerweise führt er danach nichtmal mehr den finally-Teil im main() aus.
Kann mir da jemand auf die Sprünge helfen?
Führe ich den Start des Frameworks ganz normal über "java -jar org.eclipse.equinox.<blabla>.jar -console" aus, so ist alles paletti und auch die Bundles entsprechend meines config.ini richtig installiert und gestartet.
Code:
package com.cruehl.osgi;
import java.io.File;
import org.eclipse.osgi.baseadaptor.BaseAdaptor;
import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
import org.eclipse.osgi.framework.internal.core.OSGi;
import org.eclipse.osgi.framework.internal.core.FrameworkConsole;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
public class FooStarter
{
private FrameworkAdaptor m_adaptor;
private FrameworkConsole m_console;
private OSGi m_osgi;
private BundleContext m_context;
private static int m_errorcode = 3; // implicit error
/**
* Constructor.
*
* @param args
*/
public FooStarter(String[] args)
{
File test = new File("");
String path = test.getAbsolutePath();
System.setProperty("osgi.install.area", path);
System.setProperty("osgi.configuration.area", "file:configuration");
System.setProperty("osgi.framework", "file:org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar");
//System.setProperty("osgi.launcherIni", "eclipse");
m_adaptor = new BaseAdaptor(args);
m_osgi = new OSGi(m_adaptor);
m_context = m_osgi.getBundleContext();
}
/**
* Launches Equinox, runs bundles and closes framework when done.
*/
public void start()
{
m_osgi.launch();
// TODO run bundles
execute();
// testing stuff
System.out.println(System.getProperty("output"));
System.out.println(m_context.getProperty("output"));
printInstalledBundles();
getBundleErrorFlag();
// testing stuff end
m_osgi.close();
}
/**
* Du erträgst die Erniedrigung mit einem Lächeln im Gesicht,
* doch was mal aus Dir werden soll, das weisst Du nicht!
* Der Eine hats, der Andere nicht - doch das hast Du nicht so gemacht!
* Dein Weg führt Dich in dunkle Straßen. Hörst Du wie man über Dich lacht?
* Die Stunde des Siegers kommt für jeden irgendwann...
*/
private void execute()
{
// TODO seems that it takes no note of my config.ini
// the following commands will be sequentially executed
String[] cmds = { "ss", "diag 1", "diag 5", "close" };
m_console = new FrameworkConsole(m_osgi, cmds);
System.out.println("ping");
m_console.run(); // here something goes wrong...
System.out.println("pong");
m_console.shutdown();
System.out.println("ping");
}
/**
* Collects Global error flag from framework. Flag should be set by CrimsonGore.
*/
private void getBundleErrorFlag()
{
// TODO problem: both return null
System.out.println(System.getProperty("error"));
System.out.println(m_context.getProperty("error"));
// get error flag value
if (m_context.getProperty("error") != null)
{
String bundleErrorFlagValue = m_context.getProperty("error");
m_errorcode = Integer.parseInt(bundleErrorFlagValue);
}
else
{
System.out.println("\nERROR Could not read bundle error flag\n");
m_errorcode = 2;
}
}
/**
* For testing: prints all currently installed bundles.
*/
private void printInstalledBundles()
{
Bundle[] installed = m_context.getBundles();
for (int i = 0; i < installed.length; i++)
System.out.println(i + "\t" + installed[i].getSymbolicName());
}
/**
* Main method.
*
* @param args
*/
public static void main(String[] args)
{
try
{
FooStarter starter = new FooStarter(args);
starter.start();
}
catch (Exception ex)
{
// TODO
System.out.println("ERROR Ooops, something went wrong!");
ex.printStackTrace();
}
finally
{
System.out.println("pong " + m_errorcode);
System.exit(m_errorcode);
}
}
}
Hier der Vollständigkeit halber noch eben mein config.ini.
Code:
org.osgi.framework.bootdelegation=*
osgi.bundles=org.eclipse.osgi.services_3.1.200.v20071203.jar@start,\
org.eclipse.equinox.util_1.0.0.v20080414.jar@start,\
org.eclipse.equinox.ds_1.0.0.v20080427-0830.jar@start,\
bundles/de.<blabla>.loggingunit.jar@start,\
bundles/de.<blabla>.crimsongore.jar@start,\
bundles/de.<blabla>.basicchecker.jar@start,\
bundles/de.<blabla>.extendedchecker.jar@start,\
bundles/de.<blabla>.importexport.jar@start,\
bundles/de.<blabla>.businesslogic.jar@start,\
bundles/de.<blabla>.compiler.jar@start
eclipse.ignoreApp=true
eclipse.application.noDefault=true
osgi.clean=true
eclipse.log.backup.max=1
Hier auch gleich noch die Frage wie ich das Loggingverhalten des Frameworks unterdrücken kann? "eclipse.log.backup.max=1" scheint keine Wirkung zu haben, denn er erzeugt im Falle dass, einen neuen Log ohne den alten zu entfernen. Und da ich ja nen eigenen Logger hab, und das Tool ansonsten in einer ReadOnly-Umgebung laufen soll, wär's praktisch, wenn man die Anzahl automatisierter Framework-Files auf den OSGi-Cache reduzieren könnte.
So, viel Text und viel Code, aber ich hoffe dennoch auf Eure Hilfe!
Danke schonmal!