You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by tb...@apache.org on 2014/09/20 00:50:14 UTC
git commit: AMBARI-7418 - Views: cannot create instance w/o a restart.
Repository: ambari
Updated Branches:
refs/heads/trunk 40050513e -> c840be073
AMBARI-7418 - Views: cannot create instance w/o a restart.
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c840be07
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c840be07
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c840be07
Branch: refs/heads/trunk
Commit: c840be073d1b969b50bedee9d8252dbc20ea9ab9
Parents: 4005051
Author: tbeerbower <tb...@hortonworks.com>
Authored: Fri Sep 19 18:32:31 2014 -0400
Committer: tbeerbower <tb...@hortonworks.com>
Committed: Fri Sep 19 18:49:46 2014 -0400
----------------------------------------------------------------------
.../ambari/server/view/ViewProviderModule.java | 26 ++++----------------
.../apache/ambari/server/view/ViewRegistry.java | 22 ++++++++++++++++-
.../ambari/server/view/ViewRegistryTest.java | 20 +++++++++++++++
3 files changed, 46 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/c840be07/ambari-server/src/main/java/org/apache/ambari/server/view/ViewProviderModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewProviderModule.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewProviderModule.java
index edaff1b..5fadf22 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewProviderModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewProviderModule.java
@@ -22,9 +22,7 @@ import org.apache.ambari.server.controller.spi.PropertyProvider;
import org.apache.ambari.server.controller.spi.ProviderModule;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.ResourceProvider;
-import org.apache.ambari.server.orm.entities.ViewEntity;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -35,11 +33,6 @@ import java.util.Map;
*/
public class ViewProviderModule implements ProviderModule {
/**
- * Mapping of view resource type to resource provider.
- */
- private final Map<Resource.Type, ResourceProvider> resourceProviders;
-
- /**
* The delegate provider module.
*/
private final ProviderModule providerModule;
@@ -51,12 +44,9 @@ public class ViewProviderModule implements ProviderModule {
* Construct a view provider module.
*
* @param providerModule the delegate provider module
- * @param resourceProviders the map of view resource types to resource providers
*/
- private ViewProviderModule(ProviderModule providerModule,
- Map<Resource.Type, ResourceProvider> resourceProviders) {
+ private ViewProviderModule(ProviderModule providerModule) {
this.providerModule = providerModule;
- this.resourceProviders = resourceProviders;
}
@@ -65,6 +55,9 @@ public class ViewProviderModule implements ProviderModule {
@Override
public ResourceProvider getResourceProvider(Resource.Type type) {
+ Map<Resource.Type, ResourceProvider> resourceProviders =
+ ViewRegistry.getInstance().getResourceProviders();
+
if (resourceProviders.containsKey(type)) {
return resourceProviders.get(type);
}
@@ -87,15 +80,6 @@ public class ViewProviderModule implements ProviderModule {
* @return a view provider module
*/
public static ViewProviderModule getViewProviderModule(ProviderModule module) {
- Map<Resource.Type, ResourceProvider> resourceProviders = new HashMap<Resource.Type, ResourceProvider>();
-
- ViewRegistry registry = ViewRegistry.getInstance();
- for (ViewEntity definition : registry.getDefinitions()) {
- for (Resource.Type type : definition.getViewResourceTypes()){
- ResourceProvider provider = definition.getResourceProvider(type);
- resourceProviders.put(type, provider);
- }
- }
- return new ViewProviderModule(module, resourceProviders);
+ return new ViewProviderModule(module);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c840be07/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
index 5e652a1..58c4334 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
@@ -29,6 +29,7 @@ import org.apache.ambari.server.api.services.ViewExternalSubResourceService;
import org.apache.ambari.server.api.services.ViewSubResourceService;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.ResourceProvider;
import org.apache.ambari.server.orm.dao.MemberDAO;
import org.apache.ambari.server.orm.dao.PrivilegeDAO;
import org.apache.ambari.server.orm.dao.ResourceDAO;
@@ -125,6 +126,12 @@ public class ViewRegistry {
new HashMap<String, Set<SubResourceDefinition>>();
/**
+ * Mapping of view types to resource providers.
+ */
+ private final Map<Resource.Type, ResourceProvider> resourceProviders =
+ new ConcurrentHashMap<Resource.Type, ResourceProvider>();
+
+ /**
* Mapping of view names to registered listeners.
*/
private final Map<String, Set<Listener>> listeners =
@@ -732,6 +739,15 @@ public class ViewRegistry {
listeners.clear();
}
+ /**
+ * Get the view resource provider mapping.
+ *
+ * @return the map of view resource providers
+ */
+ protected Map<Resource.Type, ResourceProvider> getResourceProviders() {
+ return resourceProviders;
+ }
+
// get a view entity for the given internal view name
private ViewEntity getDefinition(String viewName) {
return viewDefinitions.get(viewName);
@@ -768,6 +784,8 @@ public class ViewRegistry {
new ViewExternalSubResourceProvider(externalResourceType, viewDefinition);
viewDefinition.addResourceProvider(externalResourceType, viewExternalSubResourceProvider );
+ resourceProviders.put(externalResourceType, viewExternalSubResourceProvider);
+
ResourceInstanceFactoryImpl.addResourceDefinition(externalResourceType,
new ViewExternalSubResourceDefinition(externalResourceType));
@@ -799,7 +817,9 @@ public class ViewRegistry {
Class<?> clazz = resourceConfiguration.getResourceClass(cl);
String idProperty = resourceConfiguration.getIdProperty();
- viewDefinition.addResourceProvider(type, new ViewSubResourceProvider(type, clazz, idProperty, viewDefinition));
+ ViewSubResourceProvider provider = new ViewSubResourceProvider(type, clazz, idProperty, viewDefinition);
+ viewDefinition.addResourceProvider(type, provider);
+ resourceProviders.put(type, provider);
resources.add(viewResourceEntity);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/c840be07/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
index 56ee434..47bf5c3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
@@ -519,6 +519,26 @@ public class ViewRegistryTest {
}
@Test
+ public void testGetResourceProviders() throws Exception {
+
+ ViewConfig config = ViewConfigTest.getConfig();
+
+ ViewEntity viewDefinition = ViewEntityTest.getViewEntity();
+
+ ViewRegistry registry = ViewRegistry.getInstance();
+
+ registry.setupViewDefinition(viewDefinition, config, getClass().getClassLoader());
+
+ Map<Resource.Type, ResourceProvider> providerMap = registry.getResourceProviders();
+
+ Assert.assertEquals(3, providerMap.size());
+
+ Assert.assertTrue(providerMap.containsKey(Resource.Type.valueOf("MY_VIEW{1.0.0}/resource")));
+ Assert.assertTrue(providerMap.containsKey(Resource.Type.valueOf("MY_VIEW{1.0.0}/subresource")));
+ Assert.assertTrue(providerMap.containsKey(Resource.Type.valueOf("MY_VIEW{1.0.0}/resources")));
+ }
+
+ @Test
public void testAddGetDefinitions() throws Exception {
ViewEntity viewDefinition = ViewEntityTest.getViewEntity();