Ahojte, V ramci experimentovania s OSGi som sa dostal do situacie s ClassLoaderom, z ktorej sa neviem vymotat. Ide o to, ze kazdy Bundle v ramci OSGi ma vlastny classloader. Ja som OSGi (konkretne Felix) embeddol do jednej svojej aplikacie a chcel som pouzit jeden service. Problem je ten ze moja aplikacia (dajme tomu reprezentovana jednou Main triedou) ma svoj ClassLoader a service zase svoj. Dosledok toho je to ze ziskam referenciu na service ale neviem ju castnut na konkretny interface.
Napriklad: ServiceReference ref = .... //referencia na implementaciu ICommand interface-u Object osgiService = felix.getBundleContext().getService(ref); ICommand command = (ICommand) osgiService; //class cast exception Dovodom je to ze ICommand.class.getClassLoader() != osgiService.getClass().getClassLoader(). Mna by zaujimalo ako to riesi OSGi classloadrami? Akoto oni dokazu? Je mozne zobrat referenciu na class z jedneho loadra a hodit ju do druheho? Skusal som pouzit : Thread.currentThread().setContextClassLoader(osgiService.getClass().getClassLoader()); co by malo nahradit cely classloader ale bohuzial bez uspechu. ICommand.class.getClassLoader() stale vrati stary classloader.Priznam sa ze zalezitosti okolo classloadra su mi trosku zahadou a chapem len ten hlavny princip classloadra. To ci je mozne do classloadra dostat nieco ine z druheho classloadra mi je zahadou. Dakujem velmi pekne za kazdu radu, kazdy postreh.
