You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Freeman Fang (JIRA)" <ji...@apache.org> on 2010/12/19 03:25:01 UTC

[jira] Commented: (CAMEL-3442) JBI ClassLoading issue in SMX 4.x in OsgiPackageScanClassResolver

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

Freeman Fang commented on CAMEL-3442:
-------------------------------------

Hi Claus,

I just checked the patch which I appended with CAMEL-3302, my original patch about the concern code is like

+           Set<ClassLoader> set = getClassLoaders();
+            for (ClassLoader classLoader : set.toArray(new ClassLoader[set.size()])) {
+                if (!isOsgiClassloader(classLoader)) {
+                    find(test, packageName, classLoader, classes);
+                }
+            }

With this patch, there should be no ConcurrentModificationException on the Iterator.  Willem revised my patch for better performance but introduce potential ConcurrentModificationException.

@Willem
Would you please re-check  my patch,  as classloaders set size isn't big, so change it to an array isn't a big deal IMHO, but this can avoid concurrent problem(such as ConcurrentModificationException).
Another solution I can come up with is change getClassLoaders() in DefaultPackageScanClassResolver

use
classLoaders = Collections.synchronizedSet(new HashSet<ClassLoader>()); 

instead of
classLoaders = new HashSet<ClassLoader>();

But this also bring in performance impact, I still prefer the way in my original patch.

Best Regards
Freeman






> JBI ClassLoading issue in SMX 4.x in OsgiPackageScanClassResolver
> -----------------------------------------------------------------
>
>                 Key: CAMEL-3442
>                 URL: https://issues.apache.org/jira/browse/CAMEL-3442
>             Project: Camel
>          Issue Type: Bug
>          Components: osgi
>    Affects Versions: 2.5.0
>            Reporter: Claus Ibsen
>             Fix For: 2.6.0
>
>
> CAMEL-3302 introduced a fallback when using JBI in Apache ServiceMix 4.x.
> However it may lead to an issue with ConcurrentModificationException when traversing the list of classloaders.
> {code}
>             for (ClassLoader classLoader : super.getClassLoaders()) {
>                 if (!isOsgiClassloader(classLoader)) {
>                     find(test, packageName, classLoader, classes);
>                 }
>             }  
> {code}
> The for loop is line 62 which causes the exception.
> Issue reported here
> http://camel.465427.n5.nabble.com/ServiceMix-4-Fuse-4-3-0-fuse-03-00-Problems-running-JBI-example-examples-camel-td3309088.html

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.