Carlos Sierra created FELIX-4853:
------------------------------------

             Summary: Create a new ServiceDependency that sets the TCCL to the 
incoming servicereference bundle's classloader before invoking callbaks
                 Key: FELIX-4853
                 URL: https://issues.apache.org/jira/browse/FELIX-4853
             Project: Felix
          Issue Type: New Feature
          Components: Dependency Manager
    Affects Versions: dependencymanager-3.2.0
            Reporter: Carlos Sierra


The invoke method would go like this:
{code:title=TCCLServiceDependencyImpl.java|borderStyle=solid}

        @Override
        @SuppressWarnings("rawtypes")
        public void invoke(
                Object[] callbackInstances, DependencyService dependencyService,
                ServiceReference reference, Object service, String name) {

                Bundle bundle = reference.getBundle();

                BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);

                ClassLoader bundleClassLoader = bundleWiring.getClassLoader();

                Thread currentThread = Thread.currentThread();

                ClassLoader contextClassLoader = 
currentThread.getContextClassLoader();

                currentThread.setContextClassLoader(bundleClassLoader);

                try {
                        super.invoke(
                                callbackInstances, dependencyService, 
reference, service, name);
                }
                finally {
                        currentThread.setContextClassLoader(contextClassLoader);
                }
        }
{code}

If you think this is useful I can provide a patch. Which version and which repo 
should I use for it?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to