[
https://issues.apache.org/jira/browse/NUTCH-2163?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Lewis John McGibbney updated NUTCH-2163:
----------------------------------------
Summary: Utilize current JVM threads to augment URLClassLoader with newly
discovered classes (was: Utilize current JVM threads to augment URLClassLoader
with newlt discovered classes)
> Utilize current JVM threads to augment URLClassLoader with newly discovered
> classes
> -----------------------------------------------------------------------------------
>
> Key: NUTCH-2163
> URL: https://issues.apache.org/jira/browse/NUTCH-2163
> Project: Nutch
> Issue Type: Bug
> Components: util
> Reporter: Lewis John McGibbney
>
> I found [this
> code|https://github.com/apache/nutch/compare/trunk...infolinks:nutch-osgi] a
> while back and have been thinking about OSGi again for Nutch.
> Our justification here is that we want to dynamically create
> [InteractiveSeleniumHandler's|https://github.com/apache/nutch/blob/trunk/src/plugin/protocol-interactiveselenium/src/java/org/apache/nutch/protocol/interactiveselenium/handlers/InteractiveSeleniumHandler.java]
> and inject the code into the .job artifacts which can then be used in the
> next round of fetching.
> The code looks like the following
> {code}
> + List<URL> nutchConfigurationClasspathURLs = new ArrayList<URL>();
> +
> + // Collect classpath URLs from Hadoop's Configuration class CL
> + URLClassLoader hadoopBundleConfigurationClassLoader = (URLClassLoader)
> conf.getClassLoader();
> + for (URL hadoopBundleClasspathURL :
> hadoopBundleConfigurationClassLoader.getURLs()) {
> + nutchConfigurationClasspathURLs.add(hadoopBundleClasspathURL);
> + }
> +
> + // Append classpath URLs from current thread, which ostensibly include a
> Nutch job file
> + URLClassLoader tccl = (URLClassLoader)
> Thread.currentThread().getContextClassLoader();
> + for (URL tcclClasspathURL : tccl.getURLs()) {
> + nutchConfigurationClasspathURLs.add(tcclClasspathURL);
> + }
> +
> + URLClassLoader nutchConfigurationClassLoader = new
> URLClassLoader(nutchConfigurationClasspathURLs.toArray(new URL[0]));
> + // Reset the Configuration object's CL to the new one
> + conf.setClassLoader(nutchConfigurationClassLoader);
> {code}
> The Thread.currentThread().getContextClassLoader(); is the secret sauce...
> however I just wonder what thoughts are about this approach?
> We have, from time to time over the years discussed
> [Nutch|http://wiki.apache.org/nutch/NutchOSGi] and I spoke with
> [~bdelacretaz] a good few years ago @ApacheCon but I don't have the time to
> implement total OSGi coverage of the Nutch codebase.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)