Регистрация JAR во время работы - PullRequest
1 голос
/ 03 апреля 2012

Я хочу иметь модульное приложение, которое регистрирует модули JAR во время работы.Для этой цели я использую API поиска Netbeans.

Проблема в том, что я не могу скопировать какой-либо файл JAR непосредственно в папку библиотек, потому что работающий экземпляр не распознает его.В модулях я настроил META-INF.services с именем пакета интерфейса и именем пакета модуля в нем.

Вот пример моего кода:

while(true){  
    Lookup lkp;
    Collection<TestInterface> tests = null;
    Template tmpl;
    final Lookup.Result rslt;

    lkp= Lookup.getDefault();
    //lkp=Lookups.forPath("modules-path");
    tmpl= new Template(TestInterface.class);
    rslt= lkp.lookup(testTemplate);
    tests = rslt.allItems();

    Lookup.getDefault().lookup(TestInterface.class);
        rslt.addLookupListener(new LookupListener() {
            @Override
            public void resultChanged(LookupEvent le) {
                reaction(rslt);
            }
        });

        reaction(rslt);
    }
}

private static void reaction(Lookup.Result r) {
    for (Iterator i = r.allInstances().iterator(); i.hasNext();) {
        TestInterface s = (TestInterface) i.next();
        System.out.println(s.somemethod());
    }
}

Есть предложения / советы, как его решить?

1 Ответ

1 голос
/ 03 апреля 2012

Вы можете использовать OSGi для своих целей вместо Netbeans Lookup.Очевидно, у вас есть контроль над файлами JAR, которые вам нужно загрузить, поэтому он должен работать нормально.

Вам необходимо изменить конфигурацию JAR, чтобы получить пакет OSGi.Для этого вам нужно изменить файл MANIFEST.MF, как описано здесь:

http://www.vogella.de/articles/OSGi/article.html#osgiarch_manifest http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html?page=2

Затем вы можете активировать файл JAR с помощью BundleActivator, который вы определили вваш манифест, как описано здесь:

http://www.vogella.de/articles/OSGi/article.html#codebundle

Затем вы можете опубликовать свой пакет как сервис и использовать его в своем приложении:

http://www.eclipsezone.com/eclipse/forums/t90796.html

...