Я использовал Felix в качестве встроенной программы, как описано в, How to start and use Apache Felix from code?. Я хочу, чтобы динамически загружать файлы jar из моего приложения-хозяина через OSGi и вызывать методы классов реализации.Felix OSGI Проблема с встроенным приложением
Так я три следующих Maven проектов
1) Maven проект, который имеет интерфейс. И пакет этого интерфейса экспортируется. ---> ProjA.
2) Проект реализации -> ProjB, еще один проект maven, который импортирует ProjA как зависимость от maven и реализует интерфейс с ним с конкретным классом. Также в этом проекте я импортирую пакет OSGi для пакета интерфейса ProjA. Также здесь я регистрирую свою реализацию на OSGI через активатор.
3) Затем ProjC, который является размещенным приложением. Что я там делаю,
HostActivator activator = new HostActivator();
List<Object> list = new LinkedList<Object>();
list.add(activator);
map.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
Felix f = new Felix(map);
f.start();
Bundle a = f.getBundleContext().installBundle("file:C:/ProjA.jar");
Bundle b = f.getBundleContext().installBundle("file:C:/ProjB.jar");); // dirty path ;)
b.start();
ServiceReference sr = activator.getContext().getAllServiceReferences(MyInterface.class.getName(), "(" + "osgi-device-name" + "=*)")[0];
MyInterface dictionary = (MyInterface) activator.getContext().getService(sr);
dictionary.doAction();
Все работает нормально до отливки. Там я вижу следующие ошибки,
Exception in thread "main" java.lang.ClassCastException: projB.MyImplementation cannot be cast to projA.MyInterface
at MyHostApplication.MyMainClass.main(MyMainClass.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Может кто-нибудь помочь мне в этом, для меня это похоже на ошибку на Феликсе.
Как я могу добавить пакет системы? Не могли бы вы уточнить больше? – lsc
Привет, configMap.put (Константы.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "host.service.lookup; version = 1.0.0"); ref http://felix.apache.org/documentation/subprojects/apache-felix-framework/apache-felix-framework-launching-and-embedding.html решил мою проблему. Благодаря! – lsc