Получить все реализации API

Я написал API Bundle и некоторые сервисы реализации.

Теперь я хочу использовать их в качестве плагинов, поэтому прежде всего мне нужен список всех сервисов, которые у меня есть.

Я запускаю API, как это:

    Framework m_fwk = new org.apache.felix.framework.FrameworkFactory().newFramework(null);
    m_fwk.init();
    AutoProcessor.process(null, m_fwk.getBundleContext());
    m_fwk.start();

    Bundle api = m_fwk.getBundleContext().installBundle(
    "file:/foo/bar/api/target/api-1.0.jar");

    api.start();

Так что теперь API загружен. Теперь мне нужно знать, какие пакеты реализуют этот API, как я могу получить эту информацию из фреймворка?

3 ответа

Решение

Кажется, вы только загружаете пакет API, я полагаю, вы хотите установить другие пакеты для реализаций? Большинство людей тогда загружают директора или около того:

for ( File b : bundles.listFiles() ) {
ctx.installBundle( b.toURI().toURL() );
}Каждый из этих пакетов должен выглядеть так (используя DS):

@Component
public class Impl implements API {
public whatever() { ... }
}

Пакет, собирающий сервисы, может выглядеть так:

@Component
public class Collector {
@Reference(type='*')void addAPI( API api ) { ... }
void removeAPI( API api ) { ... }
}

Это делается с помощью аннотаций bnd для DS (примеры приведены в bndtools). Однако вы также можете внедрить / собрать сервисы в Blueprint, iPojo и многих других помощниках.

Похоже, вы пытаетесь повторно реализовать реестр служб OSGi. Взгляните на Blueprint или декларативные услуги вместо этого. По крайней мере, я бы предложил использовать сервисный API OSGi для регистрации и использования сервисов.

Учитывая, что рамки также BundleВы можете получить BundleContext это позволяет вам найти все необходимые вам услуги. Вы могли бы сделать что-то вроде

m_fwk.getBundleContext().getServiceReferences("com.example.MyInterface", null)

получить всех разработчиков данного сервиса.

Тем не менее, вы должны знать, что вы живете в другой загрузчик классов, чем жители вашей структуры.

Другие вопросы по тегам