Konsumowanie usług z Embedded OSGi Framework
Mam osadzony Felix. Mam pakiet API i Impl. Interfejs eksportu APIC
.Impl importuje ten interfejs i rejestruje w aktywatorze. Teraz chcę uzyskać C impl otside OSGi
FrameworkFactory ff = new FrameworkFactory();
...
BundleContext bc = fwk.getBundleContext();
...
final ServiceReference[] serviceReferences = bc.getServiceReferences(C.class.getName(), "(objectclass=" + C.class.getName() + ")");
for(ServiceReference serviceReference : serviceReferences){
final Object service = bc.getService(serviceReference);
...
}
Teraz chcę z nim współpracować. Mogę to zrobić z refleksją
System.out.println(service.getClass().getMethod("some").invoke(service)); //using
Ale nie mogę tego rzucić
System.out.println(service instanceof C); //prints false
Domyślam się, że pochodzi z różnych klas ClassLoaders. Ale jak mogę to rozwiązać? Jak możemy interweniować z kontekstem OSGi z zewnątrz? Albo możemy obisować wszystko w kontenerze OSGi?