In order to better understand how TCCL works in OSGi i have done a sample POC.
I created 3 bundles.
Bundle A - calls Bundle B (imports Bundle B)
Bundle B -calls Bundle C (imports Bundle A)
Bundle C - instantiates class in Bundle A (No imports)
In normal cases Bundle C will fail to instantiate class in Bundle A, but this can be achieved using TCCL as follows.
ITest test=(ITest)Thread.currentThread().getContextClassLoader().loadClass("com.bundleA.external.ActionClass").newInstance();
Conclusion: Spring Dm sets TCCL to the bundle classloader where the thread initiated.
Now what if we want to instantiate class of bundle B in Bundle C , but the thread flow doesnt change. ?
This can be easily done by resetting the TCCL in bundle B's method as follows
Thread.currentThread().setContextClassLoader(Bundle2.class.getClassLoader());
Tuesday, November 17, 2009
TCCL in OSGi(Spring DM)
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment