Repository: ambari Updated Branches: refs/heads/trunk 7473b1d70 -> e4613a328
AMBARI-10965 - Views: @Inject using com.google.inject.Inject is broken. (tbeerbower) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e4613a32 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e4613a32 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e4613a32 Branch: refs/heads/trunk Commit: e4613a328683f49eb6e89da3aa5efa964af77fcc Parents: 7473b1d Author: tbeerbower <[email protected]> Authored: Wed May 6 16:03:38 2015 -0400 Committer: tbeerbower <[email protected]> Committed: Wed May 6 16:03:52 2015 -0400 ---------------------------------------------------------------------- .../ambari/server/view/ViewClassLoader.java | 20 ++++++++++++++++---- .../ambari/server/view/ViewClassLoaderTest.java | 8 ++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e4613a32/ambari-server/src/main/java/org/apache/ambari/server/view/ViewClassLoader.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewClassLoader.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewClassLoader.java index ad8c805..5b0c317 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewClassLoader.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewClassLoader.java @@ -53,13 +53,25 @@ public class ViewClassLoader extends WebAppClassLoader { * @param urls the URLs from which to load classes and resources */ public ViewClassLoader(ClassLoader parent, URL[] urls) throws IOException { - // Use no-arg web app context to initialize the class loader. For now we are just using the default context - // values for things like parent loader priority and server classes. In the future we may allow overrides at - // the view level. - super(parent, new WebAppContext()); + super(parent, getInitContext()); for (URL url : urls) { addURL(url); } } + + + // ----- helper methods ---------------------------------------------------- + + // Get a context to initialize the class loader. + private static WebAppContext getInitContext() { + // For now we are using defaults or setting the values for things like parent loader priority and + // system classes. In the future we may allow overrides at the view level. + WebAppContext webAppContext = new WebAppContext(); + + // add com.google.inject as system classes to allow for injection in view components using the google annotation + webAppContext.addSystemClass("com.google.inject."); + + return webAppContext; + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/e4613a32/ambari-server/src/test/java/org/apache/ambari/server/view/ViewClassLoaderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewClassLoaderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewClassLoaderTest.java index 3a9ecd3..b6a1396 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewClassLoaderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewClassLoaderTest.java @@ -71,6 +71,7 @@ public class ViewClassLoaderTest { expect(parentClassLoader.loadClass("java.lang.Object")).andReturn(parentClass).anyTimes(); expect(parentClassLoader.loadClass("ParentClass")).andReturn(parentClass).once(); expect(parentClassLoader.loadClass("javax.xml.parsers.SAXParserFactory")).andReturn(parentClass).once(); + expect(parentClassLoader.loadClass("com.google.inject.AbstractModule")).andReturn(parentClass).once(); replay(parentClassLoader); @@ -90,11 +91,18 @@ public class ViewClassLoaderTest { Assert.assertNotNull(clazz); Assert.assertSame(parentClass, clazz); + // should be loaded by parent loader clazz = classLoader.loadClass("javax.xml.parsers.SAXParserFactory"); Assert.assertNotNull(clazz); Assert.assertSame(parentClass, clazz); + // should be loaded by parent loader + clazz = classLoader.loadClass("com.google.inject.AbstractModule"); + + Assert.assertNotNull(clazz); + Assert.assertSame(parentClass, clazz); + verify(parentClassLoader); }
