===================================================================
--- src/main/java/org/apache/felix/moduleloader/ModuleImpl.java
(revision 630863)
+++ src/main/java/org/apache/felix/moduleloader/ModuleImpl.java (working
copy)
@@ -147,10 +147,17 @@
}
catch (ClassNotFoundException ex)
{
- m_logger.log(
- Logger.LOG_WARNING,
- ex.getMessage(),
- ex);
+ // Diagnosing the class loader error is very costly, so only
+ // perform this call (indirectly through ex.getMessage())
+ // if necessary.
+ // See R4SearchPolicyCore#findClass
+ if (m_logger.getLogLevel() >= Logger.LOG_WARNING)
+ {
+ m_logger.log(
+ Logger.LOG_WARNING,
+ ex.getMessage(),
+ ex);
+ }
}
return null;
}
Index:
src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
===================================================================
---
src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
(revision 630863)
+++
src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
(working copy)
@@ -178,7 +178,7 @@
return null;
}
- public Class findClass(IModule module, String name)
+ public Class findClass(final IModule module, final String name)
throws ClassNotFoundException
{
try
@@ -191,8 +191,13 @@
}
catch (ClassNotFoundException ex)
{
- String msg = diagnoseClassLoadError(module, name);
- throw new ClassNotFoundException(msg, ex);
+ throw new ClassNotFoundException("", ex)
+ {
+ public String getMessage()
+ {
+ return diagnoseClassLoadError(module, name);
+ }
+ };
}
// We should never reach this point.
On Mon, Feb 25, 2008 at 3:37 PM, Stuart McCulloch
<[EMAIL PROTECTED]> wrote:
On 25/02/2008, Guillaume Nodet <[EMAIL PROTECTED]> wrote:
>
> I'm currently working on ServiceMix 4 which uses Felix.\
>
> I have some really important performance problems in classloading.
> When loading JBI applications (they have some very specific
> classloading architecture
> that must be implemented to be JBI compliant), 95% of the time is
> spent in the following method:
> R4SearchPolicyCore.diagnoseClassLoadError()
> which is not really acceptable.
>
> The problem is that the classloader is built dynamically and does not
> completely rely on
> OSGi. For this reason, the classloader of JBI artifacts delegates to
> the parent classloader,
> then looks inside its own jar. This means there will be lots of
> ClassNotFoundException thrown
> by the parents classloader (ultimately by Felix).
>
> Is there any way to maybe speed / disable the diagnoseClassLoadError
> method call which
> is purely informative ?
we could try a lazy-load approach (ie. only construct the string in the
getMessage method)
for example, you might want to see if the following patch helps, based
on
the current trunk:
Index:
src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
===================================================================
---
src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
(revision 630859)
+++
src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
(working copy)
@@ -178,7 +178,7 @@
return null;
}
- public Class findClass(IModule module, String name)
+ public Class findClass(final IModule module, final String name)
throws ClassNotFoundException
{
try
@@ -191,8 +191,14 @@
}
catch (ClassNotFoundException ex)
{
- String msg = diagnoseClassLoadError(module, name);
- throw new ClassNotFoundException(msg, ex);
+ // lazy construction of exception message
+ throw new ClassNotFoundException("", ex)
+ {
+ public String getMessage()
+ {
+ return diagnoseClassLoadError(module, name);
+ }
+ };
}
// We should never reach this point.
@@ -3272,4 +3278,4 @@
return sb.toString();
}
-}
\ No newline at end of file
+}
although lazy construction might cause problems if people hold onto
the exception for a long time, but I don't think this is usually the
case
I know the design of the JBI classloaders is not really a good fit in
> OSGi, so I will investigate
> a better solution (leveraging more of OSGi classloaders) anyway, but
I
> still wanted to report
> the problem.
>
>
> --
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
>
--
Cheers, Stuart
--
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/