Zdravím, OSGi nemuzete jen tak embeddnout, naopak, ono si embeddne vás. Neboli musíte upravit svoji aplikaci tak, aby bylo ve forme OSGi pluginu a startovat ji neprímo pres OSGi. Jinak se z toho nevymotáte. OSGi je kontejner, predstavuje základní infrastrukturu aplikace, které se vy musíte prizpusobit, a ona bude manageovat vase pluginy, jejich závislosti a extension pointy. Jakékoliv "prenásení tríd mezi classloadery" nejde delat a je to v OSGi a spol. dusledkem chybného prístupu k celé veci.
S pozdravem Roman Kratochvíl From: Zdenko Vrabel Sent: Thursday, February 10, 2011 2:46 PM To: Java Subject: problem dvoch classloadrov a jednej triedy(interfejsu) 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.