Контроль над кодами выхода при выключении OSGI - PullRequest
1 голос
/ 21 июня 2011

Итак, я инициировал чистое завершение OSGI Лучший способ завершить работу контейнера OSGi (в частности, равноденствия) Я использую способ bundle.stop (), чтобы добиться того же.Теперь возникает вопрос, если я вызываю bundle.stop () в случае критического сбоя, чистое завершение означает, что у меня есть код завершения процесса 0, есть ли способ, которым я могу отправить код выхода 1 изпроцесс после вызова bundle.stop (), чтобы потребитель процесса знал, что это не было нормальное завершение работы?

Спасибо!

1 Ответ

1 голос
/ 05 июля 2011

Вы должны использовать интерфейс org.eclipse.equinox.app.IApplication, который дает вам возможность вернуть результат из метода start(), который затем возвращается как код выхода из процесса Java.Если вы не хотите использовать этот API, в следующем коде показано, как Equinox сам управляет кодом выхода процесса Java:

import org.eclipse.osgi.service.environment.EnvironmentInfo;

private static EnvironmentInfo getEnvironmentInfo() {
    BundleContext bc = Activator.getContext();
    if (bc == null)
        return null;
    ServiceReference infoRef = bc.getServiceReference(EnvironmentInfo.class.getName());
    if (infoRef == null)
        return null;
    EnvironmentInfo envInfo = (EnvironmentInfo) bc.getService(infoRef);
    if (envInfo == null)
        return null;
    bc.ungetService(infoRef);
    return envInfo;
}


public static void setExitCode(int exitCode) {
    String key = "eclipse.exitcode";
    String value = Integer.toString(exitCode); // the exit code
    EnvironmentInfo envInfo = getEnvironmentInfo();
    if (envInfo != null)
        envInfo.setProperty(key, value);
    else
        System.getProperties().setProperty(key, value);
}

Приведенный выше код не принимается один за другим, но ондает идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...