Since in OSGi we have multiple class loaders as compared to single Class Loader case ,there may be occur the problem of cyclic dependency.
This cyclic dependency may not be compile type instead most of the cases its runtime. Some piece of code may try to instantiate classes in another bundle using reflection.
Consider such a example
Bundle A requires Bundle B at runtime and vice versa.
Bundle A has to mention import in its manifest for bundle B classes and Bundle B has to do the same for Bundle A classes.
Now in such case when Bundle A is deployed it says class not found for Bundle B classes,hence to solve this we need to write
Import Package : package-from-BundleB;resolution=optional
Now Bundle A doesn't give error . Follow with deployment of Bundle B. Later when bundle A tries to access classes in Bundle B it says ClassNotFoundException.
This is because when we mentioned resolution=optional , it doesn't try to link again when class is requested. And the linking happens only initial time.
To solve this we need to use Dynamic imports in such cases.
This cyclic dependency in most of the cases can be solved using Thread Context Class Loader or Eclipse Buddy Class Loading(refer next blog for details),and there will rarely occur a case to use dynamic imports.
Saturday, August 8, 2009
Cyclic Dependency in OSGi & Dynamic Imports
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment