/** * Helper method to get the plugin module method hooks, the module references * * @param app the app to invoke * @return an immutable map of the on-module refs of the apps */ private List<OnModuleReference> onModuleRefs(App app) { List<OnModuleReference> list = Lists.newArrayList(); for (Method method : app.getClass().getDeclaredMethods()) { if (!method.getName().equals("onModule")) { continue; } if (method.getParameterTypes().length == 0 || method.getParameterTypes().length > 1) { logger.warn( "plugin {} implementing onModule with no parameters or more than one parameter", app.name()); continue; } Class moduleClass = method.getParameterTypes()[0]; if (!Module.class.isAssignableFrom(moduleClass)) { logger.warn( "plugin {} implementing onModule by the type is not of Module type {}", app.name(), moduleClass); continue; } method.setAccessible(true); list.add(new OnModuleReference(moduleClass, method)); } return list; }
public void readClusterFromZk() throws Exception { List<String> processes; List<String> tasks; tasks = zkClient.getChildren(taskPath); processes = zkClient.getChildren(processPath); taskNumber = tasks.size(); for (int i = 0; i < processes.size(); i++) { ZNRecord process = zkClient.readData(processPath + "/" + processes.get(i), true); if (process != null) { int partition = Integer.parseInt(process.getSimpleField("partition")); String host = process.getSimpleField("host"); int port = Integer.parseInt(process.getSimpleField("port")); String taskId = process.getSimpleField("taskId"); ClusterNode node = new ClusterNode(partition, port, host, taskId); nodes.add(node); } } app = new App(); app.cluster = clusterName; try { ZNRecord appRecord = zkClient.readData(appPath); app.name = appRecord.getSimpleField("name"); app.uri = appRecord.getSimpleField("s4r_uri"); } catch (ZkNoNodeException e) { logger.warn(appPath + " doesn't exist"); } }
public void processModule(Module module) { for (App app : moduleApps.values()) { app.processModule(module); // see if there are onModule references List<OnModuleReference> references = onModuleReferences.get(app); if (references != null) { for (OnModuleReference reference : references) { if (reference.moduleClass.isAssignableFrom(module.getClass())) { try { reference.onModuleMethod.invoke(app, module); } catch (Exception e) { logger.warn("app {}, failed to invoke custom onModule method", e, app.name()); } } } } } }
@Override public void endElement(String localName) { super.endElement(localName); if (mApp != null) { // We are inside <app> if (localName.equalsIgnoreCase("app")) { // Closing tag of <app> - add to vector and be ready for next one if (!mApp.name.equals("")) { // name is a must mApps.add(mApp); } mApp = null; } else { // Not the closing tag - we decode possible inner tags if (localName.equalsIgnoreCase("name")) { mApp.name = getCurrentElement(); } else if (localName.equalsIgnoreCase("user_friendly_name")) { mApp.user_friendly_name = getCurrentElement(); } } } }