[ 
https://issues.apache.org/jira/browse/CAMEL-9562?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15138519#comment-15138519
 ] 

Claus Ibsen commented on CAMEL-9562:
------------------------------------

Have anyone tried to test this by removing that part of the code, and see that 
your apps still runs in OSGi?


> OSGi classloader problem
> ------------------------
>
>                 Key: CAMEL-9562
>                 URL: https://issues.apache.org/jira/browse/CAMEL-9562
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-osgi
>    Affects Versions: 2.16.2
>            Reporter: Brad Johnson
>            Priority: Minor
>
> At least: OSGiClassResolver and OSGiPackageScanner but probably others.  A 
> strict mode flag should be added to enforce using the OSGi classloader.  By 
> default it could be false to be backwardly compatible but when it set to true 
> then the secondary attempt at using the application context classloader would 
> be circumvented.  This should really be the default behavior in an OSGi 
> environment but because of backward compatibility issues that might not be 
> possible. 
> This fix should be relatively easy and unnoticeable by most.  But for those 
> working OSGi environments we usually want the strict mode in order to be in 
> compliance with OSGi.  Without it the current design reflects a classloader 
> leak that shouldn't be allowed.  If a class can't be found then it isn't 
> being exported correctly or a bundle is hiding a class it shouldn't or Camel 
> blueprint isn't being set up correctly or....  But in all cases it should 
> fail.
> The OSGi classloader mechanics includes a fall back mechanism that uses the 
> global classloader to find classes if it can't find them in OSGi registry it 
> cheats with SU.
> OSGiClassResolver:
>  if (clazz == null && camelContext != null) {
>             // fallback and load class using the application context 
> classloader
>             clazz = super.loadClass(name, 
> camelContext.getApplicationContextClassLoader());
>             if (LOG.isTraceEnabled()) {
>                 LOG.trace("Loading class {} using CamelContext {} -> {}", new 
> Object[]{name, camelContext, clazz});
>             }
>         }
> OSGiPackageScanClassResolver.
>  // if we did not find any new, then fallback to use regular non bundle class 
> loading
>         if (classes.size() == classesSize) {
>             // Using the non-OSGi classloaders as a fallback
>             // this is necessary when use JBI packaging for servicemix-camel 
> SU
>             // so that we get chance to use SU classloader to scan packages 
> in the SU
>             log.trace("Cannot find any classes in bundles, not trying regular 
> classloaders scanning: {}", packageName);
>             for (ClassLoader classLoader : super.getClassLoaders()) {
>                 if (!isOsgiClassloader(classLoader)) {
>                     find(test, packageName, classLoader, classes);
>                 }
>             }  
>         }



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

Reply via email to