azkaban-aplcache

Swap out viewer plugin registration in AzkabanWebServer with

1/17/2014 2:26:38 AM

Details

diff --git a/src/java/azkaban/webapp/AzkabanWebServer.java b/src/java/azkaban/webapp/AzkabanWebServer.java
index 9b22f42..b6d961b 100644
--- a/src/java/azkaban/webapp/AzkabanWebServer.java
+++ b/src/java/azkaban/webapp/AzkabanWebServer.java
@@ -95,6 +95,7 @@ import azkaban.webapp.servlet.ProjectManagerServlet;
 import azkaban.webapp.servlet.TriggerManagerServlet;
 import azkaban.webapp.plugin.TriggerPlugin;
 import azkaban.webapp.plugin.ViewerPlugin;
+import azkaban.webapp.plugin.PluginRegistry;
 import azkaban.webapp.session.SessionCache;
 
 /**
@@ -153,7 +154,6 @@ public class AzkabanWebServer extends AzkabanServer {
 	private Props props;
 	private SessionCache sessionCache;
 	private File tempDir;
-	private List<ViewerPlugin> viewerPlugins;
 	private Map<String, TriggerPlugin> triggerPlugins;
 	
 	private MBeanServer mbeanServer;
@@ -215,10 +215,6 @@ public class AzkabanWebServer extends AzkabanServer {
 		configureMBeanServer();
 	}
 
-	private void setViewerPlugins(List<ViewerPlugin> viewerPlugins) {
-		this.viewerPlugins = viewerPlugins;
-	}
-	
 	private void setTriggerPlugins(Map<String, TriggerPlugin> triggerPlugins) {
 		this.triggerPlugins = triggerPlugins;
 	}
@@ -775,7 +771,7 @@ public class AzkabanWebServer extends AzkabanServer {
 		root.addServlet(new ServletHolder(new TriggerManagerServlet()),"/triggers");
 		
 		String viewerPluginDir = azkabanSettings.getString("viewer.plugin.dir", "plugins/viewer");
-		app.setViewerPlugins(loadViewerPlugins(root, viewerPluginDir, app.getVelocityEngine()));
+		loadViewerPlugins(root, viewerPluginDir, app.getVelocityEngine());
 		
 		// triggerplugin
 		String triggerPluginDir = azkabanSettings.getString("trigger.plugin.dir", "plugins/triggers");
@@ -963,13 +959,12 @@ public class AzkabanWebServer extends AzkabanServer {
 		return triggerPlugins;
 	}
 	
-	private static List<ViewerPlugin> loadViewerPlugins(Context root, String pluginPath, VelocityEngine ve) {
+	private static void loadViewerPlugins(Context root, String pluginPath, VelocityEngine ve) {
 		File viewerPluginPath = new File(pluginPath);
 		if (!viewerPluginPath.exists()) {
-			return Collections.<ViewerPlugin>emptyList();
+			return;
 		}
 			
-		ArrayList<ViewerPlugin> installedViewerPlugins = new ArrayList<ViewerPlugin>();
 		ClassLoader parentLoader = AzkabanWebServer.class.getClassLoader();
 		File[] pluginDirs = viewerPluginPath.listFiles();
 		ArrayList<String> jarPaths = new ArrayList<String>();
@@ -1115,7 +1110,7 @@ public class AzkabanWebServer extends AzkabanServer {
 			
 			AbstractAzkabanServlet avServlet = (AbstractAzkabanServlet)obj;
 			root.addServlet(new ServletHolder(avServlet), "/" + pluginWebPath + "/*");
-			installedViewerPlugins.add(new ViewerPlugin(
+			PluginRegistry.getRegistry().register(new ViewerPlugin(
 						pluginName, 
 						pluginWebPath, 
 						pluginOrder, 
@@ -1127,20 +1122,6 @@ public class AzkabanWebServer extends AzkabanServer {
 		String jarResourcePath = StringUtils.join(jarPaths, ", ");
 		logger.info("Setting jar resource path " + jarResourcePath);
 		ve.addProperty("jar.resource.loader.path", jarResourcePath);
-		
-		// Sort plugins based on order
-		Collections.sort(installedViewerPlugins, new Comparator<ViewerPlugin>() {
-			@Override
-			public int compare(ViewerPlugin o1, ViewerPlugin o2) {
-				return o1.getOrder() - o2.getOrder();
-			}
-		});
-		
-		return installedViewerPlugins;
-	}
-	
-	public List<ViewerPlugin> getViewerPlugins() {
-		return viewerPlugins;
 	}
 	
 	/**
diff --git a/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java b/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
index 3d41e2c..2fc6ecc 100644
--- a/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
+++ b/src/java/azkaban/webapp/servlet/AbstractAzkabanServlet.java
@@ -41,6 +41,7 @@ import azkaban.webapp.AzkabanWebServer;
 import azkaban.webapp.session.Session;
 import azkaban.webapp.plugin.ViewerPlugin;
 import azkaban.webapp.plugin.TriggerPlugin;
+import azkaban.webapp.plugin.PluginRegistry;
 
 /**
  * Base Servlet for pages
@@ -93,7 +94,7 @@ public abstract class AbstractAzkabanServlet extends HttpServlet {
 		
 		if (application instanceof AzkabanWebServer) {
 			AzkabanWebServer server = (AzkabanWebServer)application;
-			viewerPlugins = server.getViewerPlugins();
+			viewerPlugins = PluginRegistry.getRegistry().getViewerPlugins();
 			triggerPlugins = new ArrayList<TriggerPlugin>(server.getTriggerPlugins().values());
 		}
 	}