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.

Odpovedet emailem