⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eventengine.java

📁 监控大型网络的软件。能够自动发现拓扑结构
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	}	public synchronized void updateFromDB() {		devDB.startDBUpdate();		Class[] ddbClass = new Class[1];		Object[] o = new Object[] { devDB };		try {			ddbClass[0] = Class.forName("no.ntnu.nav.eventengine.DeviceDB");		} catch (ClassNotFoundException e) {			System.err.println("ClassNotFoundException when getting DeviceDB reference: " + e.getMessage());			e.printStackTrace(System.err);		}		List deviceClassList = new ArrayList();		for (Iterator i = deviceClassMap.values().iterator(); i.hasNext();) {			Class c = (Class)i.next();			deviceClassList.add(new DeviceClassEntry(findDepth(c), c));		}		Collections.sort(deviceClassList);		for (Iterator i = deviceClassList.iterator(); i.hasNext();) {			Class c = ((DeviceClassEntry)i.next()).deviceClass;			try {				Method m = c.getMethod("updateFromDB", ddbClass);				m.invoke(null, o);			} catch (NoSuchMethodException e) {				Log.w("PLUGIN_MONITOR_TASK", "CONSTRUCTOR", "NoSuchMethodException when invoking updateFromDB in class " + c.getName() + ": " + e.getMessage());				e.printStackTrace(System.err);			} catch (IllegalAccessException e) {				Log.w("PLUGIN_MONITOR_TASK", "CONSTRUCTOR", "IllegalAccessException when invoking updateFromDB in class " + c.getName() + ": " + e.getMessage());				e.printStackTrace(System.err);			} catch (InvocationTargetException e) {				Log.w("PLUGIN_MONITOR_TASK", "CONSTRUCTOR", "InvocationTargetException when invoking updateFromDB in class " + c.getName() + ": " + e.getMessage());				e.printStackTrace(System.err);			}		}		devDB.endDBUpdate();		classDepthCache.clear();		// Now call 'init' for all devices		for (Iterator i = deviceMap.values().iterator(); i.hasNext();) ((Device)i.next()).init(devDB);		//Device d = (Device)devDB.getDevice(279);		//errl("Found:\n"+d);	}	class DeviceClassEntry implements Comparable	{		int depth;		Class deviceClass;		public DeviceClassEntry(int depth, Class c)		{			this.depth = depth;			this.deviceClass = c;		}		public int compareTo(Object o)		{			DeviceClassEntry dc = (DeviceClassEntry)o;			return new Integer(depth).compareTo(new Integer(dc.depth)) * -1; // Sort in reverse order, biggest first		}	}	HashMap classDepthCache = new HashMap();	private int findDepth(Class c)	{		Integer depth;		if ( (depth=(Integer)classDepthCache.get(c.getName())) != null) return depth.intValue();		Class parent = c.getSuperclass();		if (parent == null) return 0;		classDepthCache.put(c.getName(), depth = new Integer(findDepth(parent)+1));		Log.d("PLUGIN_MONITOR_TASK", "CONSTRUCTOR", "Class " + c.getName() + " has depth " + depth.intValue());		return depth.intValue();	}	private boolean update(File pluginDir, Map fileMap, Map pluginMap, File[] dependFiles)	{		// The cloneMap is used to remove plugins whose .jar file is deleted		Map cloneMap = (Map) ((HashMap)pluginMap).clone();		boolean hasChanged = false;		File[] fileList = pluginDir.listFiles();		if (dependFiles != null) {			for (int i=0; i < dependFiles.length; i++) {				try {						cl.appendURL(dependFiles[i].toURL());				} catch (MalformedURLException e) {} // Should never happen			}		}		for (int i=0; i < fileList.length; i++) {			if (!fileList[i].getName().toLowerCase().endsWith(".jar")) continue;			cloneMap.remove(fileList[i].getName());			try {				Long lastMod;				// If new or modified JAR				if ( (lastMod=(Long)fileMap.get(fileList[i].getName())) == null || 						 !lastMod.equals(new Long(fileList[i].lastModified())) ) {					fileMap.put(fileList[i].getName(), new Long(fileList[i].lastModified()));					cl.appendURL(fileList[i].toURL());					JarFile jf = new JarFile(fileList[i]);					Manifest mf = jf.getManifest();					Attributes attr = mf.getMainAttributes();					String cn = attr.getValue("Plugin-Class");					Log.d("PLUGIN_MONITOR_TASK", "UPDATE", "New or modified jar, trying to load " + fileList[i].getName());					if (cn == null) {						Log.d("PLUGIN_MONITOR_TASK", "UPDATE", "JAR is missing Plugin-Class manifest, skipping...");						continue;					}					Class c, deviceClass, handlerInterface;					try {						deviceClass = Class.forName("no.ntnu.nav.eventengine.Device");						handlerInterface = Class.forName("no.ntnu.nav.eventengine.EventHandler");						c = cl.loadClass(cn);					} catch (ClassNotFoundException e) {						Log.w("PLUGIN_MONITOR_TASK", "UPDATE", "Class " + cn + " not found in jar " + fileList[i].getName() + ", msg: " + e.getMessage());						continue;					} catch (NoClassDefFoundError e) {						Log.w("PLUGIN_MONITOR_TASK", "UPDATE", "NoClassDefFoundError when loading class " + cn + " from jar " + fileList[i].getName() + ", msg: " + e.getMessage());						continue;					}					if (deviceClass.isAssignableFrom(c) || handlerInterface.isAssignableFrom(c)) {						// Found new Device, add to list						pluginMap.put(fileList[i].getName(), c);						hasChanged = true;						Log.d("PLUGIN_MONITOR_TASK", "UPDATE", "OK! JAR Loaded and added to pluginMap");					} else {						Log.w("PLUGIN_MONITOR_TASK", "UPDATE", "Failed! Class " + cn + " is not an event engine plugin");					}				}			} catch (IOException e) {				Log.e("PLUGIN_MONITOR_TASK", "UPDATE", "IOException when loading jar " + fileList[i].getName() + ", msg: " + e.getMessage());			}		}		Iterator i = cloneMap.keySet().iterator();		while (i.hasNext()) {			String fn = (String)i.next();			Log.d("PLUGIN_MONITOR_TASK", "UPDATE", "Removing jar " + fn + " from pluginMap");			pluginMap.remove(fn);			fileMap.remove(fn);			hasChanged = true;		}		return hasChanged;	}	class DynamicURLClassLoader extends URLClassLoader {		Set urlSet = new HashSet();		DynamicURLClassLoader() {			super(new URL[0]);		}		public void appendURL(URL u) {			if (urlSet.add(u)) {				addURL(u);			}		}	}}class EventqMonitorTask extends TimerTask implements EventHandler{	MessagePropagator mp;	Map handlerClassMap;	DeviceDBImpl devDB;	ConfigFileMonitorTask cfmt;	Map handlerCache = new HashMap();	int lastEventqid = 0;	public EventqMonitorTask(MessagePropagator mp, Map handlerClassMap, DeviceDBImpl devDB, ConfigFileMonitorTask cfmt)	{		this.mp = mp;		this.handlerClassMap = handlerClassMap;		this.devDB = devDB;		this.cfmt = cfmt;	}	public void updateCache()	{		//Map cloneMap = (Map) ((HashMap)handlerClassMap).clone();		handlerCache.clear();		handlerCache.put(handleEventTypes()[0], new ArrayList( Arrays.asList(new Object[] { this }) ));		handlerCache.put("_all", new ArrayList());		for (Iterator i=handlerClassMap.values().iterator(); i.hasNext();) {			Class c = (Class)i.next();			EventHandler eh;			try {				eh = (EventHandler)c.newInstance();			} catch (InstantiationException e) {				Log.w("EVENTQ_MONITOR_TASK", "UPDATE_CACHE", "Main EventHandler plugin class must have a public default (no args) constructor:" + e.getMessage());				continue;			} catch (IllegalAccessException e) {				Log.w("EVENTQ_MONITOR_TASK", "UPDATE_CACHE", "Main EventHandler plugin class must have a public default (no args) constructor:" + e.getMessage());				continue;			}			String[] s = eh.handleEventTypes();			for (int j=0; j < s.length; j++) {				List l;				if ( (l=(List)handlerCache.get(s[j])) == null) handlerCache.put( s[j], l=new ArrayList());				l.add(eh);			}		}	}	public String[] handleEventTypes() { return new String[] { "notification" }; }	public void handle(DeviceDB ddb, Event e, ConfigParser cp) {		// Event for me!		String cmd = e.getVar("command");		if ("updateFromDB".equals(cmd)) {			mp.updateFromDB();			e.dispose();		} else		if ("dumpDeviceList".equals(cmd)) {			List devL = new ArrayList();			for (Iterator it=devDB.getDeviceMap().keySet().iterator(); it.hasNext();) {				devL.add(it.next());			}			Collections.sort(devL);			Log.d("EVENTQ_MONITOR_TASK", "DUMP_DEVICE_LIST", "Devices known: " + devL);			e.dispose();		} else {			Log.d("EVENTQ_MONITOR_TASK", "RUN", "Unknown notification command: " + cmd);			e.defer("Unknown notification command: " + cmd);		}	}	public void run()	{		try {			ResultSet rs = Database.query("SELECT eventqid,source,deviceid,netboxid,subid,time,eventtypeid,state,value,severity,var,val FROM eventq LEFT JOIN eventqvar USING (eventqid) WHERE eventqid > "+lastEventqid + " AND target='eventEngine' AND severity >= 0 ORDER BY eventqid");			List eventList = new ArrayList();			while (rs.next()) {				eventList.add(DeviceDBImpl.eventFactory(rs));			}			if (rs.last()) if (rs.getInt("eventqid") > lastEventqid) lastEventqid = rs.getInt("eventqid");						if (!eventList.isEmpty()) {				Log.d("EVENTQ_MONITOR_TASK", "RUN", "Fetched " + eventList.size() + " events from eventq");			} else {				return;			}			int eventCnt=0;			for (Iterator it = eventList.iterator(); it.hasNext();) {				Event e = (Event)it.next();				eventCnt++;				Log.d("EVENTQ_MONITOR_TASK", "RUN", "Got event: " + e);				String eventtypeid = e.getEventtypeid();				List eventHandlerList = new ArrayList( (List)handlerCache.get("_all")); // Handlers handling all events				{					List handlers = (List) handlerCache.get( (handlerCache.containsKey(eventtypeid) ? eventtypeid : "info") ) ;					if (handlers != null) eventHandlerList.addAll(handlers);				}				if (eventHandlerList.isEmpty()) {					Log.w("EVENTQ_MONITOR_TASK", "RUN", "No handler found for eventtype: " + eventtypeid);					continue;				}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -